imperfect-space/scripts/GameObject.cs

71 lines
1.5 KiB
C#

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();
}
}
}