Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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>());
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
        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);
            }
        }