#pragma once class Vec3 { public: Vec3() : x(0.0f), y(0.0f), z(0.0f) {} Vec3(float x, float y, float z) : x(x), y(y), z(z) {} Vec3 operator+(Vec3 const& rhs) const { return Vec3( x + rhs.x, y + rhs.y, z + rhs.z); } Vec3 operator+=(Vec3 const& rhs) { x += rhs.x; y += rhs.y; z += rhs.z; return *this; } Vec3 operator-(Vec3 const& rhs) const { return Vec3( x - rhs.x, y - rhs.y, z - rhs.z); } Vec3 operator-=(Vec3 const& rhs) { x -= rhs.x; y -= rhs.y; z -= rhs.z; return *this; } Vec3 operator*(Vec3 const& rhs) const { return Vec3( x * rhs.x, y * rhs.y, z * rhs.z); } Vec3 operator*=(Vec3 const& rhs) { x *= rhs.x; y *= rhs.y; z *= rhs.z; return *this; } Vec3 operator*(float rhs) const { return Vec3( x * rhs, y * rhs, z * rhs); } Vec3 operator*=(float rhs) { x *= rhs; y *= rhs; z *= rhs; return *this; } float x, y, z; };