/// <summary> /// Constructor for missile /// </summary> /// <param name="spawnPos">Start position</param> /// <param name="initialAim">Position missile is initally aimed at</param> /// <param name="ownerSprite">Sprite that fired this missile</param> /// <param name="targetSprite">Target for missile</param> /// <param name="missileSpeed">Velocity of missile</param> /// <param name="maxTurn">Maximum turning angle for missile</param> /// <param name="lifetime">How many seconds this missile lives for</param> /// <param name="missileDamage">Damage on impact</param> public Missile(Vector2 spawnPos, Vector2 initialAim, Sprite ownerSprite, Sprite targetSprite, float missileSpeed, float maxTurn, float lifetime, int missileDamage) { //Assigning variables owner = ownerSprite; target = targetSprite; damage = missileDamage; turnAmount = maxTurn; speed = missileSpeed; //Events GM.eventM.AddTimer(tiLifetimeCounter = new Event(lifetime, "Lifetime Counter")); GM.eventM.AddTimer(tiSmokeCounter = new Event(0.5f, "Smoke Counter")); //Graphics GM.engineM.AddSprite(this); Frame.Define(Tex.SingleWhitePixel); Wash = Color.OrangeRed; SX = 8; SY = 32; //Sound effect Moving = true; CollisionActive = true; CollisionPrimary = true; UpdateCallBack += Move; PrologueCallBack += Hit; RotationHelper.FacePosition(this, new Vector3(initialAim, 0), DirectionAccuracy.free, 0, false); Position2D = spawnPos; }
private void Move() { //For gunSprite Vector2 playerPos = GameSetup.PlayerChar.Position2D; Vector2 direction = playerPos - Position2D; direction = Vector2.Normalize(direction); RotationHelper.FaceDirection(gunSprite, direction, DirectionAccuracy.free, 0); gunSprite.Position2D = Position2D + (direction * 15); Vector2 currentPosition = Position2D; //For movement: float distanceFromPlayer = Vector2.Distance(Position2D, playerPos); if (distanceFromPlayer > 200) { //Move towards player RotationHelper.FacePosition(this, GameSetup.PlayerChar.Position, DirectionAccuracy.free, 0, false); RotationHelper.VelocityInCurrentDirection(this, 500, 0); } if (distanceFromPlayer < 400) { //Switch strafe direction after 2 seconds int dirMultiplier = 1; if (tiSwitchDirection.ElapsedSoFar > 2) { dirMultiplier = -1; } RotationHelper.VelocityInThisDirection(this, RotationHelper.MyDirection(this, dirMultiplier * 60), 250); //For firing if (GM.eventM.Elapsed(tiShootCooldown)) { //create bullet and pass reference to player and angle new Bullet(this, playerPos, 1000f, 10); } } }
private void Move() { //Move towards player RotationHelper.FacePosition(this, GameSetup.PlayerChar.Position, DirectionAccuracy.free, 0, false); RotationHelper.VelocityInCurrentDirection(this, 400, 0); }