private void _on_Map_finished_updating() { var currentSelectedNode = _map.GetSelectedNode(); if (currentSelectedNode is Player player) { var newAngle = GetTargetAngle(player.GetDirection()); this.RotationDegrees = newAngle; var gridPosition = player.GetGridPosition(); if (GridHelper.CanMoveForward(_map, gridPosition.Column, gridPosition.Row, player.GetDirection()) && !GridHelper.HasPlayerUnits(_gameManager, gridPosition.Column, gridPosition.Row, player.GetDirection()) && !player.IsDisabledToWalk() && player.AP > 0) { this.Modulate = new Color("ffffff"); _disabled = false; } else { this.Modulate = new Color("4affffff"); _disabled = true; } } }
private void _on_Attack_DiceRolled(string rolledValue) { var selectedPlayer = (Player)Map.GetSelectedNode(); var weapon = _cardManager.GetPlayerWeapon(selectedPlayer.GetInstanceId()); var currentMove = _movementManager.CurrentPlayerMove; _movementManager.ProcessAttackOutput(rolledValue, weapon, (string text) => { _displayText.SetText($"[center]{text}[/center]"); _displayText.Display(); _cardManager.RemoveWeapon(selectedPlayer.GetInstanceId()); return(1); }, (string text) => { _displayText.SetText($"[center]{text}[/center]"); _displayText.Display(); return(1); }, (string text) => { _displayText.SetText($"[center]{text}[/center]"); _displayText.Display(); if (GridHelper.CanMoveForward(Map, currentMove.Position.Column, currentMove.Position.Row, currentMove.Direction) && GridHelper.HasPlayerUnits(this, currentMove.Position.Column, currentMove.Position.Row, currentMove.Direction)) { if (HasEnemyUnit(currentMove.Position.Column, currentMove.Position.Row, selectedPlayer.GetPlayerNumber(), out var enemy)) { enemy.PushFrom(currentMove.Direction); } } return(1); }, (string text) => { _displayText.SetText($"[center]{text}[/center]"); _displayText.Display(); if (HasEnemyUnit(currentMove.Position.Column, currentMove.Position.Row, selectedPlayer.GetPlayerNumber(), out var enemy)) { _playerManager.KillUnit(enemy); _victoryManager.CheckForVictory(); } return(1); }); selectedPlayer.SetAP(selectedPlayer.AP - currentMove.APWeight, emitSignal: true); var attackDice = _diceManager.GetAttackDice(); attackDice.HideDice(); }
private void _on_Zombie_DiceRolled(string rolledValue) { var selectedPlayer = (Player)Map.GetSelectedNode(); var currentMove = _movementManager.CurrentPlayerMove; var zombieDice = _diceManager.GetZombieDice(); zombieDice.HideDice(); _movementManager.ProcessZombieBiteOutput(rolledValue, (string text) => { _displayText.SetText($"[center]{text}[/center]"); _displayText.Display(); if (GridHelper.CanMoveForward(Map, currentMove.Position.Column, currentMove.Position.Row, currentMove.Direction) && GridHelper.HasPlayerUnits(this, currentMove.Position.Column, currentMove.Position.Row, currentMove.Direction)) { if (HasEnemyUnit(currentMove.Position.Column, currentMove.Position.Row, selectedPlayer.GetPlayerNumber(), out var enemy)) { enemy.PushFrom(currentMove.Direction); } } SetupInfection(); return(1); }, (string text) => { _displayText.SetText($"[center]{text}[/center]"); _displayText.Display(); selectedPlayer.SetAP(selectedPlayer.AP - currentMove.APWeight, emitSignal: true); return(1); }); }
//ToDo: split functions private void SetScore(IDictionary <string, PlayerMove> edges, GridPosition targetPosition, int currentAP, GridPosition currentPosition, string currentDirection, int maxAP, int playerNumber, int range, int wide) { var targetEdge = targetPosition.ToEdgeString(); var moveType = PlayerMoveType.Move; var targetDirection = GetTargetDirection(targetPosition, currentPosition); if (!GridHelper.CanMoveForward(_root.Map, currentPosition.Column, currentPosition.Row, targetDirection)) { return; } if (GridHelper.HasPlayerUnits(_root, currentPosition.Column, currentPosition.Row, targetDirection)) { return; } if (!edges.ContainsKey(targetEdge)) { return; } if (edges[targetEdge].Type == PlayerMoveType.Attack) { return; } var computedScore = edges[targetEdge].APWeight; if (targetDirection == currentDirection) { computedScore = currentAP + 1 < computedScore ? currentAP + 1 : computedScore; } else if (GridHelper.IsSideDirection(currentDirection, targetDirection)) { computedScore = currentAP + 2 < computedScore ? currentAP + 2 : computedScore; } else if (GridHelper.IsOppositeDirection(currentDirection, targetDirection)) { computedScore = currentAP + 3 < computedScore ? currentAP + 3 : computedScore; } if (currentAP < maxAP) { var attackPositions = GetAttackPositions(currentPosition, currentDirection, range, playerNumber); foreach (var attackPosition in attackPositions) { var attackPositionEdge = attackPosition.ToEdgeString(); var attackComputedScore = edges[attackPositionEdge].APWeight; if (currentAP + 1 < attackComputedScore) { edges[attackPositionEdge].Type = PlayerMoveType.Attack; edges[attackPositionEdge].APWeight = currentAP + 1; edges[attackPositionEdge].AttackerPosition = currentPosition; edges[attackPositionEdge].Direction = currentDirection; } } } if (computedScore >= edges[targetEdge].APWeight) { return; } if (computedScore <= maxAP) { edges[targetEdge].APWeight = computedScore; edges[targetEdge].Type = moveType; edges[targetEdge].Direction = targetDirection; if (moveType == PlayerMoveType.Attack) { return; } var neighbors = GetNeighborEdges(targetPosition); foreach (var neighbor in neighbors) { SetScore(edges, neighbor, computedScore, targetPosition, targetDirection, maxAP, playerNumber, range, wide); } } }