namespace BP
{
	namespace Maps
	{
		class VShooter : BP::ScriptActor
		{
			kActor@ dummy;
			//------------------------------------------------------------------------------------------------------------------------
			VShooter(kActor@ actor)
			{
				super(actor);
			}
			//------------------------------------------------------------------------------------------------------------------------
			void BP_OnStart()
			{
				@dummy = BP::Spawn::Actor(kActor_EnemyDummy, kVec3(-500.78f, 955.56f, 30.0f));
				BP::Actor::AIIgnorePlayer(@dummy, true);
				dummy.EnemyAIComponent().SpawnFlags() |= EAIGF_DROPOFF;
				dummy.WorldComponent().Flags() &= ~WCF_NONSOLID;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void Serialize(kDict dict, kStr& in key)
			{
			}
			//------------------------------------------------------------------------------------------------------------------------
			void Deserialize(kDict& in dict, kStr& in key)
			{
			}
			//------------------------------------------------------------------------------------------------------------------------
			void BP_OnDeserializeStart()
			{
			}
			//------------------------------------------------------------------------------------------------------------------------
			void BP_OnTick()
			{
				if (CinemaPlayer.Playing())
				{
					BP::LocalPlayer::Actor.Origin() = BP::Actor::CenterOrigin(@dummy);
					BP::LocalPlayer::Actor.WorldComponent().SetRegion(dummy.WorldComponent().RegionIndex());
					// BP::LocalPlayer::Actor.WorldComponent().Flags() |= WCF_NONSOLID;
					// dummy.WorldComponent().Flags() &= ~WCF_NONSOLID;
					// dummy.Yaw() = Math::Deg2Rad(90.0f);
					BP::LocalPlayer::Actor.Yaw() = Math::Deg2Rad(90.0f);
					float aimPitch = Math::Deg2Rad(0.0f);
					
					float mouseXRatio = (float(Sys.Mouse_X()) / Sys.VideoWidth()) - 0.5f;
					float mouseYRatio = 1.0f - (float(Sys.Mouse_Y()) / Sys.VideoHeight());
					
					BP::LocalPlayer::Actor.Yaw() += Math::Deg2Rad(mouseXRatio * 100.0f);
					aimPitch -= Math::Deg2Rad(mouseYRatio * 15.0f);
					
					dummy.Yaw() = BP::LocalPlayer::Actor.Yaw();
					
					if (!dummy.AnimTrackComponent().IsPlaying(ANIM_GROUND_MOVE2))
					{
						int aFlags = ANF_LOOP;
						aFlags &= ~ANF_ROOTMOTION;
						dummy.AnimTrackComponent().Set(ANIM_GROUND_MOVE2, 4.0f, aFlags);
					}
					
					if (BP::Input::Forward())
					{
						// dummy.Origin().x += 5.0f;
						//dummy.MovementComponent().Velocity().x += 5.0f;
						kVec3 movement = BP::Actor::Forward(@BP::LocalPlayer::Actor) * 1.0f;
						movement.z = 0.0f;
						dummy.MovementComponent().Velocity() += movement;
					}
					else if (BP::Input::Backward())
					{
						// dummy.Origin().x -= 5.0f;
						// dummy.MovementComponent().Velocity().x -= 12.0f;
						kVec3 movement = BP::Actor::Forward(@BP::LocalPlayer::Actor) * 12.0f;
						movement.z = 0.0f;
						dummy.MovementComponent().Velocity() -= movement;
					}
					if (BP::Input::StrafeLeft())
					{
						// dummy.Origin().y += 5.0f;
						kVec3 movement = BP::Actor::Right(@BP::LocalPlayer::Actor) * 7.0f;
						movement.z = 0.0f;
						dummy.MovementComponent().Velocity() -= movement;
					}
					else if (BP::Input::StrafeRight())
					{
						kVec3 movement = BP::Actor::Right(@BP::LocalPlayer::Actor) * 7.0f;
						movement.z = 0.0f;
						dummy.MovementComponent().Velocity() += movement;
						// dummy.Origin().y -= 5.0f;
					}
					if (BP::Input::JumpDown())
					{
						//dummy.Origin().z += 5.0f;
						dummy.MovementComponent().Velocity().z += 15.0f;
					}
					if (BP::Input::CrouchDown())
					{
						Game.PlayMusic(0);
						CinemaPlayer.StopCinema();
						return;
					}
					if (BP::Input::AttackDown())
					{
						kVec3 pPos = dummy.Origin();
						pPos.y += dummy.MovementComponent().Velocity().y + dummy.WorldComponent().Radius();
						BP::Spawn::Particle("particles/Plasma.particle", @dummy, pPos, kQuat(aimPitch, 0.0f, BP::LocalPlayer::Actor.Yaw()));
					}
				}
				if (BP::Input::CrouchDown())
				{
					if (!CinemaPlayer.Playing())
					{
						// Game.PlayMusic(23);
						dummy.Origin() = BP::LocalPlayer::Actor.Origin();
						dummy.WorldComponent().SetRegion(BP::LocalPlayer::Actor.WorldComponent().RegionIndex());
						BP::LocalPlayer::Actor.WorldComponent().Flags() |= WCF_NONSOLID;
						dummy.WorldComponent().Flags() &= ~WCF_NONSOLID;
						CinemaPlayer.StartCinema("cinemas/bp/sidescroll.txt");
					}
				}
			}
			//------------------------------------------------------------------------------------------------------------------------
		};
	}
}
