fixed drawpixel optimization

minor class refactoring
This commit is contained in:
2025-04-27 14:50:23 +02:00
parent abf948a310
commit da3afd22fc
5 changed files with 33 additions and 18 deletions

View File

@@ -2,7 +2,7 @@
namespace FOU.Scripts.Elements;
public class Element {
public class Element{
public Chunk Chunk;
public Vector2I Position;
@@ -15,12 +15,12 @@ public class Element {
protected const float MAX_COLOR_VARIANCE = 0.1f;
protected static readonly Vector2I VERTICAL_OPPOSITE = new Vector2I(-1, 1);
protected int lastMove = 0;
private bool active = false;
private bool wasMovedThisTick = false;
private int lastUpdate = -1;
private int lastMove = 0;
private Color originalColor;
private bool markedForUpdate = false;
public Element(Element e) {
Position = e.Position;
@@ -34,7 +34,6 @@ public class Element {
Chunk = chunk;
lastMove = Engine.GetFramesDrawn();
Active = false;
wasMovedThisTick = true;
}
public bool Active {
@@ -44,7 +43,10 @@ public class Element {
active = value;
Chunk.SetElementActive(this, value);
Moved();
if (!active)
ResetColor();
else
Moved();
}
}
@@ -58,8 +60,13 @@ public class Element {
public virtual bool Update() {
if (!Active) return false;
if (lastUpdate == Engine.GetFramesDrawn()) return false; // already updated this frame
lastUpdate = Engine.GetFramesDrawn();
int frame = Engine.GetFramesDrawn();
if (lastMove + STEPS_UNTIL_INACTIVE < frame)
Active = false;
if (lastUpdate == frame)
return false; // already updated this frame
lastUpdate = frame;
return true;
}
@@ -70,7 +77,6 @@ public class Element {
protected virtual void Tick() {
Vector2I randomDirection = RandomDirectionDown();
wasMovedThisTick = false;
if (Chunk.IsEmpty(Position + Vector2I.Down))
Chunk.Swap(this, Position + Vector2I.Down);
@@ -106,21 +112,25 @@ public class Element {
public void ResetColor() {
color = originalColor;
MarkForUpdate();
}
public void SetDebugColor(Color color) {
if (!Main.Instance.DebugMode) return;
this.color = color;
wasMovedThisTick = true;
}
public void Moved() {
lastMove = Engine.GetFramesDrawn();
wasMovedThisTick = true;
MarkForUpdate();
}
public bool WasMoved() {
return wasMovedThisTick;
public bool MarkedForUpdate() {
return markedForUpdate;
}
public void MarkForUpdate(bool mark = true) {
markedForUpdate = true;
}
}