Beispiel #1
0
        private Dictionary <MapDataFile, BaseTile[, ]> ParseMapData()
        {
            Dictionary <MapDataFile, BaseTile[, ]> dataDict = new Dictionary <MapDataFile, BaseTile[, ]>();

            foreach (MapDataFile mapDataFile in MapDataFiles)
            {
                BaseTile[,] mapData = new BaseTile[MapDataFile.MapWidth, MapDataFile.MapHeight];

                mapDataFile.Stream.Seek(MapDataFile.MapDataOffset, SeekOrigin.Begin);

                for (int y = 0; y < MapDataFile.MapHeight; y++)
                {
                    for (int x = 0; x < MapDataFile.MapWidth; x++)
                    {
                        int offset = (int)mapDataFile.Stream.Position;
                        MapDataFile.TileTypes typeId = (MapDataFile.TileTypes)mapDataFile.Stream.ReadByte();

                        if (MapDataFile.TileTypeClassMapping.ContainsKey(typeId))
                        {
                            mapData[x, y] = (BaseTile)Activator.CreateInstance(MapDataFile.TileTypeClassMapping[typeId], new object[] { this, mapDataFile, offset, new Point(x, y), (PropertyChangedEventHandler)GameDataPropertyChanged });
                        }
                        else
                        {
                            mapData[x, y] = new BaseTile(this, mapDataFile, offset, new Point(x, y), GameDataPropertyChanged);
                        }
                    }
                }

                dataDict.Add(mapDataFile, mapData);
            }

            return(dataDict);
        }
Beispiel #2
0
        public BaseTile(BaseTile originalTile, MapDataFile.TileTypes newTileType)
        {
            GameDataManager = originalTile.GameDataManager;
            MapDataFile     = originalTile.MapDataFile;
            Offset          = originalTile.Offset;
            Coordinates     = originalTile.Coordinates;

            PropertyChanged = originalTile.PropertyChanged;

            Data    = originalTile.Data;
            Data[0] = (byte)(tileType = newTileType);

            Load();
        }
Beispiel #3
0
        public BaseTile(GameDataManager gameDataManager, MapDataFile mapDataFile, int offset, Point coordinates, PropertyChangedEventHandler propertyChanged = null)
        {
            GameDataManager = gameDataManager;
            MapDataFile     = mapDataFile;
            Offset          = offset;
            Coordinates     = coordinates;

            PropertyChanged = propertyChanged;

            MapDataFile.Stream.Seek(Offset, SeekOrigin.Begin);
            Data = new byte[16];
            MapDataFile.Stream.Read(Data, 0, Data.Length);

            tileType = (MapDataFile.TileTypes)Data[0];

            Load();
        }
Beispiel #4
0
        public BaseTile(GameDataManager gameDataManager, MapDataFile mapDataFile, int offset, Point coordinates, PropertyChangedEventHandler propertyChanged = null)
        {
            this.GameDataManager = gameDataManager;
            this.MapDataFile     = mapDataFile;
            this.Offset          = offset;
            this.Coordinates     = coordinates;

            this.PropertyChanged = propertyChanged;

            this.MapDataFile.Stream.Seek(this.Offset, SeekOrigin.Begin);
            this.Data = new byte[16];
            this.MapDataFile.Stream.Read(this.Data, 0, this.Data.Length);

            this.tileType = (MapDataFile.TileTypes) this.Data[0];

            Load();
        }
Beispiel #5
0
 public FloorTile(BaseTile originalTile, MapDataFile.TileTypes newTileType) :
     base(originalTile, newTileType)
 {
 }
Beispiel #6
0
 public void ResetTileType()
 {
     TileType = (dynamic)originalValues["TileType"];
 }
 public TreasureChestTile(BaseTile originalTile, MapDataFile.TileTypes newTileType) :
     base(originalTile, newTileType)
 {
 }
Beispiel #8
0
 public StairsTile(BaseTile originalTile, MapDataFile.TileTypes newTileType) :
     base(originalTile, newTileType)
 {
 }
Beispiel #9
0
        public void GameDataPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (sender is BaseParser || sender is EtrianString)
            {
                if (sender is BaseParser)
                {
                    changedParsedData = ParsedData.Where(x => x.HasChanged).ToList();
                }

                changedMessageFiles = MessageFiles.Where(x => x.Tables.Any(y => (y is MessageTable) && (y as MessageTable).HasChanges)).ToList();
            }

            if (sender is BaseTile)
            {
                changedMapTileData.Clear();
                foreach (KeyValuePair <MapDataFile, BaseTile[, ]> pair in MapTileData)
                {
                    for (int y = 0; y < MapDataFile.MapHeight; y++)
                    {
                        for (int x = 0; x < MapDataFile.MapWidth; x++)
                        {
                            if (pair.Value[x, y].HasChanged)
                            {
                                MapDataFile.TileTypes typeId = pair.Value[x, y].TileType;

                                if (MapDataFile.TileTypeClassMapping.ContainsKey(typeId))
                                {
                                    pair.Value[x, y] = (BaseTile)Activator.CreateInstance(MapDataFile.TileTypeClassMapping[typeId], new object[] { pair.Value[x, y], typeId });
                                }
                                else
                                {
                                    pair.Value[x, y] = new BaseTile(pair.Value[x, y], typeId);
                                }

                                changedMapTileData.Add(pair.Value[x, y]);
                            }
                        }
                    }
                }
            }

            if (sender is EncounterParser)
            {
                GenerateOtherDictionaries();
            }

            if (sender.GetProperty(e.PropertyName) is string)
            {
                if (sender is BaseItemParser)
                {
                    BaseItemParser parser = (sender as BaseItemParser);
                    ItemNames[parser.ItemNumber]        = parser.Name;
                    ItemDescriptions[parser.ItemNumber] = parser.Description;

                    SetMessageString(ItemNameFile, 0, parser.ItemNumber - 1, parser.Name);
                    SetMessageString(ItemInfoFile, 0, parser.ItemNumber - 1, parser.Description);
                }

                if (sender is EnemyDataParser)
                {
                    EnemyDataParser parser = (sender as EnemyDataParser);
                    EnemyNames[parser.EnemyNumber]        = parser.Name;
                    EnemyDescriptions[parser.EnemyNumber] = parser.Description;

                    SetMessageString(EnemyNameFile, 0, parser.EnemyNumber - 1, parser.Name);
                    SetMessageString(EnemyInfoFile, 0, parser.EnemyNumber - 1, parser.Description);

                    GenerateOtherDictionaries();
                }

                if (sender is PlayerSkillReqParser)
                {
                    PlayerSkillReqParser parser = (sender as PlayerSkillReqParser);
                    PlayerSkillNames[parser.SkillNumber]             = parser.Name;
                    PlayerSkillShortDescriptions[parser.SkillNumber] = parser.ShortDescription;
                    PlayerSkillDescriptions[parser.SkillNumber]      = parser.Description;

                    SetMessageString(PlayerSkillNameFile, 0, parser.SkillNumber - 1, parser.Name);
                    SetMessageString(CampSkillExeInfoFile, 0, parser.SkillNumber - 1, parser.ShortDescription);
                    SetMessageString(CampSkillInfoFile, 0, parser.SkillNumber - 1, parser.Description);
                }
            }

            GameDataPropertyChangedEvent?.Invoke(sender, e);
        }
Beispiel #10
0
 public void ResetTileType()
 {
     this.TileType = (dynamic)this.originalValues["TileType"];
 }
Beispiel #11
0
 public TransporterTile(BaseTile originalTile, MapDataFile.TileTypes newTileType) :
     base(originalTile, newTileType)
 {
 }