#include "scripts/common.txt"

const float ROLLING_ROCK_HIT_TIME = 1.0f;

class BP_RollingRock : ScriptObject
{
    kActor@ self;
	float yawPos;
	float centerDist;
	float hitTime;
	bool dir;
	//------------------------------------------------------------------------------------------------------------------------
    BP_RollingRock(kActor @actor)
    {
        @self = actor;
		
		self.Flags() |= AF_ALWAYSACTIVE;
		self.Scale().Set(3.0f, 3.0f, 3.0f);
		self.RunFxEvent("FireRock");
		hitTime = 0.0f;
		yawPos = 0.0f;
		dir = true;
		centerDist = 2000.0f;
    }
	//------------------------------------------------------------------------------------------------------------------------
    void OnSpawn()
	{
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnTick(void)
    {
		if ((self.Flags() & AF_NODRAW) != 0)
		{
			return;
		}
		
		float x = Math::Sin(yawPos);
		float y = Math::Cos(yawPos);
		self.Origin().x = x * centerDist;
		self.Origin().y = y * centerDist;
		
		float yawSpeed = Math::RandRange(0.75f, 1.0f);
		if (dir)
		{
			yawPos += Math::Deg2Rad(yawSpeed);
		}
		else
		{
			yawPos -= Math::Deg2Rad(yawSpeed);
		}

		self.Yaw() += Math::Deg2Rad(x * 5.0f);
		self.Pitch() += Math::Deg2Rad(y * 5.0f);
		
		hitTime += GAME_DELTA_TIME;
		if (hitTime >= ROLLING_ROCK_HIT_TIME && IsPlayerInRadius(self.Origin(), 375.0f * 375.0f))
		{
			hitTime = 0.0f;
			kActor@ pActor = Player.Actor().CastToActor();
			pActor.InflictGenericDamage(self, 10);
			Player.Actor().PlayerFlags() |= PF_NOAIRFRICTION;
			kVec3 v = (pActor.Origin() - self.Origin()).Normalize() * 15.0f;
			v.z = 5.0f;
			pActor.Velocity() = v;
		}
    }
	//------------------------------------------------------------------------------------------------------------------------
    void OnBeginLevel()
    {
		if (self.SpawnParams(7) == 0)
		{
			yawPos = Math::pi;
			dir = false;
			centerDist = 3000.0f;
		}
		else
		{
			yawPos = 0.0f;
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
};
