1 Commits

Author SHA1 Message Date
f324122874 updated to godot 4.5 2025-10-26 18:30:27 +01:00
7 changed files with 32 additions and 55 deletions

View File

@@ -1,4 +1,4 @@
<Project Sdk="Godot.NET.Sdk/4.4.1"> <Project Sdk="Godot.NET.Sdk/4.5.1">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading> <EnableDynamicLoading>true</EnableDynamicLoading>

12
FOU.csproj.old.1 Normal file
View File

@@ -0,0 +1,12 @@
<Project Sdk="Godot.NET.Sdk/4.4.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<ItemGroup>
<Content Include="benchmark.txt" />
</ItemGroup>
<ItemGroup>
<Folder Include="UI\" />
</ItemGroup>
</Project>

View File

@@ -87,3 +87,10 @@ size_flags_vertical = 1
max_value = 10.0 max_value = 10.0
step = 0.01 step = 0.01
value = 1.0 value = 1.0
[node name="ToolbarMarginContainer2" parent="CanvasLayer/TopUI" instance=ExtResource("5_kry3j")]
layout_mode = 0
offset_left = 860.0
offset_top = 5.0
offset_right = 1060.0
offset_bottom = 69.0

View File

@@ -13,6 +13,7 @@ public class Chunk {
public Chunk NeighborS = null; public Chunk NeighborS = null;
public Chunk NeighborW = null; public Chunk NeighborW = null;
private readonly Image image;
private readonly int sizeX; private readonly int sizeX;
private readonly int sizeY; private readonly int sizeY;
private readonly HashSet<Element> activeElements; private readonly HashSet<Element> activeElements;
@@ -32,6 +33,9 @@ public class Chunk {
} }
activeElements = new HashSet<Element>(sizeX * sizeY); activeElements = new HashSet<Element>(sizeX * sizeY);
image = Image.CreateEmpty(sizeX, sizeY, false, Image.Format.Rgb8);
image.Fill(Colors.Black);
} }
public void Update() { public void Update() {
@@ -86,6 +90,10 @@ public class Chunk {
return activeElements.Count; return activeElements.Count;
} }
public void Swap(Element what, Vector2I pos) {
Swap(what, Get(pos));
}
public Element Get(Vector2I pos) { public Element Get(Vector2I pos) {
Element e = null; Element e = null;
@@ -121,10 +129,6 @@ public class Chunk {
return Get(pos)?.GetType() == typeof(Element); return Get(pos)?.GetType() == typeof(Element);
} }
public void Swap(Element what, Vector2I pos) {
Swap(what, Get(pos));
}
private void Swap(Element what, Element swapTo) { private void Swap(Element what, Element swapTo) {
if (what == null || swapTo == null) { if (what == null || swapTo == null) {
GD.PrintErr("Trying to swap null"); GD.PrintErr("Trying to swap null");
@@ -151,16 +155,8 @@ public class Chunk {
what.Active = true; what.Active = true;
what.Moved(); what.Moved();
if (what.IsEmpty())
what.ActivateNeighbors();
swapTo.Active = true; swapTo.Active = true;
swapTo.Moved(); swapTo.Moved();
if (swapTo.IsEmpty())
swapTo.ActivateNeighbors();
// TODO:
// if either "what" or "swapTo" is empty, re-activate all neighbors of the now empty ones
} }
public override string ToString() { public override string ToString() {

View File

@@ -131,23 +131,4 @@ public class Element{
public bool IsEmpty() { public bool IsEmpty() {
return GetType() == typeof(Element); return GetType() == typeof(Element);
} }
public virtual void ActivateNeighbors() {
Element n = Chunk.Get(Position + Vector2I.Up);
if (n != null && !n.IsEmpty())
n.Active = true;
//
// Element e = Chunk.Get(Position + Vector2I.Right);
// if (e != null && !e.IsEmpty())
// e.Active = true;
//
// Element s = Chunk.Get(Position + Vector2I.Down);
// if (null != s && !s.IsEmpty())
// s.Active = true;
//
// Element w = Chunk.Get(Position + Vector2I.Left);
// if (null != w && !w.IsEmpty())
// w.Active = true;
}
} }

View File

@@ -24,30 +24,11 @@ public abstract class Liquid : Element {
if (Chunk.IsEmpty(Position + Vector2I.Down)) if (Chunk.IsEmpty(Position + Vector2I.Down))
Chunk.Swap(this, Position + Vector2I.Down); Chunk.Swap(this, Position + Vector2I.Down);
else if (Chunk.IsEmpty(Position + randomDirection))
Chunk.Swap(this, Position + randomDirection);
else if (Chunk.IsEmpty(Position + randomDirection * VERTICAL_OPPOSITE))
Chunk.Swap(this, Position + randomDirection * VERTICAL_OPPOSITE);
else if (Chunk.IsEmpty(Position + randomDirection)) else if (Chunk.IsEmpty(Position + randomDirection))
Chunk.Swap(this, Position + Vector2I.Right + randomDirection); Chunk.Swap(this, Position + Vector2I.Right * randomDirection);
else if (Chunk.IsEmpty(Position - randomDirection))
Chunk.Swap(this, Position + Vector2I.Right + randomDirection * VERTICAL_OPPOSITE);
}
public override void ActivateNeighbors() { else if (Chunk.IsEmpty(Position + randomDirection))
Chunk.Swap(this, Position + Vector2I.Right * randomDirection * VERTICAL_OPPOSITE);
Element n = Chunk.Get(Position + Vector2I.Up);
if (n != null && !n.IsEmpty())
n.Active = true;
// only activate liquids left or right
Element e = Chunk.Get(Position + Vector2I.Right);
if (e != null && e.GetType() == typeof(Liquid))
e.Active = true;
Element s = Chunk.Get(Position + Vector2I.Down);
if (null != s && s.GetType() == typeof(Liquid))
s.Active = true;
} }
} }

View File

@@ -12,7 +12,7 @@ config_version=5
config/name="FOU" config/name="FOU"
run/main_scene="res://Scenes/main.tscn" run/main_scene="res://Scenes/main.tscn"
config/features=PackedStringArray("4.4", "C#", "Forward Plus") config/features=PackedStringArray("4.5", "C#", "Forward Plus")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[dotnet] [dotnet]