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; }
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); }
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; }
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; }
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(); }
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); }
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); }
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; }
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(); }
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)); }
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(); }