private void OBJToFSOM(OBJ obj) { GameThread.NextUpdate(x => { var mesh = new DGRP3DMesh(ActiveDGRP, obj, Client.GameFacade.GraphicsDevice); if (IffMode) { var fsom = ActiveObject.Resource.Get <FSOM>(ActiveDGRP.ChunkID); if (fsom == null) { fsom = new FSOM(); fsom.ChunkLabel = "OBJ Import Mesh"; fsom.ChunkID = ActiveDGRP.ChunkID; fsom.ChunkProcessed = true; fsom.ChunkType = "FSOM"; fsom.AddedByPatch = true; (ActiveObject.Resource.Sprites ?? ActiveObject.Resource.MainIff).AddChunk(fsom); } Content.Content.Get().Changes.QueueResMod(new ResAction(() => { fsom.SetMesh(mesh); Content.Content.Get().RCMeshes.ClearCache(ActiveDGRP); Debug3D.ForceUpdate(); }, fsom)); } else { Content.Content.Get().RCMeshes.Replace(ActiveDGRP, mesh); Debug3D.ForceUpdate(); } }); }
private void DGRPList_SelectedIndexChanged(object sender, EventArgs e) { if (DGRPList.SelectedIndices.Count == 0 || !DGRPChunkIDs.ContainsKey(DGRPList.SelectedItems[0])) { return; } ActiveDGRP = ActiveIff.Get <DGRP>(DGRPChunkIDs[DGRPList.SelectedItems[0]]); if (ActiveDGRP != null) { //change selected graphic Debug3D.ChangeGraphic(ActiveDGRP.ChunkID); //UpdateImage(); } SetCustomMode(false); }
public void SetActiveObject(GameObject active) { ActiveObject = active; ActiveIff = active.Resource; ActiveDGRP = null; Debug3D.ShowObject(active.OBJ.GUID); UpdateDGRPList(true); var allowEdit = (ActiveObject.OBJ.ObjectType != OBJDType.Person); DGRPBox.Enabled = allowEdit; var lower = active.OBJ.ChunkParent.Filename.ToLowerInvariant(); if (!DGRP3DMesh.ParamsByIff.TryGetValue(lower, out ActiveParams)) { ActiveParams = new DGRPRCParams(); } ActiveFSOR = ActiveIff.List <FSOR>()?.FirstOrDefault(); InternalChange = true; if (ActiveFSOR == null) { IffMode = false; } else { IffMode = true; ActiveParams = ActiveFSOR.Params; } SimpleCheck.Checked = ActiveParams.Simplify; DoorCheck.Checked = ActiveParams.DoorFix; CounterCheck.Checked = ActiveParams.CounterFix; BlenderCheck.Checked = ActiveParams.BlenderTweak; Rot1.Checked = ActiveParams.Rotations[0]; Rot2.Checked = ActiveParams.Rotations[1]; Rot3.Checked = ActiveParams.Rotations[2]; Rot4.Checked = ActiveParams.Rotations[3]; IffCheck.Checked = IffMode; InternalChange = false; }
private void UpdateFSOR(object sender, EventArgs e) { if (InternalChange) { return; } GameContent.Get.Changes.QueueResMod(new ResAction(() => { UpdateParams(); if (!IffMode) { var lower = ActiveObject.OBJ.ChunkParent.Filename.ToLowerInvariant(); DGRP3DMesh.ParamsByIff[lower] = ActiveParams; } GameContent.Get.RCMeshes.ClearCache(ActiveDGRP); Debug3D.ForceUpdate(); }, ActiveFSOR)); }
private void ImportButton_Click(object sender, EventArgs e) { var dialog = new OpenFileDialog { Title = "Select an OBJ file." }; FolderOpen(dialog); var dgrp = ActiveDGRP; try { Stream str; if ((str = dialog.OpenFile()) != null) { var obj = new OBJ(str); //identify and copy replacement textures //only happens when this iff doesnt have a 3d model foreach (var mtl in obj.FacesByObjgroup.Keys) { var split = mtl.Split('_'); if (split.Length < 3 || split[1] == "SPR" || split[0] == "DEPTH") { continue; } var baseDir = Path.GetDirectoryName(dialog.FileName); var copyname = "TEX_" + split[2] + ".png"; if (IffMode) { var texID = ushort.Parse(split[2]); var tex = ActiveObject.Resource.Get <MTEX>(texID); if (tex == null) { tex = new MTEX { ChunkLabel = "OBJ Import Texture", ChunkID = texID, ChunkProcessed = true, ChunkType = "MTEX", AddedByPatch = true }; (ActiveObject.Resource.Sprites ?? ActiveObject.Resource.MainIff).AddChunk(tex); } GameContent.Get.Changes.BlockingResMod(new ResAction(() => { tex.SetData(File.ReadAllBytes(Path.Combine(baseDir, copyname))); }, tex)); } else { var texname = ActiveDGRP.ChunkParent.Filename.Replace('.', '_').Replace("spf", "iff") + "_"; texname += copyname; File.Copy(Path.Combine(baseDir, copyname), Path.Combine(FSOEnvironment.ContentDir, "MeshReplace/", texname), true); } } GameThread.NextUpdate(x => { var mesh = new DGRP3DMesh(ActiveDGRP, obj, Client.GameFacade.GraphicsDevice); if (IffMode) { var fsom = ActiveObject.Resource.Get <FSOM>(ActiveDGRP.ChunkID); if (fsom == null) { fsom = new FSOM { ChunkLabel = "OBJ Import Mesh", ChunkID = ActiveDGRP.ChunkID, ChunkProcessed = true, ChunkType = "FSOM", AddedByPatch = true }; (ActiveObject.Resource.Sprites ?? ActiveObject.Resource.MainIff).AddChunk(fsom); } GameContent.Get.Changes.QueueResMod(new ResAction(() => { fsom.SetMesh(mesh); GameContent.Get.RCMeshes.ClearCache(ActiveDGRP); Debug3D.ForceUpdate(); }, fsom)); } else { GameContent.Get.RCMeshes.Replace(ActiveDGRP, mesh); Debug3D.ForceUpdate(); } }); str.Close(); } } catch (Exception) { } }
private void Awake() { Instance = this; }