Exemple #1
0
        private void PlaceCharacters()
        {
            // TODO
            Log.Info("Placing characters");
            int x = 16;
            int y = 9;

            foreach (var player in GameFlowData.Get().GetPlayers())
            {
                //UnityUtils.DumpGameObject(player);

                ActorData actorData = player.GetComponent <ActorData>();
                var       atsd      = actorData.TeamSensitiveData_authority;
                if (atsd == null)
                {
                    continue;
                }

                BoardSquare start     = Board.Get().GetSquare(x++, y);
                GridPosProp startProp = GridPosProp.FromGridPos(start.GetGridPosition());

                atsd.CallRpcMovement(GameEventManager.EventType.Invalid,
                                     startProp, startProp,
                                     null, ActorData.MovementType.Teleport, false, false);

                actorData.ServerLastKnownPosSquare = start;
                actorData.InitialMoveStartSquare   = start;
                actorData.MoveFromBoardSquare      = start;
                Log.Info($"Placing {actorData.DisplayName} at {startProp.m_x}, {startProp.m_y}");  // PATCH internal -> public ActorData.DisplayName
            }
            Log.Info("Done placing characters");
        }
Exemple #2
0
        public AbilityResolver_TrapWire(ActorData actor, Ability ability, AbilityPriority priority, ActorTargeting.AbilityRequestData abilityRequestData)
            : base(actor, ability, priority, abilityRequestData)
        {
            BoardSquare square = GetGameplayRefSquare(abilityRequestData.m_targets[0], m_caster);

            m_targetSquare = square.GetGridPosition();
            m_targetPos    = GetHighlightGoalPos(Targeter, abilityRequestData.m_targets[0], m_caster); // TODO fix height if it matters (probably just different heights on different maps)
            Vector3 pos = m_targetPos * 2 - square.GetWorldPosition();

            m_secondarySquare = Board.Get().GetSquare(pos).GetGridPosition();
        }
        private BoardSquarePathInfo BackOff(ActorData actor, BoardSquarePathInfo pathEnd, HashSet <GridPos> occupiedSquares)
        {
            if (actor == null)
            {
                Log.Error($"Backoff failed because actor is null!");
                return(null);
            }
            Log.Info($"Calculating backoff for {actor.DisplayName}");

            BoardSquare dest = pathEnd.prev?.square ?? pathEnd.square;

            if (occupiedSquares.Contains(dest.GetGridPosition()))
            {
                bool diagMovementAllowed       = GameplayData.Get().m_diagonalMovement != GameplayData.DiagonalMovement.Disabled;
                List <BoardSquare>  neighbours = new List <BoardSquare>(8);
                Queue <BoardSquare> candidates = new Queue <BoardSquare>();
                candidates.Enqueue(pathEnd.square);
                while (candidates.Count > 0)
                {
                    BoardSquare s = candidates.Dequeue();
                    if (!occupiedSquares.Contains(s.GetGridPosition()))
                    {
                        dest = s;
                        break;
                    }

                    neighbours.Clear();
                    if (!diagMovementAllowed)
                    {
                        Board.Get().GetStraightAdjacentSquares(s.x, s.y, ref neighbours);
                    }
                    else
                    {
                        Board.Get().GetAllAdjacentSquares(s.x, s.y, ref neighbours);
                    }
                    neighbours.Sort(delegate(BoardSquare a, BoardSquare b)
                    {
                        return(dest.HorizontalDistanceInWorldTo(a).CompareTo(dest.HorizontalDistanceInWorldTo(b)));
                    });
                    foreach (var n in neighbours)
                    {
                        if (n.IsBoardHeight())
                        {
                            candidates.Enqueue(n);
                        }
                    }
                }
            }

            if (occupiedSquares.Contains(dest.GetGridPosition()))
            {
                Log.Error($"Backoff failed to find a free square for {actor.DisplayName}!");
            }
            occupiedSquares.Add(dest.GetGridPosition());

            BoardSquarePathInfo result = actor.GetActorMovement().BuildPathTo_IgnoreBarriers(pathEnd.square, dest);

            result.heuristicCost         += pathEnd.heuristicCost; // not actually correct but shouldn't matter
            result.moveCost              += pathEnd.moveCost;
            result.m_moverBumpedFromClash = true;
            return(result);
        }