// this is the main one
        public void SelectTile(BoardEntity boardEntity, List <TileSelectOption> options, Action <TileSelectOption> callBack, bool isMovement = false,
                               Action hoverExit = null)
        {
            this.hoverExit = hoverExit;
            if (selectionCallBack == null)
            {
                this.isMovement   = isMovement;
                selectionCallBack = callBack;

                possibleTiles.Clear();
                options.ForEach(x => possibleTiles.Add(x.Selection, x));

                if (boardEntity != null)
                {
                    selectedEntity = boardEntity;
                    glow(selectedEntity.GetTile(), defaultHoverColor);
                }

                // highlight possible moves
                foreach (TileSelectOption opt in options)
                {
                    highlightMovableTile(opt.Selection.GetComponentInChildren <PathOnClick>());
                }

                //selectedTile = boardEntity.GetTile().PathOnClick;
            }
        }
 private void EnterAction(BoardEntity boardEntity, Tile leavingTile, Action callback)
 {
     if (this.boardEntity.Team != boardEntity.Team && !influenceTiles.Contains(leavingTile))
     {
         influenceSkill.Action(boardEntity.GetTile(), callback);
     }
     else
     {
         callback();
     }
 }
 private void setHoverEntity(BoardEntity boardEntity)
 {
     if (hoverBoardEntity != null)
     {
         hoverBoardEntity.GetTile().PathOnClick.ColorEffectManager.TurnOff(this);
     }
     hoverBoardEntity = boardEntity;
     if (hoverBoardEntity != null)
     {
         //profile.UpdateProfile(boardEntity);
         //hoverBoardEntity.GetTile().PathOnClick.ColorEffectManager.TurnOn(this, Color.blue);
     }
 }
        public void TileClicked(PathOnClick pathOnClick)
        {
            if (selectionCallBack != null && active)
            {
                //checks to see if the selected tile is unselectable
                if (!(pathOnClick != null && possibleTiles.ContainsKey(pathOnClick.Tile) && !possibleTiles[pathOnClick.Tile].Clickable))
                {
                    Action <TileSelectOption> tempSelectOption = selectionCallBack;
                    selectionCallBack = null;
                    BoardEntity tempSelectedEntity = selectedEntity;
                    selectedEntity = null;
                    ClearGlowPath();

                    foreach (Tile t in possibleTiles.Keys)
                    {
                        unHighlightMovableTile(t.GetComponentInChildren <PathOnClick>());
                    }
                    if (tempSelectedEntity != null)
                    {
                        unGlow(tempSelectedEntity.GetTile());
                    }

                    if (pathOnClick != null && possibleTiles.ContainsKey(pathOnClick.Tile))
                    {
                        tempSelectOption(possibleTiles[pathOnClick.Tile]);
                    }
                    else
                    {
                        tempSelectOption(null);
                        active = false;
                        if (pathOnClick != null && tempSelectedEntity != null && pathOnClick != tempSelectedEntity.GetTile().PathOnClick&& !isMovement)
                        {
                            //pathOnClick.OnMouseUp();
                        }
                        active = true;
                    }
                    isMovement = false;
                }
            }
        }
Ejemplo n.º 5
0
        public void MoveBoardEntity(Position p, BoardEntity entity, bool move = true)
        {
            Tile oldTile = entity.GetTile();
            Tile tile    = GetTile(p);

            if (entity.GetTile().BoardEntity == entity)
            {
                entity.GetTile().SetBoardEntity(null);
            }
            entity.Position = p;
            if (entity.GetTile().BoardEntity == null)
            {
                entity.GetTile().SetBoardEntity(entity);
            }

            if (move)
            {
                entity.transform.position = entity.GetTile().transform.position;
            }

            if (entity is CharacterBoardEntity)
            {
                List <Passive> passivesTemp = ((CharacterBoardEntity)entity).Passives;
                foreach (Passive passive in passivesTemp)
                {
                    passive.LeaveTile(oldTile);
                    passive.EnterTile(tile);
                }
                foreach (TileListener listner in tile.TileListeners)
                {
                    listner.TileEnter((CharacterBoardEntity)entity, tile);
                }
            }
            if (UpdatedBoardEntityPosition != null)
            {
                UpdatedBoardEntityPosition();
            }
        }
Ejemplo n.º 6
0
        public void ExecuteTurnHelper(Action callBack, BoardEntity ragedBy = null)
        {
            this.callBack = callBack;
            List <Move>   moves   = characterBoardEntity.MoveSet();
            Skill         skill   = characterBoardEntity.BasicAttack;
            List <AiMove> aiMoves = new List <AiMove>();
            Dictionary <Move, List <BoardEntity> > moveToTargets = new Dictionary <Move, List <BoardEntity> >();

            moves.Add(new Move {
                destination = characterBoardEntity.GetTile()
            });

            foreach (Move m in moves)
            {
                List <Tile> tiles = new List <Tile>();
                if (skill.IsActive())
                {
                    tiles = skill.TileSetClickable(m.destination.Position);
                }

                List <BoardEntity> entities = new List <BoardEntity>();

                // raged target must be the 'nearest' boardentity
                Position targetPosition;
                if (ragedBy != null)
                {
                    targetPosition = ragedBy.GetTile().Position;
                }
                else
                {
                    BoardEntity nearest = tileManager.NearestBoardEntity(m.destination.Position, Team.Player);
                    if (nearest == null)
                    {
                        callBack();
                        return;
                    }
                    targetPosition = nearest.GetTile().Position;
                }

                float distance = targetPosition.GetDistance(m.destination.Position);

                int movementScore = m.path.Count;

                AiMove aiMove = new AiMove(int.MaxValue, (int)distance);
                if (m.destination != characterBoardEntity.GetTile())
                {
                    aiMove.AddMoveAction(characterBoardEntity, m, DoNextAction);
                }

                aiMoves.Add(aiMove);
                foreach (Tile t in tiles)
                {
                    if (t.BoardEntity != null)
                    {
                        // must attack the raged target if there is one
                        if ((ragedBy == null || ragedBy == t.BoardEntity) && !((CharacterBoardEntity)t.BoardEntity).IsStealthed())
                        {
                            aiMove = new AiMove(targetScore(t.BoardEntity), 0);
                            if (m.destination != characterBoardEntity.GetTile())
                            {
                                aiMove.AddMoveAction(characterBoardEntity, m, DoNextAction);
                            }
                            aiMove.AddAttackAction(skill, t, (() => DoNextAction(false)));
                            aiMoves.Add(aiMove);
                        }
                    }
                }
                moveToTargets[m] = entities;
            }

            aiMoves.RemoveAll((a) => a.ApCost > characterBoardEntity.Stats.GetMutableStat(AttributeStats.StatType.AP).Value);
            aiMoves.Sort();

            actionQueue = aiMoves[0].Actions;
            DoNextAction(false);
        }
        private void buildMoveOptions()
        {
            if (selectedBoardEntity is CharacterBoardEntity)
            {
                if (TurnManager.CurrentBoardEntity == selectedBoardEntity)
                {
                    List <Move>             moveSet = selectedBoardEntity.MoveSet();
                    List <TileSelectOption> options = new List <TileSelectOption>();
                    foreach (Move m in moveSet)
                    {
                        Stats displaystats = selectedBoardEntity.Stats.GetCopy();
                        displaystats.SubtractAPPoints(m.apCost);
                        displaystats.SetMutableStat(StatType.Movement, m.movementPointsAfterMove);
                        Color col = ApCostColors[0];
                        if (m.apCost < ApCostColors.Count)
                        {
                            col = ApCostColors[m.apCost];
                        }
                        options.Add(new TileSelectOption()
                        {
                            Selection      = m.destination,
                            OnHover        = m.path,
                            HighlightColor = col,
                            HoverColor     = hoverColor,
                            ReturnObject   = m,
                            OnHoverAction  = (
                                () => {
                                if (getHoverEntity() == null)
                                {
                                    profile.PreviewMove(selectedBoardEntity, m);
                                    //profile.UpdateProfile(selectedBoardEntity, displaystats);
                                }
                            }
                                )
                        });
                    }

                    options.Add(new TileSelectOption()
                    {
                        Selection      = selectedBoardEntity.GetTile(),
                        HighlightColor = SelectColor,
                        HoverColor     = SelectColor,
                        OnHoverAction  = (
                            () => {
                            if (getHoverEntity() == null)
                            {
                                profile.UpdateProfile(selectedBoardEntity);
                            }
                        })
                    });

                    tileSelectionManager.SelectTile(selectedBoardEntity, options, sendMoveToBoardEntity, isMovement: true,
                                                    hoverExit: () => { if (hoverBoardEntity == null)
                                                                       {
                                                                           profile.UpdateProfile(selectedBoardEntity);
                                                                       }
                                                    }
                                                    );
                    skillSelector.SetBoardEntity((CharacterBoardEntity)selectedBoardEntity);
                    skillSelector.SetSkills(((CharacterBoardEntity)selectedBoardEntity).Skills);
                }
                else
                {
                    tileSelectionManager.SelectTile(selectedBoardEntity, new List <Move>(), sendMoveToBoardEntity, null, null);
                }
            }
        }