public void OnNewTroopMovementDialogReturn(int numTroops)
        {
            Destroy(ActiveTroopDialog.gameObject);
            ActiveTroopDialog = null;

            if (numTroops == 0)
            {
                Destroy(DragArrow);
            }
            else
            {
                Vector2 midPos = Vector2.Lerp(DragArrowStart, DragArrowEnd, 0.5f);

                GameObject rectangle = MeshGenerator.DrawRectangle(midPos, PolygonMapGenerator.LAYER_OVERLAY2, 0.13f, 0.13f, Color.gray);
                rectangle.AddComponent <MeshCollider>();
                rectangle.transform.SetParent(DragArrow.transform);

                TextMesh movementLabel = MeshGenerator.DrawTextMesh(midPos, PolygonMapGenerator.LAYER_OVERLAY3, numTroops.ToString(), 60);
                movementLabel.transform.SetParent(DragArrow.transform);

                Army newMovement = Game.AddArmy(DragSourceTerritory, DragTargetTerritory, numTroops);

                ArmyArrow movementArrow = DragArrow.AddComponent <ArmyArrow>();
                movementArrow.Init(newMovement, movementLabel, midPos);
                Game.ArmyArrows.Add(movementArrow);
            }

            State = InputState.Idle;
        }
        public void OnEditTroopMovementDialogReturn(int numTroopsNew)
        {
            if (numTroopsNew == 0)
            {
                Game.RemoveArmy(EditedMovement.TroopMovement);
                Game.ArmyArrows.Remove(EditedMovement);
                Destroy(EditedMovement.gameObject);
            }
            if (numTroopsNew != 0)
            {
                Game.EditArmy(EditedMovement.TroopMovement, numTroopsNew);
                EditedMovement.Label.text = numTroopsNew.ToString();
            }

            Destroy(ActiveTroopDialog.gameObject);
            EditedMovement    = null;
            ActiveTroopDialog = null;
            State             = InputState.Idle;
        }
 protected override void OnLeftMouseDragEnd()
 {
     base.OnLeftMouseDragEnd();
     if (State == InputState.Dragging)
     {
         Region hoveredRegion = GetHoveredRegion();
         if (CanCreateNewTroopMovement())
         {
             DragTargetTerritory = Game.Territories[hoveredRegion];
             ActiveTroopDialog   = Instantiate(Game.UI.TroopMovementDialog);
             ActiveTroopDialog.Init(DragSourceTerritory.UnplannedTroops, DragSourceTerritory.UnplannedTroops, OnNewTroopMovementDialogReturn);
             ActiveTroopDialog.transform.SetParent(Game.UI.OverlayContainer.transform);
             Vector3 targetPos = Vector3.Lerp(Camera.WorldToScreenPoint(new Vector3(DragArrowStart.x, 0f, DragArrowStart.y)), Camera.WorldToScreenPoint(new Vector3(DragArrowEnd.x, 0f, DragArrowEnd.y)), 0.5f);
             ActiveTroopDialog.transform.position = targetPos;
             State = InputState.AmountDialog;
         }
         else
         {
             Destroy(DragArrow);
             State = InputState.Idle;
         }
     }
 }
        private void UpdatePlanningPhase()
        {
            switch (State)
            {
            case InputState.Idle:
                // Click on existing movement
                if (Input.GetKeyDown(KeyCode.Mouse0))
                {
                    ArmyArrow hoveredMovement = GetHoveredTroopMovement();
                    if (hoveredMovement != null)
                    {
                        EditedMovement    = hoveredMovement;
                        ActiveTroopDialog = Instantiate(Game.UI.TroopMovementDialog);
                        ActiveTroopDialog.Init(hoveredMovement.TroopMovement.SourceTerritory.UnplannedTroops + hoveredMovement.TroopMovement.NumTroops, hoveredMovement.TroopMovement.NumTroops, OnEditTroopMovementDialogReturn);
                        ActiveTroopDialog.transform.SetParent(Game.UI.OverlayContainer.transform);
                        Vector3 targetPos = Camera.WorldToScreenPoint(new Vector3(hoveredMovement.MidPoint.x, 0f, hoveredMovement.MidPoint.y));
                        ActiveTroopDialog.transform.position = targetPos;
                        State = InputState.AmountDialog;
                    }
                }

                // Space ends planning phase
                else if (Input.GetKeyDown(KeyCode.Space))
                {
                    Game.EndPlanningPhase();
                }
                break;

            // Dragging current arrow
            case InputState.Dragging:
                Destroy(DragArrow);
                bool validDrag = CanCreateNewTroopMovement();
                DragArrowEnd = GetMousePositionOnMap();
                DragArrow    = MeshGenerator.DrawArrow(DragArrowStart, DragArrowEnd, validDrag ? Color.red : Color.black, width: 0.02f, arrowHeadWidth: 0.06f, arrowHeadLength: 0.15f, yPos: PolygonMapGenerator.LAYER_OVERLAY1);
                break;
            }
        }