#include "scripts/bp_common.txt"

class BeamTrapHorzY : ScriptObject
{
    kActor @self;
	bool isMovingToPoint2;
	float lerpTime;
	kVec3 startPos;
	kVec3 size;
	float hitTime;
	//------------------------------------------------------------------------------------------------------------------------
    BeamTrapHorzY(kActor @actor) {
        @self = actor;
		isMovingToPoint2 = true;
		lerpTime = 0.0f;
		startPos = self.Origin();
		size = kVec3(25.0f, 305.0f, 25.0f);
		hitTime = 0.0f;
		self.Scale() = kVec3(0.025f, 0.025f, 0.35f);
		self.Pitch() = Math::Deg2Rad(90.0f);
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnTick(void) {
		if ((self.Flags() & AF_NODRAW) != 0) {
			return;
		}

		float maxTime = float(self.Health()) / 100.0f;
		if (isMovingToPoint2) {
			lerpTime += GAME_DELTA_TIME;
			if (lerpTime > maxTime) {
				lerpTime = maxTime;
				isMovingToPoint2 = false;
			}
		} else {
			lerpTime -= GAME_DELTA_TIME;
			if (lerpTime < 0.0f) {
				lerpTime = 0.0f;
				isMovingToPoint2 = true;
			}
		}
		kVec3 pos = startPos;
		// kVec3 dest = self.Velocity();
		// dest.z = pos.z;
		pos.Lerp(self.Velocity(), lerpTime / maxTime);
		self.Origin() = pos;
		
		DamageUpdate();
    }
	//------------------------------------------------------------------------------------------------------------------------
	void DamageUpdate() {
		if (hitTime <= 0.0f) {
			kVec3 p = self.Origin();
			kVec3 min = kVec3(p.x - size.x, p.y, p.z - size.z);
			kVec3 max = kVec3(p.x + size.x, p.y + size.y, p.z + size.z);
			if (InAreaMinMax(min, max)) {
				Player.Actor().InflictGenericDamage(Player.Actor().CastToActor(), 5);
				hitTime = 0.1f;
			}
		} else {
			hitTime -= GAME_DELTA_TIME;
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnSpawn(void) {
    }
	//------------------------------------------------------------------------------------------------------------------------
};
