Ejemplo n.º 1
0
        /// <summary>
        /// Check if there has been a click. Ifso then raycast and check if there has been clicked on a specific game object. Ifso fire an event with the click object as a parameter.
        /// </summary>
        private void CheckObjectsClick()
        {
            // Gives errors
            // if (Input.GetMouseButtonDown(0) && !_manager.SwipeController.IsSwipeHappening)
            if (Input.GetMouseButtonDown(0))
            {
                var unitClick      = new OnUnitClick();
                var buildingClick  = new OnBuildingClick();
                var highlightClick = new OnHighlightClick();

                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit))
                {
                    foreach (Unit unit in lm.CurrentLevel.CurrentPlayer.OwnedUnits)
                    {
                        if (unit.UnitGameObject.collider == hit.collider)
                        {
                            unitClick.unit = unit.UnitGameObject;
                            break;
                        }
                    }
                    foreach (Building building in lm.CurrentLevel.CurrentPlayer.OwnedBuildings)
                    {
                        if (building.BuildingGameObject.collider == hit.collider)
                        {
                            buildingClick.building = building.BuildingGameObject;
                            break;
                        }
                    }
                    foreach (HighlightObject highlightObj in highlight.HighlightObjects)
                    {
                        if (highlightObj.collider == hit.collider)
                        {
                            highlightClick.highlight = highlightObj;
                            break;
                        }
                    }
                }

                if (unitClick.unit == null && highlightClick.highlight == null && !movement.NeedsMoving ||
                    (highlight.IsHighlightOn && unitClick.unit != null))
                {
                    highlight.ClearHighlights();
                }
                EventHandler.dispatch(unitClick);
                EventHandler.dispatch(buildingClick);
                EventHandler.dispatch(highlightClick);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Get called whenever an OnHighlightClick is fired. If it is possible it will attack an enemy unit.
        /// </summary>
        /// <param Name="evt"></param>
        public void BattlePreparation(OnHighlightClick evt)
        {
            if (evt.highlight != null)
            {
                HighlightObject highlightObj = evt.highlight;
                if (highlight.IsHighlightOn && !movement.NeedsMoving &&
                    highlightObj.highlightTypeActive == HighlightTypes.highlight_attack)
                {
                    UnitGameObject attackingUnit = highlight.UnitSelected;
                    UnitGameObject defendingUnit = highlightObj.Tile.unitGameObject;


                    if (!attackingUnit.UnitGame.HasAttacked)
                    {
                        if (!attackingUnit.UnitGame.HasMoved ||
                            (attackingUnit.UnitGame.HasMoved && attackingUnit.UnitGame.CanAttackAfterMove))
                        {
                            if (TileHelper.IsTileWithinRange(attackingUnit.transform.position,
                                                             defendingUnit.transform.position, attackingUnit.UnitGame.AttackRange))
                            {
                                attackingUnit.UnitGame.HasAttacked = true;
                                attackingUnit.UnitGame.HasMoved    = true;
                                attackingUnit.UnitGame.PlaySound(UnitSoundType.Attack);

                                highlight.ClearHighlights();

                                // Check if units are faces the wrong way
                                FacingDirectionUnits(attackingUnit, defendingUnit);

                                // Dispatch the animation fight event. But set the needsanimating to true.
                                OnAnimFight fight = new OnAnimFight();
                                fight.attacker       = attackingUnit;
                                fight.defender       = defendingUnit;
                                fight.needsAnimating = true;
                                EventHandler.dispatch(fight);
                            }
                            else
                            {
                                Notificator.Notify("Move to this unit to attack!", 1f);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets called whenever an OnHighlightClick event is fired.
        /// </summary>
        /// <param Name="evt"></param>
        public void ClickedOnHightLight(OnHighlightClick evt)
        {
            if (evt.highlight != null && IsHighlightOn)
            {
                HighlightObject highlight = evt.highlight;

                if (highlight.highlightTypeActive == HighlightTypes.highlight_move)
                {
                    UnitSelected.UnitGame.HasMoved = true;
                    movement.nodeList = movement.CalculateShortestPath(UnitSelected.Tile,
                                                                       highlight.Tile, false);
                    movement.StartTimeMoving = Time.time;
                    movement.NeedsMoving     = true;
                    movement.FacingDirectionMovement(UnitSelected, movement.nodeList[0].Tile);
                    UnitSelected.UnitGame.PlaySound(UnitSoundType.Move);
                    ClearHighlights();
                }
            }
        }