/// /// Read entity data from all layers in a .lvl file. /// Callbacks are used so that the caller can handle the creation /// of new layers and instantiate new game objects using the entity /// data from the file. /// public bool ReadAll( Action <LvlLayer> create_layer_callback, Action <LvlEntity, Vector2Int> create_entity_callback, out LvlHeader header) { if (!TryReadHeader(out header)) { return(false); } for (int layer = 0; layer < header.layers; layer++) { create_layer_callback(ReadLayer()); for (int i = 0; i < header.width; i++) { for (int j = 0; j < header.height; j++) { var pos = new Vector2Int(i, j); var entity = ReadEntity(); if (entity.empty) { // Don't invoke callback unless there is data continue; } create_entity_callback(entity, pos); } } } return(true); }
public bool WriteHeader(LvlHeader header) { if (!ValidState(State.Header)) { return(false); } writer.Write(LvlHeader.SIGNATURE_VERSION); writer.Write(header.layers); writer.Write(header.palette); writer.Write(header.width); writer.Write(header.height); writer.Write(header.camera.x); writer.Write(header.camera.y); writer.Write(header.camera.z); writer.Write(header.camera.ortho_size); writer.Write(header.camera.set_color); writer.Write(header.camera.r); writer.Write(header.camera.g); writer.Write(header.camera.b); writer.Write(header.name); writer.Write(header.author); state = State.Layer; return(true); }
public bool TryReadHeader(out LvlHeader header) { header = new LvlHeader(); int sign = reader.ReadInt32(); if (sign != (LvlHeader.SIGNATURE_VERSION)) { Debug.LogErrorFormat("[lvl2d] Incompatible version {0:X8}", sign); return(false); } header.layers = reader.ReadUInt16(); header.palette = reader.ReadUInt16(); header.width = reader.ReadUInt16(); header.height = reader.ReadUInt16(); header.camera = new LvlHeader.Camera() { x = reader.ReadSingle(), y = reader.ReadSingle(), z = reader.ReadSingle(), ortho_size = reader.ReadSingle(), set_color = reader.ReadBoolean(), r = reader.ReadByte(), g = reader.ReadByte(), b = reader.ReadByte() }; header.name = reader.ReadString(); header.author = reader.ReadString(); return(true); }
public bool WriteAll( LvlHeader header, Func <int, LvlLayer> layer_callback, Func <int, Vector2Int, GameObject> entity_callback, Func <GameObject, int> find_palette_index_callback) { if (!WriteHeader(header)) { return(false); } int map_size = header.width * header.height; for (int layer = 0; layer < header.layers; layer++) { if (!WriteLayer(layer_callback(layer))) { return(false); } for (int i = 0; i < header.width; i++) { for (int j = 0; j < header.height; j++) { var entity = entity_callback(layer, new Vector2Int(i, j)); int palette_index; if (entity) { palette_index = find_palette_index_callback(entity); } else { palette_index = -1; } if (!WriteEntity(entity, palette_index, map_size)) { return(false); } } } } return(true); }