public TryMoveResult TryMove(Vector2 position) { Vector2 oldPos = transform.position; transform.position = position; int collisions = collider.Cast(Vector2.zero, collisionFilter, collisionBuffer, 0); bool hitMinion = false; bool hitWall = false; TryMoveResult result = TryMoveResult.Success; for (int i = 0; i < collisions; i++) { var minion = collisionBuffer[i].collider.AsMinion(); if (minion != null) { if (minion != this.minion) { hitMinion = true; if (collisionBuffer[i].collider.bounds.center.x > oldPos.x) { result = TryMoveResult.LookLeft; } else { result = TryMoveResult.LookRight; } } continue; } hitWall = true; if (collisionBuffer[i].collider.bounds.center.x > oldPos.x) { result = TryMoveResult.LookLeft; } else { result = TryMoveResult.LookRight; } } if (hitMinion || hitWall) { transform.position = oldPos; } return(result); }
bool FindWaypoint() { float horizontalOffset = .25f; float verticalOffset = .25f; if (this.Owner.Side == HeroSide.Top) { verticalOffset = -.25f; } TryMoveResult result = this.waypoint.TryMove(new Vector2(this.Position.x, this.Position.y + verticalOffset)); if (result == TryMoveResult.Success) { return(true); } if (result == TryMoveResult.LookLeft) { if (this.waypoint.TryMove(new Vector2(this.Position.x - horizontalOffset, this.Position.y + verticalOffset)) == TryMoveResult.Success) { return(true); } if (this.waypoint.TryMove(new Vector2(this.Position.x + horizontalOffset, this.Position.y + verticalOffset)) == TryMoveResult.Success) { return(true); } if (this.waypoint.TryMove(new Vector2(this.Position.x - horizontalOffset, this.Position.y)) == TryMoveResult.Success) { return(true); } if (this.waypoint.TryMove(new Vector2(this.Position.x + horizontalOffset, this.Position.y)) == TryMoveResult.Success) { return(true); } } else { if (this.waypoint.TryMove(new Vector2(this.Position.x + horizontalOffset, this.Position.y + verticalOffset)) == TryMoveResult.Success) { return(true); } if (this.waypoint.TryMove(new Vector2(this.Position.x - horizontalOffset, this.Position.y + verticalOffset)) == TryMoveResult.Success) { return(true); } if (this.waypoint.TryMove(new Vector2(this.Position.x + horizontalOffset, this.Position.y)) == TryMoveResult.Success) { return(true); } if (this.waypoint.TryMove(new Vector2(this.Position.x - horizontalOffset, this.Position.y)) == TryMoveResult.Success) { return(true); } } return(false); }