Ejemplo n.º 1
0
        public StartPosItem(NJS_OBJECT model, string textures, float offset, Vertex position, int yrot, Device dev, EditorItemSelection selectionManager, bool Weight = false)
            : base(selectionManager)
        {
            Model     = model;
            hasWeight = Weight;

            model.ProcessVertexData();

            if (hasWeight)
            {
                Meshes = model.ProcessWeightedModel().ToArray();
            }
            else
            {
                NJS_OBJECT[] models = model.GetObjects();
                Meshes = new Mesh[models.Length];
                for (int i = 0; i < models.Length; i++)
                {
                    if (models[i].Attach != null)
                    {
                        Meshes[i] = models[i].Attach.CreateD3DMesh();
                    }
                }
            }

            texture     = textures;
            this.offset = offset;
            Position    = position;
            YRotation   = yrot;
        }
Ejemplo n.º 2
0
        public override void Render(Device dev, EditorCamera cam)
        {
            List <RenderInfo> result    = new List <RenderInfo>();
            MatrixStack       transform = new MatrixStack();

            Texture[] texs = ObjectHelper.GetTextures(texname);
            // Sky
            transform.Push();
            transform.NJTranslate(0.0f, -4000.0f, 0.0f);
            transform.NJScale(Skybox_Scale);
            result.AddRange(skytop.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, skytopmesh, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting));
            transform.Pop();
            // Bottom cloud 1
            transform.Push();
            transform.NJTranslate(0.0f, -4000.0f, 0.0f);
            transform.NJScale(24.0f, 1.0f, 26.0f);
            result.AddRange(skybottom.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, skybottommesh, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting));
            transform.Pop();
            // Bottom cloud 2
            transform.Push();
            transform.NJTranslate(0.0f, -2000.0f, 0.0f);
            transform.NJScale(24.0f, 1.0f, 26.0f);
            result.AddRange(skybottom.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, skybottommesh, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting));
            transform.Pop();
            // Egg Carrier
            transform.Push();
            carriermdl.ProcessTransforms(transform);
            carriermdl.ProcessVertexData();
            dev.SetRenderState(RenderState.ZWriteEnable, true);
            result.AddRange(carriermdl.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, ObjectHelper.GetTextures("SHOOTING0"), carriermesh, EditorOptions.IgnoreMaterialColors, EditorOptions.OverrideLighting, boundsByMesh: true));
            transform.Pop();
            RenderInfo.Draw(result, dev, cam, true);
        }
Ejemplo n.º 3
0
 public DeathZoneItem(NJS_OBJECT model, SA1CharacterFlags flags, Device device, EditorItemSelection selectionManager)
     : base(selectionManager)
 {
     Model = model;
     model.ProcessVertexData();
     Flags       = flags;
     Mesh        = Model.Attach.CreateD3DMesh(device);
     this.device = device;
 }
Ejemplo n.º 4
0
 public DeathZoneItem(NJS_OBJECT model, SA1CharacterFlags flags, Device device, EditorItemSelection selectionManager)
     : base(selectionManager)
 {
     Model = model;
     model.ProcessVertexData();
     Flags = flags;
     Mesh = Model.Attach.CreateD3DMesh(device);
     this.device = device;
 }
Ejemplo n.º 5
0
 public static Mesh[] GetMeshes(NJS_OBJECT model, Device dev)
 {
     model.ProcessVertexData();
     NJS_OBJECT[] models = model.GetObjects();
     Mesh[] Meshes = new Mesh[models.Length];
     for (int i = 0; i < models.Length; i++)
         if (models[i].Attach != null)
             Meshes[i] = models[i].Attach.CreateD3DMesh(dev);
     return Meshes;
 }
Ejemplo n.º 6
0
        public DeathZoneItem(NJS_OBJECT model, SA1CharacterFlags flags, EditorItemSelection selectionManager)
            : base(selectionManager)
        {
            Model = model;
            model.ProcessVertexData();
            Flags = flags;
            Mesh  = Model.Attach.CreateD3DMesh();

            rotateZYX = Model.RotateZYX;
            GetHandleMatrix();
        }
Ejemplo n.º 7
0
 public static Mesh[] GetMeshes(NJS_OBJECT model)
 {
     model.ProcessVertexData();
     NJS_OBJECT[] models = model.GetObjects();
     Mesh[]       Meshes = new Mesh[models.Length];
     for (int i = 0; i < models.Length; i++)
     {
         if (models[i].Attach != null)
         {
             Meshes[i] = models[i].Attach.CreateD3DMesh();
         }
     }
     return(Meshes);
 }
Ejemplo n.º 8
0
        public override void Render(Device dev, EditorCamera cam)
        {
            List <RenderInfo> result    = new List <RenderInfo>();
            MatrixStack       transform = new MatrixStack();

            transform.Push();
            Texture[] texs = ObjectHelper.GetTextures("SHOOTING0");
            carriermdl.ProcessTransforms(transform);
            carriermdl.ProcessVertexData();
            dev.SetRenderState(RenderState.ZWriteEnable, true);             // Z write is disabled for skybox by default
            result.AddRange(carriermdl.DrawModelTree(dev.GetRenderState <FillMode>(RenderState.FillMode), transform, texs, carriermesh, boundsByMesh: true));
            transform.Pop();
            RenderInfo.Draw(result, dev, cam, true);
        }
Ejemplo n.º 9
0
 public StartPosItem(NJS_OBJECT model, string textures, float offset, Vertex position, int yrot, Device dev, EditorItemSelection selectionManager)
     : base(selectionManager)
 {
     Model = model;
     model.ProcessVertexData();
     NJS_OBJECT[] models = model.GetObjects();
     Meshes = new Mesh[models.Length];
     for (int i = 0; i < models.Length; i++)
         if (models[i].Attach != null)
             Meshes[i] = models[i].Attach.CreateD3DMesh(dev);
     texture = textures;
     this.offset = offset;
     Position = position;
     YRotation = yrot;
 }
Ejemplo n.º 10
0
        public DeathZoneItem(NJS_OBJECT model, SA1CharacterFlags flags, EditorItemSelection selectionManager)
            : base(selectionManager)
        {
            Model = model;
            if (model.Attach is BasicAttach)
            {
                BasicAttach attach = (BasicAttach)model.Attach;
                if (attach.Material.Count == 0)
                {
                    attach.Material.Add(new NJS_MATERIAL());
                }
                attach.Material[0].DiffuseColor = System.Drawing.Color.FromArgb(96, 255, 0, 0);
                attach.Material[0].Flags        = 0x96102400;
            }
            model.ProcessVertexData();
            Flags = flags;

            Mesh = Model.Attach.CreateD3DMesh();

            rotateZYX = Model.RotateZYX;
            GetHandleMatrix();
        }
Ejemplo n.º 11
0
 public static LevelAnim ImportLevelAnimation(NJS_OBJECT objm, NJS_MOTION mot, EditorItemSelection selectionManager)
 {
     objm.ProcessVertexData();
     StateChanged();
     return(new LevelAnim(new GeoAnimData(objm, mot), levelAnims.Count, selectionManager));
 }
Ejemplo n.º 12
0
 private void LoadFile(string filename)
 {
     loaded = false;
     Environment.CurrentDirectory = Path.GetDirectoryName(filename);
     timer1.Stop();
     modelFile  = null;
     animation  = null;
     animations = null;
     animnum    = -1;
     animframe  = 0;
     if (ModelFile.CheckModelFile(filename))
     {
         modelFile  = new ModelFile(filename);
         outfmt     = modelFile.Format;
         model      = modelFile.Model;
         animations = new Animation[modelFile.Animations.Count];
         modelFile.Animations.CopyTo(animations, 0);
     }
     else
     {
         byte[] file = File.ReadAllBytes(filename);
         if (Path.GetExtension(filename).Equals(".prs", StringComparison.OrdinalIgnoreCase))
         {
             file = FraGag.Compression.Prs.Decompress(file);
         }
         SA_Tools.ByteConverter.BigEndian = false;
         uint?baseaddr = SA_Tools.HelperFunctions.SetupEXE(ref file);
         if (baseaddr.HasValue)
         {
             modelinfo.numericUpDown2.Value   = baseaddr.Value;
             modelinfo.numericUpDown2.Enabled = false;
             modelinfo.ComboBox1.Enabled      = false;
             modelinfo.checkBox2.Checked      = modelinfo.checkBox2.Enabled = false;
             LoadBinFile(file);
         }
         else if (Path.GetExtension(filename).Equals(".rel", StringComparison.OrdinalIgnoreCase))
         {
             SA_Tools.ByteConverter.BigEndian = true;
             SA_Tools.HelperFunctions.FixRELPointers(file);
             modelinfo.numericUpDown2.Value   = 0;
             modelinfo.numericUpDown2.Enabled = false;
             modelinfo.ComboBox1.Enabled      = false;
             modelinfo.checkBox2.Enabled      = false;
             modelinfo.checkBox2.Checked      = true;
             LoadBinFile(file);
         }
         else
         {
             using (FileTypeDialog ftd = new FileTypeDialog())
             {
                 if (ftd.ShowDialog(this) != DialogResult.OK)
                 {
                     return;
                 }
                 if (ftd.typBinary.Checked)
                 {
                     modelinfo.numericUpDown2.Enabled = true;
                     modelinfo.ComboBox1.Enabled      = true;
                     modelinfo.checkBox2.Enabled      = true;
                     LoadBinFile(file);
                 }
                 else if (ftd.typSA2MDL.Checked | ftd.typSA2BMDL.Checked)
                 {
                     ModelFormat fmt = outfmt = ModelFormat.Chunk;
                     ByteConverter.BigEndian = ftd.typSA2BMDL.Checked;
                     using (SA2MDLDialog dlg = new SA2MDLDialog())
                     {
                         int address = 0;
                         SortedDictionary <int, NJS_OBJECT> sa2models = new SortedDictionary <int, NJS_OBJECT>();
                         int i = ByteConverter.ToInt32(file, address);
                         while (i != -1)
                         {
                             sa2models.Add(i, new NJS_OBJECT(file, ByteConverter.ToInt32(file, address + 4), 0, fmt));
                             address += 8;
                             i        = ByteConverter.ToInt32(file, address);
                         }
                         foreach (KeyValuePair <int, NJS_OBJECT> item in sa2models)
                         {
                             dlg.modelChoice.Items.Add(item.Key + ": " + item.Value.Name);
                         }
                         dlg.ShowDialog(this);
                         i = 0;
                         foreach (KeyValuePair <int, NJS_OBJECT> item in sa2models)
                         {
                             if (i == dlg.modelChoice.SelectedIndex)
                             {
                                 model = item.Value;
                                 break;
                             }
                             i++;
                         }
                         if (dlg.checkBox1.Checked)
                         {
                             using (OpenFileDialog anidlg = new OpenFileDialog()
                             {
                                 DefaultExt = "bin",
                                 Filter = "Motion Files|*MTN.BIN;*MTN.PRS|All Files|*.*"
                             })
                             {
                                 if (anidlg.ShowDialog(this) == DialogResult.OK)
                                 {
                                     byte[] anifile = File.ReadAllBytes(anidlg.FileName);
                                     if (Path.GetExtension(anidlg.FileName).Equals(".prs", StringComparison.OrdinalIgnoreCase))
                                     {
                                         anifile = FraGag.Compression.Prs.Decompress(anifile);
                                     }
                                     address = 0;
                                     SortedDictionary <int, Animation> anis = new SortedDictionary <int, Animation>();
                                     i = ByteConverter.ToInt32(file, address);
                                     while (i != -1)
                                     {
                                         anis.Add(i, new Animation(file, ByteConverter.ToInt32(file, address + 4), 0, model.CountAnimated()));
                                         address += 8;
                                         i        = ByteConverter.ToInt32(file, address);
                                     }
                                     animations = new List <Animation>(anis.Values).ToArray();
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     model.ProcessVertexData();
     NJS_OBJECT[] models = model.GetObjects();
     meshes = new Mesh[models.Length];
     for (int i = 0; i < models.Length; i++)
     {
         if (models[i].Attach != null)
         {
             try { meshes[i] = models[i].Attach.CreateD3DMesh(d3ddevice); }
             catch { }
         }
     }
     treeView1.Nodes.Clear();
     nodeDict = new Dictionary <NJS_OBJECT, TreeNode>();
     AddTreeNode(model, treeView1.Nodes);
     loaded         = saveToolStripMenuItem.Enabled = exportToolStripMenuItem.Enabled = findToolStripMenuItem.Enabled = true;
     selectedObject = model;
     SelectedItemChanged();
 }