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); } } }
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); }