static void CreateRobotModels() { if (ClassicRobots != null) { return; } if (!ClassicInit()) { throw new Exception("Missing classic data"); } ClassicRobots = new List <GameObject>(); for (int ri = 0; ri < ClassicData.N_robot_types; ri++) { var go = GameObject.CreatePrimitive(PrimitiveType.Quad); //int n = gameObject.name[gameObject.name.Length - 2] - '0'; //Debug.Log(n); PolyModel model = ClassicData.PolygonModels[ClassicData.RobotInfo[ri].model_num]; var r = new BinaryReader(new MemoryStream(model.data)); tris = new List <int> [model.n_textures]; for (int i = 0; i < model.n_textures; i++) { tris[i] = new List <int>(); } DumpModelData(r); var mesh = new Mesh(); mesh.vertices = uPoints.Select(x => x.p.ToVector3()).ToArray(); mesh.normals = uPoints.Select(x => x.norm.ToVector3()).ToArray(); mesh.uv = uPoints.Select(x => new Vector2(x.uvl.u.ToFloat(), x.uvl.v.ToFloat())).ToArray(); mesh.subMeshCount = model.n_textures; for (int i = 0; i < model.n_textures; i++) { mesh.SetTriangles(tris[i].ToArray(), i); } var filt = go.GetComponent <MeshFilter>(); filt.mesh = mesh; var rend = go.GetComponent <MeshRenderer>(); //Debug.Log("rend"); //Debug.Log(rend); var mats = new Material[model.n_textures]; for (int i = 0; i < model.n_textures; i++) { mats[i] = MkMat(ClassicData.ObjBitmaps[ClassicData.ObjBitmapPtrs[model.first_texture + i]].index); } rend.materials = mats; UnityEngine.Object.DontDestroyOnLoad(go); ClassicRobots.Add(go); } }
static void CreateRobotModels() { if (ClassicRobots != null) { return; } MyInit(); ClassicRobots = new List <GameObject>(); for (int ri = 0; ri < ClassicData.N_robot_types; ri++) { var go = new GameObject(); go.SetActive(false); var filt = go.AddComponent <MeshFilter>(); var rend = go.AddComponent <MeshRenderer>(); var spCol = go.AddComponent <SphereCollider>(); //int n = gameObject.name[gameObject.name.Length - 2] - '0'; //Debug.Log(n); PolyModel model = ClassicData.PolygonModels[ClassicData.RobotInfo[ri].model_num]; spCol.radius = model.rad.ToFloat(); int matCount = model.n_textures + 2; // allow 2 flat color materials var r = new BinaryReader(new MemoryStream(model.data)); tris = new List <int> [matCount]; for (int i = 0; i < matCount; i++) { tris[i] = new List <int>(); } var flatColors = new List <int>(); DumpModelData(r, flatColors, model.n_textures); Debug.Log("robot " + ri + " flatcolors " + flatColors.Count + " " + string.Join(", ", flatColors.Select(x => x.ToString("X")).ToArray())); matCount = model.n_textures + flatColors.Count; // use actual number of flat colors var mesh = new Mesh(); mesh.vertices = uPoints.Select(x => x.p.ToVector3()).ToArray(); mesh.normals = uPoints.Select(x => x.norm.ToVector3()).ToArray(); mesh.uv = uPoints.Select(x => new Vector2(x.uvl.u.ToFloat(), x.uvl.v.ToFloat())).ToArray(); mesh.subMeshCount = matCount; for (int i = 0; i < matCount; i++) { mesh.SetTriangles(tris[i].ToArray(), i); } filt.mesh = mesh; //var rend = go.GetComponent<MeshRenderer>(); //Debug.Log("rend"); //Debug.Log(rend); var mats = new Material[matCount]; for (int i = 0; i < model.n_textures; i++) { mats[i] = MkMat(ClassicData.ObjBitmaps[ClassicData.ObjBitmapPtrs[model.first_texture + i]].index, -1); } for (int i = 0; i < flatColors.Count; i++) { mats[model.n_textures + i] = MkMat(-1, flatColors[i]); } rend.materials = mats; UnityEngine.Object.DontDestroyOnLoad(go); ClassicRobots.Add(go); } }