diff --git a/Content/Luprex/lxPlayerController.uasset b/Content/Luprex/lxPlayerController.uasset index e54a9fdf..ef2c80eb 100644 --- a/Content/Luprex/lxPlayerController.uasset +++ b/Content/Luprex/lxPlayerController.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea9d4dfcf0c66054ad8a52cb8b7f57aecd27e3bb07550b3988d82289e1da944f -size 152560 +oid sha256:59da2d98390ad7955864eb20bc7e29bb7a0f716aa809b5678cd50f460ee18f41 +size 144994 diff --git a/Content/Widgets/WB_Hotkeys.uasset b/Content/Widgets/WB_Hotkeys.uasset index ae114a06..a34378b6 100644 --- a/Content/Widgets/WB_Hotkeys.uasset +++ b/Content/Widgets/WB_Hotkeys.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae8340945d4aa2d20fdd66eb12ac447ef909c12241713201c5ed541a7f255d97 -size 253316 +oid sha256:a6f3da45815a25235985152ee1af1c8e423774b05a586ac9e94b9f6295cd1f50 +size 261745 diff --git a/Docs/Best-Practices-for-UE-Wingman.md b/Docs/Best-Practices-for-UE-Wingman.md new file mode 100644 index 00000000..66b5434c --- /dev/null +++ b/Docs/Best-Practices-for-UE-Wingman.md @@ -0,0 +1,38 @@ +# Best Practices for UE Wingman + +UE Wingman is useful when you need the *live* Unreal blueprint graph, especially when text exports are missing or stale. Keep the investigation narrow and work in this order: + +1. Start with `Blueprint_Dump` on the asset. +2. Then use `Graph_Dump` on only the graphs you need. +3. Inspect child widgets or helper blueprints separately. +4. Use C++ source only to confirm the surrounding native handoff. + +## Practical Tips + +- Use exact asset paths, like `/Game/Widgets/WB_Hotkeys`. +- For graph paths, include the graph name exactly as Wingman reports it. +- Expect parameter names to be strict; check the automatic documentation if a command fails. +- Prefer structural questions over broad ones. Ask for one asset, one graph, or one dispatcher at a time. +- Use Wingman to confirm what the blueprint *actually does*, not what the docs say it should do. + +## What Wingman Is Good At + +- Finding widget trees. +- Showing event graphs and function graphs. +- Tracing blueprint-to-blueprint or blueprint-to-Lua handoff points. +- Confirming which variables a widget stores and reads. + +## What Wingman Is Not Good At + +- Replacing source code browsing for C++. +- Explaining large graphs all at once. +- Tolerating vague paths or loosely named assets. + +## Recommended Workflow + +1. Dump the blueprint. +2. Dump the relevant graphs. +3. Trace the data flow node by node. +4. Cross-check the native C++ only where the blueprint calls into engine code. + +This keeps the context small and makes the result easier to trust. diff --git a/Docs/Comment-Formatting-Standards.md b/Docs/Comment-Formatting-Standards.md deleted file mode 100644 index 783d23f2..00000000 --- a/Docs/Comment-Formatting-Standards.md +++ /dev/null @@ -1,57 +0,0 @@ -# Comment Formatting Standards - -## Line Width - -Wrap comments at approximately 60 columns. Code and function signatures are not wrapped. - -## Comment Style - -Use C++ style (`//`) for all comments. Use `/** */` only for UENUM/UPROPERTY values that should appear as tooltips in the blueprint editor. - -## Section Banners - -Each class, struct, or enum gets a banner block. The banner line is 60 characters of slashes. The banner names the type and gives a brief description. - -```cpp -//////////////////////////////////////////////////////////// -// -// FlxExampleClass -// -// Brief description of what this class does. -// -//////////////////////////////////////////////////////////// -``` - -## Header File Banners - -Ideally, we'd like to have documentation about what a header -file is for. This would be a banner block at the top of the -header file, before the pragma once. If you're claude code, -and there is no documentation yet, generate a little, but -mark it "DOCUMENTATION GENERATED BY CLAUDE." - -## Member Comments - -Comments on member variables and functions use `//` followed by a blank `//` line: - -```cpp -// Brief description of what this does. -// -void DoSomething(); -``` - -## UFUNCTION Spacing - -UFUNCTION-decorated members should be followed by a single blank line to visually separate them from the next member: - -```cpp -// Get the value. -// -UFUNCTION(BlueprintCallable) -int32 GetValue() const; - -// Set the value. -// -UFUNCTION(BlueprintCallable) -void SetValue(int32 Val); -``` diff --git a/luprex/lua/hotkeys.lua b/luprex/lua/hotkeys.lua index 7f90196d..28db88d5 100644 --- a/luprex/lua/hotkeys.lua +++ b/luprex/lua/hotkeys.lua @@ -23,10 +23,9 @@ -- At this point, if you were to pprint(keys), the output would -- look like this: -- --- { "hotkeys", "X", "Light Oven", "A", "Add Fuel" } +-- { "X", "Light Oven", "A", "Add Fuel" } -- --- The first array element is always the word "hotkeys". Notice --- also that a hotkeylist doesn't store the closures, they are +-- Notice that a hotkeylist doesn't store the closures, they are -- silently ignored. The resulting array is in a format that can -- be returned directly to Unreal. -- @@ -58,7 +57,7 @@ makeclass("hotkeylist") makeclass("hotkeypress") function hotkeylist.create() - local result = { "hotkeys" } + local result = {} setmetatable(result, hotkeylist) return result end @@ -79,4 +78,3 @@ function hotkeypress.add(self, key, action, closure) self.closure = closure end end - diff --git a/luprex/lua/login.lua b/luprex/lua/login.lua index 8a0f3216..3fa28283 100644 --- a/luprex/lua/login.lua +++ b/luprex/lua/login.lua @@ -55,13 +55,9 @@ function engio.getlookat() end -- if the class has a function 'lookhotkeys', then the correct - -- look-at widget is 'hotkeys'. We're going to automatically - -- generate the correct response. + -- look-at widget is 'hotkeys'. if class.lookhotkeys ~= nil then - local keys = hotkeylist.create() - class.lookhotkeys(keys) - setmetatable(keys, nil) - return keys + return "hotkeys" end -- otherwise, if the class has a function 'getlookat', use that. @@ -73,6 +69,20 @@ function engio.getlookat() return "" end +function engio.gethotkeys() + local class = tangible.getclass(place) + + -- if the tangible doesn't have a 'lookhotkeys' function, do nothing + if class == nil or class.lookhotkeys == nil then + return {} + end + + local keys = hotkeylist.create() + class.lookhotkeys(keys) + setmetatable(keys, nil) + return keys +end + function engio.presshotkey(action) local class = tangible.getclass(place) @@ -94,4 +104,4 @@ function jp3() tangible.animate{tan=actor, anim={action="play", seq="jump"}} tangible.animate{tan=actor, anim={action="play", seq="jump"}} end - \ No newline at end of file +