text: #pragma once
  
  namespace Cherries {
  
  	struct Vector3;
  
  	struct Vector4
  	{
  	public:
  		Vector4()
  			: X(0.0f), Y(0.0f), Z(0.0f), W(0.0f) {}
  		
  		Vector4(float x, float y, float z, float w)
  			: X(x), Y(y), Z(z), W(w) {}
  
  		Vector4(const Vector4& other)
  			: X(other.X), Y(other.Y), Z(other.Z), W(other.W) {}
  
  	public:
  		Vector4& operator=(const Vector4& other)
  		{
  			X = other.X;
  			Y = other.Y;
  			Z = other.Z;
  			W = other.W;
  			return *this;
  		}
  
  	public:
  		Vector3 XYZ() const;
  
  	public:
  		float X, Y, Z, W;
  	};
  
  }
  
  #ifdef CHERRY_MATH_IMPLEMENTATION
  
  namespace Cherries {
  
  	Vector3 Vector4::XYZ() const
  	{
  		return Vector3(X, Y, Z);
  	}
  
  }
  
  #endif