IList <StateTransitionsTreeElement> GetData()
    {
        PS1PersoBehaviour pb = (PS1PersoBehaviour)target;
        List <StateTransitionsTreeElement> tr = new List <StateTransitionsTreeElement>();

        tr.Add(new StateTransitionsTreeElement("Hidden root", -1, -1));

        BasePersoBehaviour.StateTransition[] transitions = pb.GetStateTransitions(pb.currentState);
        if (transitions != null)
        {
            int id = 0;
            foreach (var t in transitions)
            {
                tr.Add(new StateTransitionsTreeElement("State transition " + t.TargetStateName, 0, id)
                {
                    stateToGoName    = t.StateToGoName,
                    stateToGoIndex   = t.StateToGoIndex,
                    targetStateName  = t.TargetStateName,
                    targetStateIndex = t.TargetStateIndex,
                    linkingType      = t.LinkingType
                });
                id++;
            }
        }
        return(tr);
    }
    void InitTransitionsTreeIfNeeded(Rect transitionsRect, PS1PersoBehaviour target)
    {
        if (treeViewStateTransitions == null || treeviewStateTransitionsState == null || treeViewStateTransitions.persoPS1 != target)
        {
            treeviewStateTransitionsState = new TreeViewState();

            bool firstInit   = m_MultiColumnHeaderState == null;
            var  headerState = StateTransitionsTreeView.CreateDefaultMultiColumnHeaderState(transitionsRect.width);
            if (MultiColumnHeaderState.CanOverwriteSerializedFields(m_MultiColumnHeaderState, headerState))
            {
                MultiColumnHeaderState.OverwriteSerializedFields(m_MultiColumnHeaderState, headerState);
            }
            m_MultiColumnHeaderState = headerState;

            var multiColumnHeader = new MultiColumnHeader(headerState);
            if (firstInit)
            {
                multiColumnHeader.ResizeToFit();
            }

            var treeModel = new TreeModel <StateTransitionsTreeElement>(GetData());

            treeViewStateTransitions = new StateTransitionsTreeView(treeviewStateTransitionsState, multiColumnHeader, treeModel)
            {
                persoPS1   = target,
                stateIndex = target.stateIndex,
            };
        }
    }
Example #3
0
        public PS1PersoBehaviour GetGameObject(GameObject gao)
        {
            LevelHeader h = (Load as R2PS1Loader).levelHeader;

            if (FileSystem.mode == FileSystem.Mode.Web)
            {
                gao.name = name;
            }
            else
            {
                gao.name = name + " | " + gao.name;
            }
            if (p3dData?.family?.name != null)
            {
                gao.name = $"[{p3dData?.family?.name}] {gao.name}";
            }
            PS1PersoBehaviour romPerso = gao.AddComponent <PS1PersoBehaviour>();

            romPerso.perso      = this;
            romPerso.controller = MapLoader.Loader.controller;
            romPerso.controller.ps1Persos.Add(romPerso);
            return(romPerso);
        }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        PS1PersoBehaviour pb = (PS1PersoBehaviour)target;

        pb.stateIndex = EditorGUILayout.Popup(pb.stateIndex, pb.stateNames);

        /*if (pb.perso != null && pb.perso.p3dData != null) {
         *  GUILayout.Label("S0: " + pb.perso.p3dData.off_stateInitial);
         *  GUILayout.Label("S1: " + pb.perso.p3dData.off_stateCurrent);
         *  GUILayout.Label("S2: " + pb.perso.p3dData.off_state2);
         * }*/

        GUILayout.BeginVertical();

        /*byte updateCheckByte = pb.perso.stdGame.updateCheckByte;
         * GUILayout.Label("StdGame: " + pb.perso.stdGame.offset.ToString());
         * GUILayout.Label("StdGame.UpdateByte: " + Convert.ToString(updateCheckByte, 2).PadLeft(8, '0'));
         * bool consideredOnScreen = (updateCheckByte & (1 << 5)) != 0;
         * bool consideredTooFarAway = (updateCheckByte & (1 << 7)) != 0;
         * GUILayout.Label("Considered on screen (bit 5): " + consideredOnScreen);
         * GUILayout.Label("Considered too far away (bit 7): " + consideredTooFarAway);
         * GUILayout.Label("State custom bits: " + Convert.ToString(pb.state.customStateBits, 2).PadLeft(8, '0'));*/

        /* // Only enable when working on morph data, it prevents from using the buttons properly otherwise
         * if (pb.a3d != null && pb.morphDataArray != null) {
         * for (int i = 0; i < pb.a3d.num_channels; i++) {
         * AnimMorphData currentMorphData = pb.morphDataArray[i, pb.currentFrame];
         *
         * if (currentMorphData != null) {
         *  GUILayout.Label("MorphData[" + i + "," + pb.currentFrame + "]: Morph to " + currentMorphData.objectIndexTo + ", progress " + currentMorphData.morphProgress);
         * }
         * }
         * }*/
        GUILayout.EndVertical();

        GUILayout.BeginHorizontal();
        GUI.enabled = pb.currentState > 0;
        if (GUILayout.Button("Previous state"))
        {
            pb.SetState(pb.currentState - 1);
        }
        GUI.enabled = (pb.stateNames != null && pb.currentState < pb.stateNames.Length - 1);
        if (GUILayout.Button("Next state"))
        {
            pb.SetState(pb.currentState + 1);
        }
        GUI.enabled = true;
        GUILayout.EndHorizontal();

        if (pb.IsLoaded)
        {
            Rect rect = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, 100f);
            InitTransitionsTreeIfNeeded(rect, pb);
            if (treeViewStateTransitions.stateIndex != pb.currentState ||
                treeViewStateTransitions.persoPS1 != pb)
            {
                treeViewStateTransitions.persoPS1   = pb;
                treeViewStateTransitions.stateIndex = pb.currentState;
                treeViewStateTransitions.treeModel.SetData(GetData());
                treeViewStateTransitions.Reload();
            }
            treeViewStateTransitions.OnGUI(rect);
        }

        //if (GUILayout.Button("Print scripts")) pb.PrintScripts();
        //if (GUILayout.Button("Print translated scripts")) pb.PrintTranslatedScripts();
        if (GUILayout.Button("Print Animation Debug Info"))
        {
            pb.PrintAnimationDebugInfo();
        }
    }
Example #5
0
        public GameObject GetGameObject()
        {
            GameObject gao = new GameObject(type + " @ " + Offset);

            if (FileSystem.mode == FileSystem.Mode.Web)
            {
                gao.name = type.ToString();
            }

            SuperObjectComponent soc = gao.AddComponent <SuperObjectComponent>();

            gao.layer = LayerMask.NameToLayer("SuperObject");
            soc.soPS1 = this;
            MapLoader.Loader.controller.superObjects.Add(soc);

            if (type != Type.IPO)
            {
                matrix1?.Apply(gao);
            }

            /*if (.Value != null) {
             *      if (data.Value is PhysicalObject) {
             *              PhysicalObjectComponent poc = ((PhysicalObject)data.Value).GetGameObject(gao);
             *      } else if (data.Value is Sector) {
             *              SectorComponent sc = ((Sector)data.Value).GetGameObject(gao);
             *      }
             * }*/
            if (type == Type.IPO)
            {
                PhysicalObjectComponent poc = gao.AddComponent <PhysicalObjectComponent>();
                LevelHeader             h   = (Load as R2PS1Loader).levelHeader;
                int ind = (dataIndex >> 1);
                if (ind >= h.geometricObjectsStatic.entries.Length)
                {
                    throw new Exception("IPO SO data index was too high! " + h.geometricObjectsStatic.entries.Length + " - " + dataIndex);
                }
                gao.name = gao.name + " - " + ind;
                GameObject g = h.geometricObjectsStatic.GetGameObject(ind, null, out _);
                if (g != null)
                {
                    poc.visual = g;
                    g.transform.SetParent(gao.transform);
                    g.transform.localPosition = Vector3.zero;
                    g.transform.localRotation = Quaternion.identity;
                }
                if (h.ipoCollision != null && h.ipoCollision.Length > ind)
                {
                    GameObject c = h.ipoCollision[ind].GetGameObject();
                    if (c != null)
                    {
                        poc.collide = c;
                        c.transform.SetParent(gao.transform);
                        c.transform.localPosition = Vector3.zero;
                        c.transform.localRotation = Quaternion.identity;
                    }
                }
                poc.Init(MapLoader.Loader.controller);
            }
            else if (type == Type.Perso)
            {
                LevelHeader h = (Load as R2PS1Loader).levelHeader;
                if (dataIndex >= h.persos.Length)
                {
                    throw new Exception("Perso SO data index was too high! " + h.persos.Length + " - " + dataIndex);
                }
                gao.name = gao.name + " - " + dataIndex;
                PS1PersoBehaviour ps1Perso = h.persos[dataIndex].GetGameObject(gao);
                ps1Perso.superObject = this;
            }
            else if (type == Type.Sector)
            {
                LevelHeader h = (Load as R2PS1Loader).levelHeader;
                if (dataIndex >= h.sectors.Length)
                {
                    throw new Exception("Sector SO data index was too high! " + h.sectors.Length + " - " + dataIndex);
                }
                gao.name = gao.name + " - " + dataIndex;
                SectorComponent sect = h.sectors[dataIndex].GetGameObject(gao);
            }
            if (children != null)
            {
                foreach (SuperObject so in children)
                {
                    if (so != null)
                    {
                        GameObject soGao = so.GetGameObject();
                        if (soGao != null)
                        {
                            soc.Children.Add(soGao.GetComponent <SuperObjectComponent>());
                            soGao.transform.SetParent(gao.transform);
                            if (so.type != Type.IPO)
                            {
                                so.matrix1?.Apply(soGao);
                            }
                            else
                            {
                                soGao.transform.localPosition = Vector3.zero;
                                soGao.transform.localRotation = Quaternion.identity;
                            }
                        }
                    }
                }
            }
            return(gao);
        }