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