예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }