Add attribute system with core stats and gameplay components

This commit is contained in:
2025-10-13 12:10:45 +02:00
commit ce3596efaa
55 changed files with 1161 additions and 0 deletions

79
GameCore/Math/Vector3.cs Normal file
View File

@@ -0,0 +1,79 @@
namespace GameCore.Math;
/// <summary>
/// A simple, engine-agnostic 3D vector struct.
/// We use our own to avoid dependencies on Godot or Unity's vector types
/// within the GameCore library, ensuring it remains portable.
/// </summary>
public struct Vector3
{
public float X;
public float Y;
public float Z;
public static readonly Vector3 Zero = new(0, 0, 0);
public Vector3(float x, float y, float z)
{
X = x;
Y = y;
Z = z;
}
public static Vector3 operator +(Vector3 a, Vector3 b)
{
return new Vector3(a.X + b.X, a.Y + b.Y, a.Z + b.Z);
}
public static Vector3 operator -(Vector3 a, Vector3 b)
{
return new Vector3(a.X - b.X, a.Y - b.Y, a.Z - b.Z);
}
public static Vector3 operator *(Vector3 a, float d)
{
return new Vector3(a.X * d, a.Y * d, a.Z * d);
}
public override string ToString()
{
return $"({X}, {Y}, {Z})";
}
public override bool Equals(object obj)
{
if (obj is not Vector3 other)
return false;
return X == other.X && Y == other.Y && Z == other.Z;
}
public override int GetHashCode()
{
return HashCode.Combine(X, Y, Z);
}
public static bool operator ==(Vector3 a, Vector3 b)
{
return a.Equals(b);
}
public static bool operator !=(Vector3 a, Vector3 b)
{
return !a.Equals(b);
}
public float Length()
{
return (float)System.Math.Sqrt(X * X + Y * Y + Z * Z);
}
public Vector3 Normalize()
{
var length = Length();
if (length == 0)
return Zero;
return new Vector3(X / length, Y / length, Z / length);
}
}