public bool FindPath(Hockeyist self, Point to, Point lookAt) { if (lookAt == null) { return(StopOn(new AHock(self), to)); } var okDist = HoRadius * 1.5; var minTime = Inf; var selTurn = 0.0; var selSpUp = 0.0; for (var dir = -1; dir <= 1; dir += 2) { var hock = new AHock(self); for (var ticksDirect = 0; ticksDirect < 100; ticksDirect++) { var curTime = ticksDirect; var ho = hock.Clone(); while (Math.Abs(ho.GetAngleTo(lookAt)) > Deg(8)) { ho.Move(0, TurnNorm(ho.GetAngleTo(lookAt), ho.AAgility)); curTime++; } if (curTime < minTime && ho.GetDistanceTo(to) < okDist) { minTime = curTime; if (ticksDirect == 0) { selSpUp = 0.0; selTurn = TurnNorm(ho.GetAngleTo(lookAt), hock.AAgility); } else if (dir > 0) { selTurn = self.GetAngleTo(to.X, to.Y); selSpUp = GetSpeedTo(selTurn); } else { selTurn = RevAngle(self.GetAngleTo(to.X, to.Y)); selSpUp = -GetSpeedTo(selTurn); } } if (dir > 0) { GetTicksToUpN(hock, to, 0, 1); } else { GetTicksToDownN(hock, to, 0, 1); } } } move.SpeedUp = selSpUp; move.Turn = selTurn; return(minTime != Inf); }
public void Move(Hockeyist self, World world, Game game, Move move) { if (self.State == HockeyistState.Swinging) { move.Action = ActionType.Strike; return; } Init(self, world, game, move); if (PuckUnderOurControl) { if (ThisHasPuck) { if (InStrikeZone()) { if (Hypot(self.SpeedX, self.SpeedY) > 0.069) { move.SpeedUp = -1; } if (Math.Abs(TurnToNetFarCorner(self, move)) < STRIKE_ANGLE) { move.Action = ActionType.Swing; } } else { GoToNearestStrikeZone(); } } else { var nearestOpponent = GetNearestOpponent(); if (nearestOpponent != null) { if (self.GetDistanceTo(nearestOpponent) > game.StickLength) { move.SpeedUp = 1.0D; } else if (Math.Abs(self.GetAngleTo(nearestOpponent)) < 0.5D * game.StickSector) { move.Action = ActionType.Strike; } move.Turn = self.GetAngleTo(nearestOpponent); } } } else { move.SpeedUp = 1.0D; move.Turn = self.GetAngleTo(world.Puck); move.Action = ActionType.TakePuck; } }
void DoMove(Hockeyist self, Point to, int direction) { if (direction > 0) { move.Turn = self.GetAngleTo(to.X, to.Y); move.SpeedUp = GetSpeedTo(move.Turn); } else { move.Turn = RevAngle(self.GetAngleTo(to.X, to.Y)); move.SpeedUp = -GetSpeedTo(move.Turn); } }
public void Move(Hockeyist self, World world, Game game, Move move) { if (self.State == HockeyistState.Swinging) { move.Action = ActionType.Strike; return; } if (world.Puck.OwnerPlayerId == self.PlayerId) { if (world.Puck.OwnerHockeyistId == self.Id) { Player opponentPlayer = world.GetOpponentPlayer(); double netX = 0.5D * (opponentPlayer.NetBack + opponentPlayer.NetFront); double netY = 0.5D * (opponentPlayer.NetBottom + opponentPlayer.NetTop); netY += (self.Y < netY ? 0.5D : -0.5D) * game.GoalNetHeight; double angleToNet = self.GetAngleTo(netX, netY); move.Turn = angleToNet; if (Math.Abs(angleToNet) < STRIKE_ANGLE) { move.Action = ActionType.Swing; } } else { Hockeyist nearestOpponent = getNearestOpponent(self.X, self.Y, world); if (nearestOpponent != null) { if (self.GetDistanceTo(nearestOpponent) > game.StickLength) { move.SpeedUp = 1.0D; } else if (Math.Abs(self.GetAngleTo(nearestOpponent)) < 0.5D * game.StickSector) { move.Action = ActionType.Strike; } move.Turn = self.GetAngleTo(nearestOpponent); } } } else { move.SpeedUp = 1.0D; move.Turn = self.GetAngleTo(world.Puck); move.Action = ActionType.TakePuck; } }
public static bool CanStrike(this Hockeyist self, Unit unit) { var angle = self.GetAngleTo(unit); return((Math.Abs(angle) <= 0.5 * Current.Game.StickSector) && (self.GetDistanceTo(unit) <= Current.Game.StickLength)); }
private double TurnToNetFarCorner(Hockeyist self, Move move) { double x; double y; GetNetFarCorner(out x, out y); var angleToNet = self.GetAngleTo(x, y); move.Turn = angleToNet; return(angleToNet); }
private void GoToNearestStrikeZone() { double x, y; GetNearestStrikeZoneCenter(out x, out y); var angle = self.GetAngleTo(x, y); if (Math.Abs(angle) > STRIKE_ANGLE) { move.Turn = angle; } move.SpeedUp = 1.0D; }
private bool isOpponentsInfront() { if (Math.Abs(self.GetAngleTo(opponentMinions[0])) < Math.PI / 4 && Math.Abs(self.GetAngleTo(opponentMinions[1])) < Math.PI / 4) { return(true); } return(false); }
public static bool CanStrike(Hockeyist ho, Unit to) { return(Math.Abs(ho.GetAngleTo(to)) <= Game.StickSector / 2 && ho.GetDistanceTo(to) <= Game.StickLength && ho.RemainingKnockdownTicks == 0); }