using Godot; public abstract class GameObject { public Sector CurrentSector { get; private set; } public Vector3 LocalCoordinates; public Vector3Dec GlobalCoordinates; public GameObject(Sector sector, Vector3 localCoordinates) { CurrentSector = sector; LocalCoordinates = localCoordinates; GlobalCoordinates = new ( sector.GlobalStartCoordinates.X + (decimal)localCoordinates.X, sector.GlobalStartCoordinates.Y + (decimal)localCoordinates.Y, sector.GlobalStartCoordinates.Z + (decimal)localCoordinates.Z ); } public GameObject(Sector sector, double localX, double localY, double localZ) { CurrentSector = sector; LocalCoordinates = new(localX, localY, localZ); GlobalCoordinates = new ( sector.GlobalStartCoordinates.X + (decimal)localX, sector.GlobalStartCoordinates.Y + (decimal)localY, sector.GlobalStartCoordinates.Z + (decimal)localZ ); } public GameObject(Vector3Dec coordinates) { GlobalCoordinates = coordinates; UpdateSector(); } public GameObject(decimal x, decimal y, decimal z) { GlobalCoordinates = new(x, y, z); UpdateSector(); } public Vector3 GetSectorCoordinates() { Vector3Dec relativeSectorCoordinates = GlobalCoordinates - CurrentSector.GlobalStartCoordinates; return relativeSectorCoordinates.ToVector3(); } public bool IsInSector() { return Helpers.IsInsideArea(CurrentSector.Size, GetSectorCoordinates()); } public void UpdateSector() { } public virtual void Simulate(double delta) { if (!IsInSector()) { UpdateSector(); } } }