public Event.TEvent createEvent(int id, World world, int x, int y) { if (cloneableEvents.ContainsKey(id)) { Event.TEvent evt = null; if (cloneableEvents[id].IsSubclassOf(typeof(Event.IndependentEvent))) { evt = (Event.TEvent)Activator.CreateInstance(cloneableEvents[id], world, x, y); } else { evt = (Event.TEvent)Activator.CreateInstance(cloneableEvents[id]); } return(evt); } return(null); }
public static TileMapInfo fromStream(Level level, Stream stream, TileSet ts) { BinaryReader reader = new BinaryReader(stream); int w = reader.ReadInt32(), h = reader.ReadInt32(); List <Event.EventTile> eventTiles = new List <Event.EventTile>(); TileMap map = new TileMap(w, h, ts); for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { int data = reader.ReadInt32(); if ((data & 1 << 31) == 1 << 31) { TileData buffer = new TileData(data); bool flipped = false; data = data ^ 1 << 31; // additional data byte flags = reader.ReadByte(); if ((flags & 1 << 0) == 1 << 0) { flipped = true; buffer = new ExtendedTileData(data, flipped); } if ((flags & 1 << 6) == 1 << 6) { Event.TEvent[] events = null; if ((flags & 1 << 7) == 1 << 7) { int count = reader.ReadInt32(); events = new Event.TEvent[count]; for (int i = 0; i < count; i++) { events[i] = level.TileManager.createEvent(reader.ReadInt32(), level.World, x, y); events[i].getSBCompound().readCompound(reader); } } int idscount = reader.ReadInt32(); List <int> ids = new List <int>(); for (int i = 0; i < idscount; i++) { ids.Add(reader.ReadInt32()); } int interval = reader.ReadInt32(); bool pingpong = reader.ReadBoolean(); TileAnimation anim = new TileAnimation(ids.ToArray(), interval, pingpong, flipped, x, y, events); buffer = anim; eventTiles.Add(anim); } else if ((flags & 1 << 7) == 1 << 7) { int count = reader.ReadInt32(); Event.TEvent[] events = new Event.TEvent[count]; for (int i = 0; i < count; i++) { events[i] = level.TileManager.createEvent(reader.ReadInt32(), level.World, x, y); events[i].getSBCompound().readCompound(reader); } Event.EventTile evT = new Event.EventTile(data, flipped, x, y, events /*events...*/); buffer = evT; eventTiles.Add(evT); } map.setTile(x, y, buffer); } else { map.setTile(x, y, new TileData(data)); } } } if (h == 0 || w == 0) { map = new TileMap(1, 1, ts); } TileMapInfo info = new TileMapInfo(map) { XScrollSpeed = reader.ReadSingle(), YScrollSpeed = reader.ReadSingle(), AutoXSpeed = reader.ReadSingle(), AutoYSpeed = reader.ReadSingle(), WidthWrap = reader.ReadBoolean(), HeightWrap = reader.ReadBoolean(), EventTiles = eventTiles.ToArray() }; return(info); }