public SceneDataLoader(string fileName, WWorld world) { m_world = world; if (m_sActorDescriptors == null) { // Load the Actor Descriptors from disk. m_sActorDescriptors = new List <MapActorDescriptor>(); foreach (var file in Directory.GetFiles("resources/templates/")) { MapActorDescriptor descriptor = JsonConvert.DeserializeObject <MapActorDescriptor>(File.ReadAllText(file)); m_sActorDescriptors.Add(descriptor); } } m_reader = new EndianBinaryReader(File.ReadAllBytes(fileName), System.Text.Encoding.ASCII, Endian.Big); m_chunkList = new List <ChunkHeader>(); int chunkCount = m_reader.ReadInt32(); for (int i = 0; i < chunkCount; i++) { string fourCC = m_reader.ReadString(4); MapLayer layer = ChunkHeader.FourCCToLayer(ref fourCC); ChunkHeader chunk = new ChunkHeader(fourCC, m_reader.ReadInt32(), m_reader.ReadInt32()); chunk.Layer = layer; m_chunkList.Add(chunk); } var sortedList = m_chunkList.OrderBy(x => x.ChunkOffset); m_chunkList = new List <ChunkHeader>(sortedList); }
public SceneDataLoader(string fileName, WWorld world) { m_world = world; m_reader = new EndianBinaryReader(File.ReadAllBytes(fileName), System.Text.Encoding.ASCII, Endian.Big); m_chunkList = new List <ChunkHeader>(); int chunkCount = m_reader.ReadInt32(); for (int i = 0; i < chunkCount; i++) { string fourCC = m_reader.ReadString(4); MapLayer layer = ChunkHeader.FourCCToLayer(ref fourCC); FourCC enumFourCC = FourCCConversion.GetEnumFromString(fourCC); ChunkHeader chunk = new ChunkHeader(enumFourCC, m_reader.ReadInt32(), m_reader.ReadInt32()); chunk.Layer = layer; m_chunkList.Add(chunk); } var sortedList = m_chunkList.OrderBy(x => x.ChunkOffset); m_chunkList = new List <ChunkHeader>(sortedList); }
public void CreateEntity() { if (!EditorSelection.SingleObjectSelected) { return; } WDOMNode selected = EditorSelection.PrimarySelectedObject; SerializableDOMNode newNode = null; if (selected is SerializableDOMNode) { SerializableDOMNode origNode = selected as SerializableDOMNode; Type selType = selected.GetType(); newNode = (SerializableDOMNode)Activator.CreateInstance(selType, origNode.FourCC, m_world); newNode.PostLoad(); newNode.SetParent(selected.Parent); if (origNode.Parent is WDOMLayeredGroupNode) { newNode.Layer = origNode.Layer; } } else if (selected is WDOMLayeredGroupNode) { WDOMLayeredGroupNode lyrNode = selected as WDOMLayeredGroupNode; Type newObjType = null; if (lyrNode.FourCC >= FourCC.ACTR && lyrNode.FourCC <= FourCC.ACTb) { newObjType = typeof(Actor); } else if (lyrNode.FourCC >= FourCC.SCOB && lyrNode.FourCC <= FourCC.SCOb) { newObjType = typeof(ScaleableObject); } else if (lyrNode.FourCC >= FourCC.TRES && lyrNode.FourCC <= FourCC.TREb) { newObjType = typeof(TreasureChest); } string unlayedFourCC = lyrNode.FourCC.ToString(); MapLayer layer = ChunkHeader.FourCCToLayer(ref unlayedFourCC); FourCC enumVal = FourCCConversion.GetEnumFromString(unlayedFourCC); newNode = (SerializableDOMNode)Activator.CreateInstance(newObjType, enumVal, m_world); newNode.Layer = layer; newNode.PostLoad(); newNode.SetParent(lyrNode); } else if (selected is WDOMGroupNode) { WDOMGroupNode grpNode = selected as WDOMGroupNode; if (grpNode.FourCC == FourCC.ACTR || grpNode.FourCC == FourCC.SCOB || grpNode.FourCC == FourCC.TRES) { return; } Type newObjType = FourCCConversion.GetTypeFromEnum(grpNode.FourCC); newNode = (SerializableDOMNode)Activator.CreateInstance(newObjType, grpNode.FourCC, m_world); newNode.PostLoad(); newNode.SetParent(grpNode); } else { return; } if (newNode != null) { EditorSelection.ClearSelection(); EditorSelection.AddToSelection(newNode); } // ToDo: This can spawn specific classes the same way that the actor loader does. }