示例#1
0
        private void OnStandClick(DataUnit dataUnit, Transform transform)
        {
            var data = new Dictionary <string, object>();

            data.Add(typeof(DataUnit).FullName, dataUnit);
            data.Add(typeof(Transform).FullName, transform);
            OnUnitClick.OnNext(data);
        }
示例#2
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);
            }
        }
示例#3
0
        /// <summary>
        /// Gets called whenever an OnUnitClick event is fired.
        /// </summary>
        /// <param Name="evt"></param>
        public void ShowHighlight(OnUnitClick evt)
        {
            if (evt.unit != null)
            {
                if (!IsHighlightOn && !movement.NeedsMoving && !animInfo.IsAnimateFight)
                {
                    UnitSelected  = evt.unit;
                    IsHighlightOn = true;

                    if (!UnitSelected.UnitGame.HasMoved)
                    {
                        UnitSelected.UnitGame.PlaySound(UnitSoundType.Select);
                        UnitSelected.SelectionBox.enabled = true;

                        var movementListt = TileHelper.GetAllTilesWithinRange(UnitSelected.Tile.Coordinate,
                                                                              UnitSelected.UnitGame.MoveRange);
                        foreach (var item in movementListt)
                        {
                            foreach (KeyValuePair <int, Tile> tile in item.Value)
                            {
                                if (!tile.Value.HasUnit() && tile.Value.environmentGameObject.EnvironmentGame.IsWalkable)
                                {
                                    List <Node> path = movement.CalculateShortestPath(UnitSelected.Tile,
                                                                                      tile.Value, false);

                                    if (path != null && path.Count <= UnitSelected.UnitGame.MoveRange)
                                    {
                                        tile.Value.Highlight.ChangeHighlight(HighlightTypes.highlight_move);
                                        HighlightObjects.Add(tile.Value.Highlight);
                                    }
                                }
                            }
                        }
                        attack.ShowAttackHighlights(UnitSelected, UnitSelected.UnitGame.GetAttackMoveRange);
                    }
                    else if (UnitSelected.UnitGame.CanAttackAfterMove && !UnitSelected.UnitGame.HasAttacked)
                    {
                        attack.ShowAttackHighlights(UnitSelected, UnitSelected.UnitGame.AttackRange);
                    }
                }
            }
        }