-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tools 2.0 #9
Comments
Another concern with this method is that there is currently no notion or separation between input devices. Currently, ImGui decides whether or not an input qualifies as active, by whether an ImGui widget is made active or not. This currently can only come from mouse events I think, but I'd like to find room for detecting whether it's coming from an Xbox controller or a Wacom tablet. So I was considering establishing a notion of a Device ID. // Poll for all sorts of inputs
for (const auto& [device, input] : inputs) {
if (device == DeviceID::Mouse) { do_something(input) }
if (device == DeviceID::WacomPen) { ... }
if (device == DeviceID::XBoxCtrl1) { ... }
} But things get blurry real fast. :( Is there any reference to something of this nature somewhere? |
One more thing that is made difficult with the current implementation. When you hold K and click + drag, the "Scrub" tool is enabled to scrub the current time. But because a tool can only operate on entities with an This problem extends to tools that would perform e.g. relative changes. For example, I'd like for middle-click drag to enable a But that wouldn't work either, without dragging from one of the squares which defeats the purpose of the tool. So these |
A discussion topic regarding the current implementation of the "tools" in the example application.
Goal
Overcome limitations of the current implementation.
_activeTool
in the applicationOverview of Current Implementation
The user interacts with the world using "tools".
Tools.inl
exampleA tool doesn't immediately modify any data, instead a tool generates events. Events are then interpreted by the application - via an "event handler" - which in turn modify your data. The goal is being able to play back the events and reproduce exactly what the user did with each tool.
The application has a notion of an "Active Tool" which is called once per frame.
sequentity/Example/Source/main.cpp
Lines 615 to 617 in f5196fb
The tool does nothing, unless there is an entity with a particular component called
Active
along with some "input".sequentity/Example/Source/Tools.inl
Lines 140 to 144 in f5196fb
The
Active
component is assigned by the UI layer, in this case ImGui, whenever an entity is clicked.sequentity/Example/Source/main.cpp
Lines 571 to 583 in f5196fb
These are the three states of any entity able to be manipulated with a Tool.
Activated
entity has transitioned from being passive to active, this happens onceActive
entity is activated, and being manipulated (e.g. dragged)Deactivated
entity transitioned from active back to passive, happens onceThoughts
Overall I'm looking for thoughts on the current system, I expect similar things have been done lots of times, perhaps with the exception of wanting to support (1) multiple inputs in parallel, e.g. two mice and (2) wanting the user to ultimately assign an arbitrary input to arbitrary tools, e.g. swap from the mouse affecting position to the Wii controller.
Ultimately, the application is meant to facilitate building of a physical "rig", where you have a number of physical input devices, each affecting some part of a character or world. Like a marionettist and her control bar.
Code wise, there are a few things I like about the current implementation, and some I dislike.
Likes
Activated
,Active
andDeactivated
aspect; I borrowed that from ImGui which seem to work quite nicely and is quite general.Dislikes
Active
is assigned from the UI layerInputPosition2D
are associated with entities like "hip", "leftLeg" etc. rather than a tool itself, which seems more intuitive.The text was updated successfully, but these errors were encountered: