mine2d/Mine2d/game/backend/interactor/ItemPhysics.cs

35 lines
1.0 KiB
C#

using Mine2d.engine.system.annotations;
using Mine2d.game.core.data.entities;
namespace Mine2d.game.backend.interactor;
[Interactor]
public class ItemPhysics
{
[Interaction(InteractorKind.Hybrid, "tick")]
public static void TickHybrid()
{
var gameState = Context.Get().GameState;
var world = gameState.World;
foreach (var chunk in world.Chunks)
{
var entities = chunk.Value.Entities;
foreach (var entity in entities)
{
if (entity is ItemEntity itemEntity)
{
itemEntity.Velocity += new Vector2(0, 0.1f);
var nextPos = itemEntity.Position + itemEntity.Velocity;
if (world.HasChunkAt(nextPos) && world.GetChunkAt(nextPos).HasTileAt(nextPos))
{
itemEntity.Velocity = new Vector2(0, 0);
continue;
}
itemEntity.Position = nextPos;
}
}
}
}
}