public IffResWindow OpenResourceWindow(GameIffResource res, GameObject target) { if (ResourceWindow.ContainsKey(res.MainIff)) { var resWindow = ResourceWindow[res.MainIff]; var form = (Form)resWindow; if (form.WindowState == FormWindowState.Minimized) { form.WindowState = FormWindowState.Normal; } resWindow.Activate(); resWindow.SetTargetObject(target); return(resWindow); } //detect if object, spawn iff res if not. //WARNING: if OBJD missing or present in files it should not be, bad things will happen! IffResWindow window; var objs = res.List <OBJD>(); if (objs != null && objs.Count > 0 && res is GameObjectResource) { window = new ObjectWindow(res, (target == null) ? GameContent.Get.WorldObjects.Get(objs[0].GUID) : target); } else { window = new IffResourceViewer(res.MainIff.Filename, res, target); } ResourceWindow.Add(res.MainIff, window); window.Show(); window.Activate(); return(window); }
public IffResWindow OpenResourceWindow(GameIffResource res, GameObject target) { if (ResourceWindow.ContainsKey(res.MainIff)) { var resWindow = ResourceWindow[res.MainIff]; var form = (Form)resWindow; if (form.WindowState == FormWindowState.Minimized) form.WindowState = FormWindowState.Normal; resWindow.Activate(); resWindow.SetTargetObject(target); return resWindow; } //detect if object, spawn iff res if not. //WARNING: if OBJD missing or present in files it should not be, bad things will happen! IffResWindow window; var objs = res.List<OBJD>(); if (objs != null && objs.Count > 0) { window = new ObjectWindow(res, (target == null) ? Content.Content.Get().WorldObjects.Get(objs[0].GUID) : target); } else { window = new IffResourceViewer(res.MainIff.Filename, res, target); } ResourceWindow.Add(res.MainIff, window); window.Show(); window.Activate(); return window; }
public List <T> GetAllResource <T>(ScopeSource source) { switch (source) { case ScopeSource.Private: return((Resource is GameGlobalResource)? new List <T>():Resource.List <T>()); case ScopeSource.SemiGlobal: return((Resource.SemiGlobal == null) ? new List <T>():Resource.SemiGlobal.List <T>()); case ScopeSource.Global: return(EditorScope.Globals.Resource.List <T>()); default: return(new List <T>()); } }
public bool RegenObjMeta(GameIffResource res) { var objd = res.List <OBJD>(); var entries = new List <ObjectRegistryEntry>(); foreach (var obj in objd) { var entry = new ObjectRegistryEntry { GUID = obj.GUID, Filename = res.MainIff.Filename, Name = obj.ChunkLabel, Group = (short)obj.MasterID, SubIndex = obj.SubIndex }; entries.Add(entry); } if (entries.Count == 0) { return(false); } entries = entries.OrderBy(x => x.SubIndex).OrderBy(x => x.Group).ToList(); var GUID = (ActiveObj == null) ? 0 : ActiveObj.OBJ.GUID; //populate object selected box with options ObjCombo.Items.Clear(); int i = 0; foreach (var item in entries) { ObjCombo.Items.Add(item); if (item.GUID == GUID) { ObjCombo.SelectedIndex = i; } i++; } if (ObjCombo.SelectedIndex == -1) { ObjCombo.SelectedIndex = 0; } Text = "Edit Object - " + ActiveObjTable.Filename; return(true); }
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; }
public bool RegenObjMeta(GameIffResource res) { var objd = res.List<OBJD>(); var entries = new List<ObjectRegistryEntry>(); foreach (var obj in objd) { ObjectRegistryEntry entry = new ObjectRegistryEntry { GUID = obj.GUID, Filename = res.MainIff.Filename, Name = obj.ChunkLabel, Group = (short)obj.MasterID, SubIndex = obj.SubIndex }; entries.Add(entry); } if (entries.Count == 0) return false; entries = entries.OrderBy(x => x.SubIndex).OrderBy(x => x.Group).ToList(); var GUID = (ActiveObj == null) ? 0 : ActiveObj.OBJ.GUID; //populate object selected box with options ObjCombo.Items.Clear(); int i = 0; foreach (var item in entries) { ObjCombo.Items.Add(item); if (item.GUID == GUID) ObjCombo.SelectedIndex = i; i++; } if (ObjCombo.SelectedIndex == -1) ObjCombo.SelectedIndex = 0; Text = "Edit Object - " + ActiveObjTable.Filename; return true; }
public void UpdateDGRPList(bool selectBase) { DGRPChunkIDs = new Dictionary <ListViewItem, ushort>(); var baseList = ActiveIff.List <DGRP>(); if (baseList == null) { DGRPList.Items.Clear(); return; } var dgrps = baseList.OrderBy(x => x.ChunkID); var oldIndex = (DGRPList.SelectedIndices.Count == 0) ? -1 : DGRPList.SelectedIndices[0]; DGRPList.Items.Clear(); var baseG = -1; var lastG = -1; foreach (var dgrp in dgrps) { var relativeIndex = dgrp.ChunkID - ActiveObject.OBJ.BaseGraphicID; bool notUsed = relativeIndex < 0 || relativeIndex >= ActiveObject.OBJ.NumGraphics; var listItem = new ListViewItem(new string[] { (notUsed) ? ("(" + relativeIndex + ")") : relativeIndex.ToString(), dgrp.ChunkLabel }); if (relativeIndex == 0) { baseG = DGRPList.Items.Count; listItem.BackColor = Color.LightSeaGreen; } else if (relativeIndex == ActiveObject.OBJ.NumGraphics - 1) { listItem.BackColor = Color.LightSalmon; } if (notUsed) { listItem.BackColor = Color.LightGray; } else { lastG = DGRPList.Items.Count; } DGRPList.Items.Add(listItem); DGRPChunkIDs.Add(listItem, dgrp.ChunkID); } if (baseG != -1) { if (selectBase || oldIndex == -1) { DGRPList.Items[baseG].Selected = true; if (lastG > -1) { DGRPList.EnsureVisible(lastG); } } } if (!selectBase && oldIndex != -1) { var newInd = Math.Min(oldIndex, DGRPList.Items.Count - 1); DGRPList.Items[newInd].Selected = true; DGRPList.EnsureVisible(newInd); } }