public override void Update() { PointF diraction = new PointF(target.WorldPosition.X - WorldPosition.X, target.WorldPosition.Y - WorldPosition.Y); float length = diraction.GetLength(); if (Math.Abs(length) < 0.01) { this.Alive = false; } diraction = PointExtensions.Scale(diraction, 1 / length); WorldPosition = PointExtensions.Sum(WorldPosition, PointExtensions.Scale(diraction, speed)); if (float.IsNaN(WorldPosition.X) || float.IsNaN(WorldPosition.Y)) { WorldPosition = target.WorldPosition; this.Alive = false; return; } if (PointExtensions.Sub(WorldPosition, target.WorldPosition).GetLength() < speed) { target.CurrentHealth -= damage; if (target.CurrentHealth < 0 && target.Alive) { target.Alive = false; parent.Target = null; GameController.Controller.CurrentPlayer.money += target.Reward; GameController.Controller.CurrentPlayer.score += target.Reward; } this.Alive = false; } SetLookTo(target.WorldPosition); }
public override void Update() { if (WorldPosition.Equals(GameField.MyGameField.Finish)) { GameController.Controller.CurrentPlayer.Lives -= this.Punishment; this.Alive = false; } if (path.Count == 0) { WannaMove(GameField.MyGameField); return; } if (Equals(PointExtensions.Sub(WorldPosition, path[0]).GetLength(), speed) || PointExtensions.Sub(WorldPosition, path[0]).GetLength() < speed) { WorldPosition = path[0]; path.RemoveAt(0); return; } PointF target = path[0]; PointF diraction = new PointF(target.X - WorldPosition.X, target.Y - WorldPosition.Y); float length = diraction.GetLength(); diraction = PointExtensions.Scale(diraction, 1 / length); WorldPosition = PointExtensions.Sum(WorldPosition, PointExtensions.Scale(diraction, speed)); Angle = PointExtensions.GetAngle(new PointF(1, 0), diraction); }
public override void Shoot() { if (!GameController.Controller.UnPaused) { return; } if (Target == null || !Target.Alive) { Target = FindTarget(); return; } double distance = PointExtensions.Sub(WorldPosition, Target.WorldPosition).GetLength(); if (distance > range) { Target = FindTarget(); return; } Form1.gameObjects.Add(new Bullet(Target, damage, "bitBullet.png", WorldPosition, this, 0.3f)); }
public override void Update() { if (WorldPosition.Equals(GameField.MyGameField.Finish)) { GameController.Controller.CurrentPlayer.Lives -= this.Punishment; this.Alive = false; } PointF target = GameField.MyGameField.Finish; PointF diraction = new PointF(target.X - WorldPosition.X, target.Y - WorldPosition.Y); float length = diraction.GetLength(); diraction = PointExtensions.Scale(diraction, 1 / length); WorldPosition = PointExtensions.Sum(WorldPosition, PointExtensions.Scale(diraction, speed)); Angle = PointExtensions.GetAngle(new PointF(1, 0), diraction); if (PointExtensions.Sub(WorldPosition, target).GetLength() < speed) { WorldPosition = target; return; } }
public void SetLookTo(PointF target) { PointF diraction = PointExtensions.Sub(WorldPosition, target); Angle = PointExtensions.GetAngle(new PointF(-1, 0), diraction); }