public override Direction CalculateMoveDirection() { if (_ChangeDirectionTime < 0 || !AllowedDirections.Contains(_MoveDirection)) { if (AllowedDirections.Count > 0) { do { _MoveDirection = RandomUtils.GetRandomDirection(); } while (!AllowedDirections.Contains(_MoveDirection)); } else { _MoveDirection = Direction.None; } SetChangeDirectionTime(); } return(_MoveDirection); }
public override Direction CalculateMoveDirection() { if (Keyboard.GetState().IsKeyDown(Keys.A)) { DrawDirection = Direction.Left; if (AllowedDirections.Contains(Direction.Left)) { return(Direction.Left); } } if (Keyboard.GetState().IsKeyDown(Keys.S)) { DrawDirection = Direction.Down; if (AllowedDirections.Contains(Direction.Down)) { return(Direction.Down); } } if (Keyboard.GetState().IsKeyDown(Keys.W)) { DrawDirection = Direction.Up; if (AllowedDirections.Contains(Direction.Up)) { return(Direction.Up); } } if (Keyboard.GetState().IsKeyDown(Keys.D)) { DrawDirection = Direction.Right; if (AllowedDirections.Contains(Direction.Right)) { return(Direction.Right); } } return(Direction.None); }
public override void Update(Microsoft.Xna.Framework.GameTime gameTime) { // Increment to next frame base.Update(gameTime); if (UserVisibleDirection == DrawDirection || MoveDirection == Direction.None || !AllowedDirections.Contains(MoveDirection)) { Fire(); } }
public override Direction CalculateMoveDirection() { //Set current cell Visit MapInfo.SetVisitTime(position); //Check visible user. If can see user "inform" all other tanks Vector2 userPos = MapInfo.GetUserVisiblePosition(position); if (userPos != Vector2.Zero) { MapInfo.SetUserPosition(userPos); UserVisibleDirection = AIUtils.GetMaxDirection(GetPosition - userPos); } else { UserVisibleDirection = Direction.None; } //Get User position. if == current lost user Vector2 userTankPosition = MapInfo.GetUserPosition(); if (userTankPosition == position) { LostUserPosition(); } if (MapInfo.UserDetected) { Vector2 difference = this.GetPosition - userTankPosition; if (SpriteUtils.IsYAxisFromDirection(_MoveDirection) && SpriteUtils.CoordinateEqualToZero((int)difference.Y) || !SpriteUtils.IsYAxisFromDirection(_MoveDirection) && SpriteUtils.CoordinateEqualToZero((int)difference.X)) { _MoveDirection = Direction.None; } if (!AllowedDirections.Contains(_MoveDirection)) { //Smart Algo Start Direction maxD = AIUtils.GetMaxDirection(this.GetPosition - userTankPosition); if (AllowedDirections.Contains(maxD)) { _MoveDirection = maxD; } else { Direction minD = AIUtils.GetMinDirection(this.GetPosition - userTankPosition); if (AllowedDirections.Contains(minD)) { _MoveDirection = minD; } else { if (CurrentMissle == null || CurrentMissle.State == SpriteState.Destroyed) { _MoveDirection = maxD; } else { if (AllowedDirections.Count > 0) { do { _MoveDirection = RandomUtils.GetRandomDirection(); } while (!AllowedDirections.Contains(_MoveDirection)); } else { _MoveDirection = Direction.None; } } } } } //Smart Algo End } else { if (!AllowedDirections.Contains(_MoveDirection) || movedDistance > Default.CellSetting.CellSize.X) { movedDistance = 0; _MoveDirection = MapInfo.GetOldestDirection(position, AllowedDirections); } movedDistance += speedValue; } return(_MoveDirection); }
public override void Update(Microsoft.Xna.Framework.GameTime gameTime, Microsoft.Xna.Framework.Rectangle clientBounds) { base.Update(gameTime, clientBounds); if (UserVisibleDirection == DrawDirection || MoveDirection != Direction.None && !AllowedDirections.Contains(MoveDirection)) { Fire(); } }