Пример #1
0
    void InitDsgVarsTreeIfNeeded(Rect transitionsRect, DsgVarComponent target)
    {
        if (treeviewDsgVars == null || treeviewDsgVarsState == null || treeviewDsgVars.target != target)
        {
            treeviewDsgVarsState = new TreeViewState();

            bool firstInit   = m_MultiColumnHeaderState == null;
            var  headerState = DsgVarsTreeView.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 <DsgVarsTreeElement>(GetData());

            treeviewDsgVars = new DsgVarsTreeView(treeviewDsgVarsState, multiColumnHeader, treeModel)
            {
                target = target
            };
        }
    }
Пример #2
0
    private WebJSON.DsgVar[] GetDsgVarsJSON(BasePersoBehaviour perso)
    {
        DsgVarComponent dsgComponent = perso?.brain?.dsgVars;

        if (dsgComponent != null && dsgComponent.editableEntries != null && dsgComponent.editableEntries.Length > 0)
        {
            return(dsgComponent.editableEntries.Select(e => GetDsgVarJSON(e)).ToArray());
        }
        return(null);
    }
Пример #3
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        DsgVarComponent c = (DsgVarComponent)target;

        GUILayout.BeginVertical();

        GUILayout.BeginHorizontal();

        GUILayout.Label("Type/name");
        GUILayout.Label("Current value");
        GUILayout.Label("Initial value");

        GUILayout.EndHorizontal();

        foreach (DsgVarComponent.DsgVarEditableEntry entry in c.editableEntries)
        {
            GUILayout.BeginHorizontal();

            DrawDsgVarEntry(entry);

            GUILayout.EndHorizontal();
        }


        if (GUILayout.Button("Print initial dsgvar assignments"))
        {
            string printResult = "";

            foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries)
            {
                printResult += DsgVarUtil.DsgVarEntryToCSharpAssignment(dsgVarEntry.entry) + Environment.NewLine;
            }

            MapLoader.Loader.print(printResult);
        }

        if (GUILayout.Button("Print dsgvar value offsets"))
        {
            string printResult = "";

            DsgMem dsgMem = c.dsgMem;
            foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries)
            {
                Pointer offsetOfValue = (dsgMem.memBuffer + dsgVarEntry.entry.offsetInBuffer);
                printResult += dsgVarEntry.entry.NiceVariableName + " " + offsetOfValue + Environment.NewLine;
            }

            MapLoader.Loader.print(printResult);
        }

        GUILayout.EndVertical();
    }
Пример #4
0
    private JSONArray GetDsgVarsJSON(Perso perso)
    {
        JSONArray       dsgVarsJSON  = new JSONArray();
        DsgVarComponent dsgComponent = perso.Gao.GetComponent <DsgVarComponent>();

        if (dsgComponent != null && dsgComponent.dsgVarEntries != null && dsgComponent.dsgVarEntries.Length > 0)
        {
            foreach (DsgVarComponent.DsgVarEditableEntry dsg in dsgComponent.editableEntries)
            {
                dsgVarsJSON.Add(GetDsgVarJSON(perso, dsg));
            }
        }
        return(dsgVarsJSON);
    }
Пример #5
0
    IList <DsgVarsTreeElement> GetData()
    {
        DsgVarComponent           pb = (DsgVarComponent)target;
        List <DsgVarsTreeElement> tr = new List <DsgVarsTreeElement>();

        tr.Add(new DsgVarsTreeElement("Hidden root", -1, -1));
        bool visibleCurrent = false;
        bool visibleInitial = false;
        bool visibleModel   = false;

        if (pb.editableEntries.Length > 0)
        {
            int id = 0;
            foreach (DsgVarComponent.DsgVarEditableEntry entry in pb.editableEntries)
            {
                DsgVarsTreeElement el = new DsgVarsTreeElement(entry.Name, 0, id)
                {
                    entry = entry
                };
                if (entry.valueCurrent != null)
                {
                    visibleCurrent = true;
                }
                if (entry.valueInitial != null)
                {
                    visibleInitial = true;
                }
                if (entry.valueModel != null)
                {
                    visibleModel = true;
                }
                tr.Add(el);
                id++;
                if (entry.IsArray)
                {
                    el.children = new List <TreeElement>();
                    int length = entry.ArrayLength;
                    for (int i = 0; i < length; i++)
                    {
                        DsgVarsTreeElement el2 = new DsgVarsTreeElement(entry.Name + "[" + i + "]", 1, id)
                        {
                            entry = entry, arrayIndex = i
                        };
                        tr.Add(el2);
                        id++;
                    }
                }
            }
            // Activate columns
            List <int> visibleColumns = m_MultiColumnHeaderState.visibleColumns.ToList();
            if (visibleCurrent != visibleColumns.Contains((int)DsgVarsTreeView.Columns.CurrentValue))
            {
                if (visibleCurrent)
                {
                    visibleColumns.Add((int)DsgVarsTreeView.Columns.CurrentValue);
                }
                else
                {
                    visibleColumns.Remove((int)DsgVarsTreeView.Columns.CurrentValue);
                }
            }
            if (visibleInitial != visibleColumns.Contains((int)DsgVarsTreeView.Columns.InitialValue))
            {
                if (visibleInitial)
                {
                    visibleColumns.Add((int)DsgVarsTreeView.Columns.InitialValue);
                }
                else
                {
                    visibleColumns.Remove((int)DsgVarsTreeView.Columns.InitialValue);
                }
            }
            if (visibleModel != visibleColumns.Contains((int)DsgVarsTreeView.Columns.ModelValue))
            {
                if (visibleModel)
                {
                    visibleColumns.Add((int)DsgVarsTreeView.Columns.ModelValue);
                }
                else
                {
                    visibleColumns.Remove((int)DsgVarsTreeView.Columns.ModelValue);
                }
            }
            m_MultiColumnHeaderState.visibleColumns = visibleColumns.ToArray();
        }
        return(tr);
    }
Пример #6
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        DsgVarComponent c = (DsgVarComponent)target;

        if (c.editableEntries != null)
        {
            Rect rect = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, 400f);
            InitDsgVarsTreeIfNeeded(rect, c);
            if (treeviewDsgVars.target != c)
            {
                treeviewDsgVars.target = c;
                treeviewDsgVars.treeModel.SetData(GetData());
                treeviewDsgVars.Reload();
            }
            treeviewDsgVars.OnGUI(rect);
        }
        //GUILayout.BeginVertical();

        /*GUILayout.BeginHorizontal();
         *
         * GUILayout.Label("Type/name");
         * GUILayout.Label("Current value");
         * GUILayout.Label("Initial value");
         *
         * GUILayout.EndHorizontal();
         *
         * foreach (DsgVarComponent.DsgVarEditableEntry entry in c.editableEntries) {
         *
         *  GUILayout.BeginHorizontal();
         *
         *  DrawDsgVarEntry(entry);
         *
         *  GUILayout.EndHorizontal();
         * }*/


        /*if (GUILayout.Button("Print initial dsgvar assignments")) {
         *
         *  string printResult = "";
         *
         *  foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) {
         *
         *      printResult += DsgVarUtil.DsgVarEntryToCSharpAssignment(dsgVarEntry.entry) + Environment.NewLine;
         *  }
         *
         *  MapLoader.Loader.print(printResult);
         * }*/

        if (GUILayout.Button("Print dsgvar value offsets"))
        {
            string printResult = "";

            DsgMem dsgMem = c.dsgMem;
            foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries)
            {
                Pointer offsetOfValue = (dsgMem.memBuffer + dsgVarEntry.entry.offsetInBuffer);
                printResult += dsgVarEntry.entry.NiceVariableName + " " + offsetOfValue + Environment.NewLine;
            }

            MapLoader.Loader.print(printResult);
        }

        //GUILayout.EndVertical();
    }
Пример #7
0
    public void UpdateLivePreview()
    {
        Reader reader = MapLoader.Loader.livePreviewReader;

        foreach (SuperObject so in MapLoader.Loader.superObjects)
        {
            if (!(so.data is Perso))
            {
                continue;
            }

            if (so.off_matrix == null)
            {
                continue;
            }
            Pointer.Goto(ref reader, so.off_matrix);
            so.matrix = Matrix.Read(MapLoader.Loader.livePreviewReader, so.off_matrix);
            if (so.data != null && so.data.Gao != null)
            {
                so.data.Gao.transform.localPosition = so.matrix.GetPosition(convertAxes: true);
                so.data.Gao.transform.localRotation = so.matrix.GetRotation(convertAxes: true);
                so.data.Gao.transform.localScale    = so.matrix.GetScale(convertAxes: true);

                if (so.data is Perso)
                {
                    Perso perso = (Perso)so.data;

                    PersoBehaviour pb = perso.Gao.GetComponent <PersoBehaviour>();
                    if (pb != null)
                    {
                        Pointer.Goto(ref reader, perso.p3dData.offset);
                        perso.p3dData.UpdateCurrentState(reader);

                        // State offset changed?
                        if (perso.p3dData.stateCurrent != null)
                        {
                            pb.SetState(perso.p3dData.stateCurrent.index);
                            pb.autoNextState = true;
                        }
                    }

                    MindComponent mc = perso.Gao.GetComponent <MindComponent>();
                    if (mc != null)
                    {
                        Mind mind = mc.mind;
                        Pointer.DoAt(ref reader, mind.Offset, () => {
                            mind.UpdateCurrentBehaviors(reader);
                        });
                    }

                    DsgVarComponent dsgVarComponent = perso.Gao.GetComponent <DsgVarComponent>();
                    if (dsgVarComponent != null)
                    {
                        dsgVarComponent.SetPerso(perso);
                    }

                    CustomBitsComponent customBitsComponent = perso.Gao.GetComponent <CustomBitsComponent>();
                    if (customBitsComponent != null)
                    {
                        Pointer.Goto(ref reader, perso.off_stdGame);
                        perso.stdGame = StandardGame.Read(reader, perso.off_stdGame);
                        customBitsComponent.stdGame = perso.stdGame;
                        customBitsComponent.Init();
                    }

                    DynamicsMechanicsComponent dnComponent = perso.Gao.GetComponent <DynamicsMechanicsComponent>();
                    if (dnComponent != null)
                    {
                        Pointer.DoAt(ref reader, perso.off_dynam, () => {
                            perso.dynam = Dynam.Read(reader, perso.off_dynam);
                        });

                        dnComponent.SetDynamics(perso.dynam.dynamics);
                    }
                }
            }
        }

        Perso camera = loader.persos.FirstOrDefault(p => p != null && p.namePerso.Equals("StdCamer"));

        if (camera != null)
        {
            SuperObject cameraSO = camera.SuperObject;
            Pointer.Goto(ref reader, cameraSO.off_matrix);
            cameraSO.matrix = Matrix.Read(reader, cameraSO.off_matrix);
            camera.Gao.transform.localPosition = cameraSO.matrix.GetPosition(convertAxes: true);
            camera.Gao.transform.localRotation = cameraSO.matrix.GetRotation(convertAxes: true);
            camera.Gao.transform.localScale    = cameraSO.matrix.GetScale(convertAxes: true);

            Camera.main.transform.position = camera.Gao.transform.position;
            Camera.main.transform.rotation = camera.Gao.transform.rotation * Quaternion.Euler(0, 180, 0);
        }
    }
Пример #8
0
    async Task InitPersos()
    {
        if (loader != null)
        {
            for (int i = 0; i < loader.persos.Count; i++)
            {
                detailedState = "Initializing persos: " + i + "/" + loader.persos.Count;
                await WaitIfNecessary();

                Perso          p = loader.persos[i];
                PersoBehaviour unityBehaviour = p.Gao.AddComponent <PersoBehaviour>();
                unityBehaviour.controller = this;
                if (loader.globals != null && loader.globals.spawnablePersos != null)
                {
                    if (loader.globals.spawnablePersos.IndexOf(p) > -1)
                    {
                        unityBehaviour.IsAlways           = true;
                        unityBehaviour.transform.position = new Vector3(i * 10, -1000, 0);
                    }
                }
                if (!unityBehaviour.IsAlways)
                {
                    if (p.sectInfo != null && p.sectInfo.off_sector != null)
                    {
                        unityBehaviour.sector = sectorManager.sectors.FirstOrDefault(s => s.sector != null && s.sector.SuperObject.offset == p.sectInfo.off_sector);
                    }
                    else
                    {
                        SectorComponent sc = sectorManager.GetActiveSectorWrapper(p.Gao.transform.position);
                        unityBehaviour.sector = sc;
                    }
                }
                else
                {
                    unityBehaviour.sector = null;
                }
                unityBehaviour.perso = p;
                unityBehaviour.Init();

                // Scripts
                if (p.Gao)
                {
                    if (p.brain != null && p.brain.mind != null && p.brain.mind.AI_model != null)
                    {
                        if (p.brain.mind.AI_model.behaviors_normal != null)
                        {
                            GameObject intelParent = new GameObject("Rule behaviours");
                            intelParent.transform.parent = p.Gao.transform;
                            Behavior[] normalBehaviors = p.brain.mind.AI_model.behaviors_normal;
                            int        iter            = 0;
                            foreach (Behavior behavior in normalBehaviors)
                            {
                                string     shortName   = behavior.GetShortName(p.brain.mind.AI_model, Behavior.BehaviorType.Intelligence, iter);
                                GameObject behaviorGao = new GameObject(shortName);
                                behaviorGao.transform.parent = intelParent.transform;
                                foreach (Script script in behavior.scripts)
                                {
                                    GameObject scriptGao = new GameObject("Script");
                                    scriptGao.transform.parent = behaviorGao.transform;
                                    ScriptComponent scriptComponent = scriptGao.AddComponent <ScriptComponent>();
                                    scriptComponent.SetScript(script, p);
                                }
                                if (behavior.firstScript != null)
                                {
                                    ScriptComponent scriptComponent = behaviorGao.AddComponent <ScriptComponent>();
                                    scriptComponent.SetScript(behavior.firstScript, p);
                                }
                                if (iter == 0)
                                {
                                    behaviorGao.name += " (Init)";
                                }
                                if ((behavior.scripts == null || behavior.scripts.Length == 0) && behavior.firstScript == null)
                                {
                                    behaviorGao.name += " (Empty)";
                                }
                                iter++;
                            }
                        }
                        if (p.brain.mind.AI_model.behaviors_reflex != null)
                        {
                            GameObject reflexParent = new GameObject("Reflex behaviours");
                            reflexParent.transform.parent = p.Gao.transform;
                            Behavior[] reflexBehaviors = p.brain.mind.AI_model.behaviors_reflex;
                            int        iter            = 0;
                            foreach (Behavior behavior in reflexBehaviors)
                            {
                                string     shortName   = behavior.GetShortName(p.brain.mind.AI_model, Behavior.BehaviorType.Reflex, iter);
                                GameObject behaviorGao = new GameObject(shortName);
                                behaviorGao.transform.parent = reflexParent.transform;
                                foreach (Script script in behavior.scripts)
                                {
                                    GameObject scriptGao = new GameObject("Script");
                                    scriptGao.transform.parent = behaviorGao.transform;
                                    ScriptComponent scriptComponent = scriptGao.AddComponent <ScriptComponent>();
                                    scriptComponent.SetScript(script, p);
                                }
                                if (behavior.firstScript != null)
                                {
                                    ScriptComponent scriptComponent = behaviorGao.AddComponent <ScriptComponent>();
                                    scriptComponent.SetScript(behavior.firstScript, p);
                                }
                                if ((behavior.scripts == null || behavior.scripts.Length == 0) && behavior.firstScript == null)
                                {
                                    behaviorGao.name += " (Empty)";
                                }
                                iter++;
                            }
                        }
                        if (p.brain.mind.AI_model.macros != null)
                        {
                            GameObject macroParent = new GameObject("Macros");
                            macroParent.transform.parent = p.Gao.transform;
                            Macro[] macros = p.brain.mind.AI_model.macros;
                            int     iter   = 0;

                            foreach (Macro macro in macros)
                            {
                                GameObject behaviorGao = new GameObject(macro.GetShortName(p.brain.mind.AI_model, iter));
                                behaviorGao.transform.parent = macroParent.transform;
                                ScriptComponent scriptComponent = behaviorGao.AddComponent <ScriptComponent>();
                                scriptComponent.SetScript(macro.script, p);
                                iter++;
                            }
                        }
                    }
                }
            }
            // Initialize DSGVars after all persos have their perso behaviours
            for (int i = 0; i < loader.persos.Count; i++)
            {
                Perso    p   = loader.persos[i];
                Moddable mod = null;
                if (p.SuperObject != null && p.SuperObject.Gao != null)
                {
                    mod = p.SuperObject.Gao.GetComponent <Moddable>();
                    if (mod != null)
                    {
                        mod.persoBehaviour = p.Gao.GetComponent <PersoBehaviour>();
                    }
                }
                if (p.Gao && p.brain != null && p.brain.mind != null && p.brain.mind.AI_model != null)
                {
                    // DsgVars
                    if (p.brain.mind.dsgMem != null || p.brain.mind.AI_model.dsgVar != null)
                    {
                        DsgVarComponent dsgVarComponent = p.Gao.AddComponent <DsgVarComponent>();
                        dsgVarComponent.SetPerso(p);
                        if (mod != null)
                        {
                            mod.dsgVarComponent = dsgVarComponent;
                        }
                    }
                    // Dynam
                    if (p.dynam != null && p.dynam.dynamics != null)
                    {
                        DynamicsMechanicsComponent dynamicsBehaviour = p.Gao.AddComponent <DynamicsMechanicsComponent>();
                        dynamicsBehaviour.SetDynamics(p.dynam.dynamics);
                    }
                    // Mind
                    if (p.brain != null && p.brain.mind != null)
                    {
                        MindComponent mindComponent = p.Gao.AddComponent <MindComponent>();
                        mindComponent.Init(p, p.brain.mind);
                        if (mod != null)
                        {
                            mod.mindComponent = mindComponent;
                        }
                    }
                    // Custom Bits
                    if (p.stdGame != null)
                    {
                        CustomBitsComponent c = p.Gao.AddComponent <CustomBitsComponent>();
                        c.stdGame = p.stdGame;
                        if (Settings.s.engineVersion == Settings.EngineVersion.R3)
                        {
                            c.hasAiCustomBits = true;
                        }
                        c.Init();
                    }
                }
            }
        }
        if (loader is OpenSpace.Loader.R2ROMLoader)
        {
            OpenSpace.Loader.R2ROMLoader romLoader = loader as OpenSpace.Loader.R2ROMLoader;
            if (romPersos.Count > 0)
            {
                for (int i = 0; i < romPersos.Count; i++)
                {
                    detailedState = "Initializing persos: " + i + "/" + romPersos.Count;
                    await WaitIfNecessary();

                    ROMPersoBehaviour unityBehaviour = romPersos[i];
                    unityBehaviour.controller = this;

                    /*if (loader.globals != null && loader.globals.spawnablePersos != null) {
                     *      if (loader.globals.spawnablePersos.IndexOf(p) > -1) {
                     *              unityBehaviour.IsAlways = true;
                     *              unityBehaviour.transform.position = new Vector3(i * 10, -1000, 0);
                     *      }
                     * }*/
                    if (!unityBehaviour.IsAlways)
                    {
                        SectorComponent sc = sectorManager.GetActiveSectorWrapper(unityBehaviour.transform.position);
                        unityBehaviour.sector = sc;
                    }
                    else
                    {
                        unityBehaviour.sector = null;
                    }

                    /*Moddable mod = null;
                     * if (p.SuperObject != null && p.SuperObject.Gao != null) {
                     *      mod = p.SuperObject.Gao.GetComponent<Moddable>();
                     *      if (mod != null) {
                     *              mod.persoBehaviour = unityBehaviour;
                     *      }
                     * }*/
                    unityBehaviour.Init();

                    var iteratorPerso = unityBehaviour.perso;

                    // Of sound brain and AI model?
                    if (iteratorPerso.brain?.Value?.aiModel?.Value != null)
                    {
                        var aiModel = iteratorPerso.brain.Value.aiModel.Value;

                        // DsgVars
                        if (iteratorPerso.brain?.Value?.dsgMem?.Value != null || aiModel.dsgVar?.Value != null)
                        {
                            DsgVarComponent dsgVarComponent = unityBehaviour.gameObject.AddComponent <DsgVarComponent>();
                            dsgVarComponent.SetPerso(iteratorPerso);
                        }

                        // Comports
                        if (aiModel.comportsIntelligence.Value != null)
                        {
                            aiModel.comportsIntelligence.Value.CreateGameObjects("Rule", unityBehaviour.gameObject, iteratorPerso);
                        }
                        if (aiModel.comportsReflex.Value != null)
                        {
                            aiModel.comportsReflex.Value.CreateGameObjects("Reflex", unityBehaviour.gameObject, iteratorPerso);
                        }
                    }
                }
            }
            if (romLoader.level != null && romLoader.level.spawnablePersos.Value != null && romLoader.level.num_spawnablepersos > 0)
            {
                GameObject spawnableParent = new GameObject("Spawnable persos");
                for (int i = 0; i < romLoader.level.num_spawnablepersos; i++)
                {
                    detailedState = "Initializing spawnable persos: " + i + "/" + romLoader.level.num_spawnablepersos;
                    await WaitIfNecessary();

                    OpenSpace.ROM.SuperObjectDynamic sod = romLoader.level.spawnablePersos.Value.superObjects[i];
                    GameObject sodGao = sod.GetGameObject();
                    if (sodGao != null)
                    {
                        ROMPersoBehaviour unityBehaviour = sodGao.GetComponent <ROMPersoBehaviour>();
                        unityBehaviour.controller = this;
                        unityBehaviour.IsAlways   = true;
                        unityBehaviour.transform.SetParent(spawnableParent.transform);
                        unityBehaviour.transform.position   = new Vector3(i * 10, -1000, 0);
                        unityBehaviour.transform.rotation   = Quaternion.identity;
                        unityBehaviour.transform.localScale = Vector3.one;
                        if (!unityBehaviour.IsAlways)
                        {
                            SectorComponent sc = sectorManager.GetActiveSectorWrapper(unityBehaviour.transform.position);
                            unityBehaviour.sector = sc;
                        }
                        else
                        {
                            unityBehaviour.sector = null;
                        }
                        unityBehaviour.Init();

                        var iteratorPerso = unityBehaviour.perso;

                        // Of sound brain and AI model?
                        if (iteratorPerso.brain?.Value?.aiModel?.Value != null)
                        {
                            var aiModel = iteratorPerso.brain.Value.aiModel.Value;

                            // DsgVars
                            if (iteratorPerso.brain?.Value?.dsgMem?.Value != null || aiModel.dsgVar?.Value != null)
                            {
                                DsgVarComponent dsgVarComponent = unityBehaviour.gameObject.AddComponent <DsgVarComponent>();
                                dsgVarComponent.SetPerso(iteratorPerso);
                            }

                            // Comports
                            if (aiModel.comportsIntelligence.Value != null)
                            {
                                aiModel.comportsIntelligence.Value.CreateGameObjects("Rule", unityBehaviour.gameObject, iteratorPerso);
                            }
                            if (aiModel.comportsReflex.Value != null)
                            {
                                aiModel.comportsReflex.Value.CreateGameObjects("Reflex", unityBehaviour.gameObject, iteratorPerso);
                            }
                        }
                    }
                }
            }
        }
    }
Пример #9
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        DsgVarComponent c = (DsgVarComponent)target;

        if (c.editableEntries != null)
        {
            Rect rect = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, 400f);
            InitDsgVarsTreeIfNeeded(rect, c);
            if (treeviewDsgVars.target != c)
            {
                treeviewDsgVars.target = c;
                treeviewDsgVars.treeModel.SetData(GetData());
                treeviewDsgVars.Reload();
            }
            treeviewDsgVars.OnGUI(rect);
        }
        //GUILayout.BeginVertical();

        /*GUILayout.BeginHorizontal();
         *
         * GUILayout.Label("Type/name");
         * GUILayout.Label("Current value");
         * GUILayout.Label("Initial value");
         *
         * GUILayout.EndHorizontal();
         *
         * foreach (DsgVarComponent.DsgVarEditableEntry entry in c.editableEntries) {
         *
         *  GUILayout.BeginHorizontal();
         *
         *  DrawDsgVarEntry(entry);
         *
         *  GUILayout.EndHorizontal();
         * }*/


        /*if (GUILayout.Button("Print initial dsgvar assignments")) {
         *
         *  string printResult = "";
         *
         *  foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) {
         *
         *      printResult += DsgVarUtil.DsgVarEntryToCSharpAssignment(dsgVarEntry.entry) + Environment.NewLine;
         *  }
         *
         *  MapLoader.Loader.print(printResult);
         * }*/

        if (GUILayout.Button("Print dsgvar value offsets"))
        {
            string printResult = "";

            DsgMem dsgMem = c.dsgMem;
            foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries)
            {
                Pointer offsetOfValue = (dsgMem.memBuffer + dsgVarEntry.entry.offsetInBuffer);
                printResult += dsgVarEntry.entry.NiceVariableName + " " + offsetOfValue + Environment.NewLine;
            }

            MapLoader.Loader.print(printResult);
        }

        if (GUILayout.Button("Copy DsgVars as CheatEngine table"))
        {
            string printResult = "";

            DsgMem dsgMem = c.dsgMem;
            foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries)
            {
                Pointer offsetOfValue = (dsgMem.memBuffer + dsgVarEntry.entry.offsetInBuffer);

                string variableType;
                switch (dsgVarEntry.Type)
                {
                case DsgVarType.Float: variableType = "Float"; break;

                case DsgVarType.Byte: variableType = "Byte"; break;

                case DsgVarType.UByte: variableType = "Byte"; break;

                case DsgVarType.Short: variableType = "2 Bytes"; break;

                case DsgVarType.UShort: variableType = "2 Bytes"; break;

                case DsgVarType.Vector: variableType = "Float"; break;

                case DsgVarType.Boolean: variableType = "Byte"; break;

                default: variableType = "4 Bytes"; break;
                }

                for (int i = 0; i <= ((dsgVarEntry.Type == DsgVarType.Vector) ? 8 : 0); i += 4)
                {
                    printResult += "<CheatEntry>" +
                                   $"<ID>0</ID>" +
                                   $"<Description>\"{dsgVarEntry.entry.NiceVariableName}\"</Description>" +
                                   $"<LastState Value=\"\" RealAddress=\"{(offsetOfValue+i).offset.ToString("X8")}\"/>" +
                                   $"<VariableType>{variableType}</VariableType>" +
                                   $"<Address>{(offsetOfValue + i).offset.ToString("X8")}</Address>" +
                                   "</CheatEntry>";
                }
            }

            printResult      = $"<?xml version=\"1.0\" encoding=\"utf-8\"?><CheatTable><CheatEntries>{printResult}</CheatEntries></CheatTable>";
            cheatTableString = printResult;

            EditorGUIUtility.systemCopyBuffer = cheatTableString;
        }

        //GUILayout.EndVertical();
    }
Пример #10
0
    // Update is called once per frame
    void Update()
    {
        if (raymanGAO == null)
        {
            GameObject[] gameObjects = FindObjectsOfType(typeof(GameObject)) as GameObject[];

            foreach (GameObject gao in gameObjects)
            {
                if (gao.name.Contains("YLT_RaymanModel"))
                {
                    raymanGAO = gao;
                    break;
                }
            }
        }
        else
        {
            DsgVarComponent dsgVarComponent = raymanGAO.GetComponent <DsgVarComponent>();
            if (dsgVarComponent != null)
            {
                DsgVarInfoEntry vector38Entry = null;
                DsgVarInfoEntry vector40Entry = null;

                if (Settings.s.game == Settings.Game.R2)
                {
                    vector38Entry = dsgVarComponent.dsgVarEntries[38];
                    vector40Entry = dsgVarComponent.dsgVarEntries[40];
                }
                else if (Settings.s.game == Settings.Game.R3)
                {
                    return;

                    /*vector38Entry = dsgVarComponent.dsgVarEntries[38];
                    *  vector40Entry = dsgVarComponent.dsgVarEntries[40];*/
                }

                Vector3 vector38_xzy = (Vector3)vector38Entry.value;
                Vector3 vector40_xzy = (Vector3)vector40Entry.value;

                Vector3 vector38 = new Vector3(vector38_xzy.x, vector38_xzy.z, vector38_xzy.y);
                Vector3 vector40 = new Vector3(vector40_xzy.x, vector40_xzy.z, vector40_xzy.y);

                Vector3 raymanVec = raymanGAO.transform.position;
                Vector3 dir       = (vector40) - (raymanVec);
                Vector3 dirFlat   = new Vector3(dir.x, 0, dir.z);

                for (float i = -0.05f; i <= 0.05f; i += 0.02f)
                {
                    for (float j = -0.05f; j <= 0.05f; j += 0.02f)
                    {
                        Vector3 o = new Vector3(i, 0, j);

                        Debug.DrawRay(vector38 + o, new Vector3(0, -0.9f, 0), Color.red);
                        Debug.DrawRay(vector38 + o, new Vector3(-1f, 0, 0), Color.red);
                        Debug.DrawRay(vector38 + o, new Vector3(1f, 0, 0), Color.red);
                        Debug.DrawRay(vector38 + o, new Vector3(0f, 0, -1f), Color.red);
                        Debug.DrawRay(vector38 + o, new Vector3(0f, 0, 1f), Color.red);

                        Debug.DrawRay(vector40 + o, new Vector3(0, -0.9f, 0), Color.blue);
                        Debug.DrawRay(vector40 + o, new Vector3(-1f, 0, 0), Color.blue);
                        Debug.DrawRay(vector40 + o, new Vector3(1f, 0, 0), Color.blue);
                        Debug.DrawRay(vector40 + o, new Vector3(0f, 0, -1f), Color.blue);
                        Debug.DrawRay(vector40 + o, new Vector3(0f, 0, 1f), Color.blue);


                        Debug.DrawRay(raymanVec + o, dir, Color.blue);
                        Debug.DrawRay(raymanVec + o, dirFlat, Color.blue);
                    }
                }
            }
        }

        //Debug.draw
    }