Beispiel #1
0
    public void CalculateRanges()
    {
        foreach (Tile t in GridManager.grid)
        {
            if (t.bEntityConnection.ContainsKey(this))
            {
                t.bEntityConnection.Remove(this);
            }
        }

        Pathfinding.ThisIsCool cool1    = new Pathfinding.ThisIsCool();
        Pathfinding.ThisIsCool cool2    = new Pathfinding.ThisIsCool();
        Pathfinding.ThisIsCool cool3    = new Pathfinding.ThisIsCool();
        Pathfinding.GridInfo   gridInfo = new Pathfinding.GridInfo();
        gridInfo.cleanse                   = false;
        gridInfo.useMovementPenalty        = true;
        gridInfo.useThisIsCool             = true;
        gridInfo.allowEntitiesToBeTargeted = true;
        tilesInMovementRange               = Pathfinding.GetRangeObstacles(tile, movementRange, gridInfo, out cool1);
        gridInfo.useMovementPenalty        = false;
        tilesInIntimidationRange           = Pathfinding.GetRangeObstacles(tile, entity.stats.intimidationRange * BattleManager.distanceCoefficient, gridInfo, out cool2);
        tilesInMeleeRange                  = Pathfinding.GetRangeObstacles(tile, entity.stats.meleeRange * BattleManager.distanceCoefficient, gridInfo, out cool3);

        foreach (Tile t in GridManager.grid)
        {
            t.bEntityConnection.Add(this, new Tile.BattleEntityConnection());

            if (tilesInMovementRange.Contains(t))
            {
                t.bEntityConnection[this].inEntitiesMovementRange = true;
            }
            if (tilesInIntimidationRange.Contains(t))
            {
                t.bEntityConnection[this].inEntitiesIntimidationRange = true;
            }
            if (tilesInMeleeRange.Contains(t))
            {
                t.bEntityConnection[this].inEntitiesMeleeRange = true;
            }
            if (cool2.outerTiles.Contains(t))
            {
                t.bEntityConnection[this].inEntitiesIntimidationRangeOuter = true;
            }
            if (cool3.outerTiles.Contains(t))
            {
                t.bEntityConnection[this].inEntitiesMeleeRangeOuter = true;
            }
        }
    }
Beispiel #2
0
    public void CalculateReachableAreas()
    {
        Pathfinding.GridInfo   gridInfo = new Pathfinding.GridInfo();
        Pathfinding.ThisIsCool cool1    = new Pathfinding.ThisIsCool();
        gridInfo = new Pathfinding.GridInfo();
        gridInfo.useLineOfSight     = false;
        gridInfo.useMovementPenalty = true;
        gridInfo.unreachableTiles   = new List <Tile>();
        gridInfo.unPathableTiles    = new List <Tile>();

        // Set everything to be unreachable for this entity.
        foreach (Tile t in GridManager.grid)
        {
            gridInfo.unreachableTiles.Add(t);
            gridInfo.unPathableTiles.Add(t);
        }

        // Cycle through all tiles and set each one that isn't in enemy's intimidation range
        // and intimidation ring to reachable and solve for pathing.
        foreach (Tile t in GridManager.grid)
        {
            if (t.IsInEnemysIntimidationRange(this) == false)
            {
                gridInfo.unreachableTiles.Remove(t);
                gridInfo.unPathableTiles.Remove(t);
            }
            else if (t.IsInEnemysOuterIntimidationRing(this) == true)
            {
                gridInfo.unreachableTiles.Remove(t);
            }
        }

        // Cycle through all of this battle entity's battle entities in range.
        foreach (BattleEntity be in bEntitiesInIntimidationRange)
        {
            List <Tile> alliedIntimidationTiles = new List <Tile>();
            foreach (BattleEntity ally in be.alliesSharingIntimidationRange)
            {
                alliedIntimidationTiles.AddRange(ally.tilesInIntimidationRange);
            }
            alliedIntimidationTiles.AddRange(be.tilesInIntimidationRange);

            foreach (Tile t in alliedIntimidationTiles)
            {
                bool flag = false;

                foreach (BattleEntity other in t.GetEntitiesInRange(be, RangeType.Intimidation, Relationship.Ally))
                {
                    if (be != other)
                    {
                        if (!be.alliesSharingIntimidationRange.Contains(other) && !bEntitiesInIntimidationRange.Contains(other))
                        {
                            flag = true;
                        }
                    }
                }

                if (flag == false)
                {
                    gridInfo.unreachableTiles.Remove(t);
                    gridInfo.unPathableTiles.Remove(t);
                }
            }
        }

        gridInfo.cleanse     = true;
        gridInfo.bEntity     = this;
        tilesInMovementRange = Pathfinding.GetRangeObstacles(this.tile, movementRange, gridInfo, out cool1);

        foreach (Tile t in GridManager.grid)
        {
            if (gridInfo.unreachableTiles.Contains(t))
            {
                t.isClickableForInput = false;
            }
            if (gridInfo.unPathableTiles.Contains(t))
            {
                t.isAvailableToPathfinding = false;
            }
        }

        foreach (Tile t in tilesInMovementRange)
        {
            Tile.BattleEntityConnection bec = new Tile.BattleEntityConnection();
            bec.inEntitiesMovementRange = true;
            if (!t.bEntityConnection.ContainsKey(this))
            {
                t.bEntityConnection.Add(this, new Tile.BattleEntityConnection());
            }
            else
            {
                t.bEntityConnection[this].inEntitiesMovementRange = true;
            }
        }
    }