示例#1
0
        public void AddTombstoneIfNeeded()
        {
            if (!this.m_ejected && this.m_level.GetTombStoneCount() < 40)
            {
                int tileX = this.GetTileX();
                int tileY = this.GetTileY();

                LogicTileMap tileMap = this.m_level.GetTileMap();
                LogicTile    tile    = tileMap.GetTile(tileX, tileY);

                if (!this.TileOkForTombstone(tile))
                {
                    int minDistance  = 0;
                    int closestTileX = -1;
                    int closestTileY = -1;

                    for (int i = -1; i < 2; i++)
                    {
                        int offsetX = ((i + tileX) << 9) | 256;
                        int offsetY = 256 - (tileY << 9);

                        for (int j = -1; j < 2; j++, offsetY -= 512)
                        {
                            tile = tileMap.GetTile(tileX + i, tileY + j);

                            if (this.TileOkForTombstone(tile))
                            {
                                int distanceX = this.GetX() - offsetX;
                                int distanceY = this.GetY() + offsetY;
                                int distance  = distanceX * distanceX + distanceY * distanceY;

                                if (minDistance == 0 || distance < minDistance)
                                {
                                    minDistance  = distance;
                                    closestTileX = tileX + i;
                                    closestTileY = tileY + j;
                                }
                            }
                        }
                    }

                    if (minDistance == 0)
                    {
                        return;
                    }

                    tileX = closestTileX;
                    tileY = closestTileY;
                }

                LogicObstacleData tombstoneData = this.GetCharacterData().GetTombstone();

                if (tombstoneData != null)
                {
                    LogicObstacle tombstone = (LogicObstacle)LogicGameObjectFactory.CreateGameObject(tombstoneData, this.m_level, this.m_villageType);
                    tombstone.SetInitialPosition(tileX << 9, tileY << 9);
                    this.GetGameObjectManager().AddGameObject(tombstone, -1);
                }
            }
        }
示例#2
0
        public static LogicGameObject CreateGameObject(LogicGameObjectData data, LogicLevel level, int villageType)
        {
            LogicGameObject gameObject = null;

            switch (data.GetDataType())
            {
            case LogicDataType.BUILDING:
                gameObject = new LogicBuilding(data, level, villageType);
                break;

            case LogicDataType.CHARACTER:
            case LogicDataType.HERO:
                gameObject = new LogicCharacter(data, level, villageType);
                break;

            case LogicDataType.PROJECTILE:
                gameObject = new LogicProjectile(data, level, villageType);
                break;

            case LogicDataType.OBSTACLE:
                gameObject = new LogicObstacle(data, level, villageType);
                break;

            case LogicDataType.TRAP:
                gameObject = new LogicTrap(data, level, villageType);
                break;

            case LogicDataType.ALLIANCE_PORTAL:
                gameObject = new LogicAlliancePortal(data, level, villageType);
                break;

            case LogicDataType.DECO:
                gameObject = new LogicDeco(data, level, villageType);
                break;

            case LogicDataType.SPELL:
                gameObject = new LogicSpell(data, level, villageType);
                break;

            case LogicDataType.VILLAGE_OBJECT:
                gameObject = new LogicVillageObject(data, level, villageType);
                break;

            default:
            {
                Debugger.Warning("Trying to create game object with data that does not inherit LogicGameObjectData. GlobalId=" + data.GetGlobalID());
                break;
            }
            }

            return(gameObject);
        }