Skip to content

a small sandbox game #24

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions examples/mystery_sand/node_2d.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[gd_scene load_steps=4 format=3 uid="uid://kgubng073jgd"]

[ext_resource type="Script" path="res://addons/compute_shader_studio/compute_shader_studio_2d.gd" id="1_pm5r1"]
[ext_resource type="Texture2D" uid="uid://demftcowdd5c6" path="res://examples/icon.svg" id="2_truio"]

[sub_resource type="GDScript" id="GDScript_p6fp7"]
script/source = "extends Sprite2D

var compute_shader_material
# Called when the node enters the scene tree for the first time.
func _ready():
pass;



# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass;

"

[node name="Node2D" type="Node2D"]
metadata/_edit_horizontal_guides_ = [-262.0]

[node name="ComputeShaderStudio2D" type="Node" parent="." node_paths=PackedStringArray("data")]
script = ExtResource("1_pm5r1")
glsl_file = "res://examples/2dFluidSimulation/shader.cpp"
GLSL_code = ""
data = [NodePath("../Icon")]

[node name="Icon" type="Sprite2D" parent="."]
texture_filter = 1
position = Vector2(574.5, 327.5)
scale = Vector2(8.97656, 5.14844)
texture = ExtResource("2_truio")
script = SubResource("GDScript_p6fp7")
141 changes: 141 additions & 0 deletions examples/mystery_sand/shader.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@

// Write your code HERE
int mouseClicked = 0;


void main() {

uint x = gl_GlobalInvocationID.x;
uint y = gl_GlobalInvocationID.y;
uint p = x + y * WSX;

//initialisation
if(step == 0){
if(x>50 && x<70 && y>50 && y<80){
data_0[p] = 0xFF00FF00; //fluide initial
}
else if(y>120){
data_0[p] = 0xFFFFFFFF; //sol
}
else if(x>125 || x < 3){
data_0[p] = 0xFFFFFFFF;
}
else{
data_0[p] = 0x00000000; //backround
}
}
//boucle principale
else{
//mouse left
if(x == mousex && y==mousey && mouse_button == 1){
data_0[p] = 0xFFFFFFFF;
data_0[p+1] = 0xFFFFFFFF;
data_0[p-1] = 0xFFFFFFFF;
data_0[p+WSX] = 0xFFFFFFFF;
data_0[p+WSX+1] = 0xFFFFFFFF;
data_0[p+WSX-1] = 0xFFFFFFFF;
}
if(x == mousex && y==mousey && mouse_button == 0){
data_0[p] = 0xFF0000FF;
}
//mouse left
if(x == mousex && y==mousey && mouse_button == 2){
data_0[p] = 0xFF00FF00;
}
//both at the same time
if(x == mousex && y==mousey && mouse_button == 3){
data_0[p] = 0xFFFF0000;
}
//si le pixel est non vide et non sol
if(data_0[p] != 0xFFFFFFFF && data_0[p]!= 0x00000000){
//il tombe
if(data_0[p+WSX] == 0x00000000){
data_0[p+WSX] = data_0[p];
data_0[p] = 0x00000000;
}
//l'eau va sur les cotes

//vide a gauche en bas
else if(data_0[p-1+WSX] == 0x00000000){
data_0[p-1+WSX] = data_0[p];
data_0[p] = 0x00000000;
}

//vide a droite en bas
else if(data_0[p+1+WSX] == 0x00000000){
data_0[p+1+WSX] = data_0[p];
data_0[p] = 0x00000000;
}

//il y a un pixel en bas/gacuhe/droit
else{
if(y<120){

if(data_0[p]!=0xFFFFFFFF && data_0[p+WSX]!=0xFFFFFFFF && data_0[p+WSX+1]!=0xFFFFFFFF && data_0[p+WSX-1]!=0xFFFFFFFF ){

int rouge1 =(data_0[p] & 0x000000FF);
int green1 =((data_0[p] & 0x0000FF00)>>8);
int blue1 = (data_0[p] & 0x00FF0000)>>16;

int rouge2 =(data_0[p+WSX] & 0x000000FF);
int green2 =((data_0[p+WSX] & 0x0000FF00)>>8);
int blue2 = (data_0[p+WSX] & 0x00FF0000)>>16;

int rouge3 =(data_0[p+WSX-1] & 0x000000FF);
int green3 =((data_0[p+WSX-1] & 0x0000FF00)>>8);
int blue3 = (data_0[p+WSX-1] & 0x00FF0000)>>16;

int rouge4 =(data_0[p+WSX+1] & 0x000000FF);
int green4 =((data_0[p+WSX+1] & 0x0000FF00)>>8);
int blue4 = (data_0[p+WSX+1] & 0x00FF0000)>>16;

int rouge = (rouge1 + rouge2 + rouge3 + rouge4)/4;
int green = (green1 + green2 + green3 + green4)/4;
int blue = (blue1 + blue2 + blue3 + blue4)/4;


int couleur = (0xFF << 24) + (blue<<16) + (green << 8) +rouge ;

data_0[p+WSX] = couleur;
data_0[p] = couleur;

///??
//if(sin(step/30) >= 0){
data_0[p+WSX+1] = couleur;
data_0[p+WSX-1] = couleur;
//}else{
data_0[p+WSX-1] = couleur;
data_0[p+WSX+1] = couleur;
//}



}





}

}





}



}




//
//data_0[p] = 0xFFF00FFF - int(p)*(step+1);



}