private void SetMovementPathToNewExploreLocation(WorldView worldView) { // find closest unexplored cell var cellGrid = worldView.CellGrid; var cell = cellGrid.GetClosestUnexploredCell(StackView.LocationHex); if (cell == Cell.Empty) { // all locations explored StackView.SetStatusToNone(); StackView.Unselect(); } // find best path to unexplored cell var path = MovementPathDeterminer.DetermineMovementPath(StackView.HexLibrary, StackView.Stack, StackView.LocationHex, cell.ToPoint, cellGrid); if (path.Count == 0) { // could not find a path to location StackView.SetStatusToNone(); StackView.Unselect(); } path = path.RemoveLast(StackView.SightRange); StackView.MovementPath = path; }
internal override void Update(WorldView worldView, float deltaTime) { var cantMove = MovementCountdownTimeHasExpired() ? MoveStackToNextCell() : MoveStackBetweenCells(deltaTime); var canMove = !cantMove; worldView.Camera.LookAtPixel(LocationInWorld); if (canMove) { return; } if (StackView.StackHasMovementPoints) { StackView.Select(); } else { StackView.Unselect(); StackView.SelectNext(); } }
internal override void Update(WorldView worldView, float deltaTime) { var cantMove = MovementCountdownTimeHasExpired() ? MoveStackToNextCell() : MoveStackBetweenCells(deltaTime); var canMove = !cantMove; worldView.Camera.LookAtPixel(LocationInWorld); if (canMove) { return; } if (StackView.StackHasMovementPoints) // either reached final destination or may not move into cell { SetMovementPathToNewExploreLocation(worldView); } else // run out of movement points { StackView.Unselect(); StackView.SelectNext(); } }