Compare commits
1 Commits
master
...
9a36418d23
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a36418d23 |
@@ -13,7 +13,6 @@ 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;
|
||||||
@@ -33,9 +32,6 @@ 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() {
|
||||||
@@ -90,10 +86,6 @@ 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;
|
||||||
|
|
||||||
@@ -129,6 +121,10 @@ 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");
|
||||||
@@ -155,8 +151,16 @@ 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() {
|
||||||
|
|||||||
@@ -131,4 +131,23 @@ 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,11 +24,30 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
else if (Chunk.IsEmpty(Position + randomDirection))
|
public override void ActivateNeighbors() {
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user