public void Configure() { classname = baseDescription[baseDescription.FindIndex(n => n == "classname") + 1]; targetname = baseDescription[baseDescription.FindIndex(n => n == "targetname") + 1]; target = baseDescription[baseDescription.FindIndex(n => n == "target") + 1]; // Rename an object use entity data gameObject.name = targetname + " (" + classname + ")"; // Get and apply entity position if (baseDescription.Contains("origin")) { string[] array = baseDescription[baseDescription.FindIndex(n => n == "origin") + 1].Split(new char[] { ' ' }); transform.position = new Vector3(-float.Parse(array[0]) * WorldController.WorldScale, float.Parse(array[2]) * WorldController.WorldScale, -float.Parse(array[1]) * WorldController.WorldScale); } // Load prop_*dymanic, static, physics, etc.* if (classname.Contains("prop_")) { // Get model name use entity data string modelName = baseDescription[baseDescription.FindIndex(n => n == "model") + 1]; // Load studio model and apply position Transform mdlTransform = StudioMdlLoader.LoadMdl(modelName.Replace(".mdl", "")); mdlTransform.localPosition = transform.position; // Calculate rotation for model // TODO: This is incorrect calculate. Need fix string[] array = baseDescription[baseDescription.FindIndex(n => n == "angles") + 1].Split(new char[] { ' ' }); Vector3 eulerAngles = new Vector3(float.Parse(array[2]), -float.Parse(array[1]), float.Parse(array[0])); if (baseDescription.Contains("pitch")) { eulerAngles.x = float.Parse(baseDescription [baseDescription.FindIndex(n => n == "pitch") + 1]); } mdlTransform.eulerAngles = eulerAngles; mdlTransform.transform.parent = transform; } }
private static void LoadStaticProps() { BinaryReader.BaseStream.Position = BSP_Header.lumps[35].fileofs; GameObject staticProps = new GameObject(WorldController.MapName + "_props"); int gamelumpCount = BinaryReader.ReadInt32(); dgamelump_t[] gamelumps = CRead.ReadType <dgamelump_t>((uint)gamelumpCount); for (int i = 0; i < gamelumpCount; i++) { if (gamelumps[i].id == 1936749168) { BinaryReader.BaseStream.Position = gamelumps[i].fileofs; int dictEntries = BinaryReader.ReadInt32(); string[] names = new string[dictEntries]; for (int l = 0; l < dictEntries; l++) { names[l] = new string(BinaryReader.ReadChars(128)); if (names[l].Contains(Convert.ToChar(0))) { names[l] = names[l].Remove(names[l].IndexOf(Convert.ToChar(0))); } } int leafEntries = BinaryReader.ReadInt32(); CRead.ReadType <ushort>((uint)leafEntries); int nStaticProps = BinaryReader.ReadInt32(); for (int l = 0; l < nStaticProps; l++) { StaticPropLumpV4_t StaticPropLump_t = CRead.ReadType <StaticPropLumpV4_t>(); switch (gamelumps[i].version) { case 5: CRead.ReadType <StaticPropLumpV5_t>(); break; case 6: CRead.ReadType <StaticPropLumpV6_t>(); break; case 7: CRead.ReadType <StaticPropLumpV7_t>(); break; case 8: CRead.ReadType <StaticPropLumpV8_t>(); break; case 9: CRead.ReadType <StaticPropLumpV9_t>(); break; case 10: CRead.ReadType <StaticPropLumpV10_t>(); break; } // Load studio model and apply position Transform mdlTransform = StudioMdlLoader.LoadMdl(names[StaticPropLump_t.m_PropType].Replace(".mdl", "")); mdlTransform.localPosition = WorldController.SwapZY(StaticPropLump_t.m_Origin) * WorldController.WorldScale; // Calculate rotation for model Vector3 mdlRotation = new Vector3(StaticPropLump_t.m_Angles.z, -StaticPropLump_t.m_Angles.y, StaticPropLump_t.m_Angles.x); mdlTransform.eulerAngles = mdlRotation; mdlTransform.parent = staticProps.transform; } } } }