Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

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

Idea for newIde - show project manager inside the empty properties editor (when no instance is selected) #918

Closed
blurymind opened this issue Feb 2, 2019 · 13 comments
Labels
🙇‍♀️Careful thinking/design or refactoring needed Needs a bit of studying to come with an elegant solution ✨ enhancement

Comments

@blurymind
Copy link
Contributor

blurymind commented Feb 2, 2019

Description

Ok so this may sound a bit crazy at first, but I really think we are wasting useful screen estate when we have this:
before

If I recall correctly what happens in fusion/construct2 when no instances are selected is that the engine shows you there the global game settings.

Solution suggested

My suggestion is to flat out show the project manager there, along with the hint to select an instance. I made a crude mockup:
after

The advantage of that is that we suddenly have a much faster access and better discover-ability of the project manager. Of course we can keep the button to open the project manager if you want to, just have another way of accessing it, without doing any work basically. No need to discover the button to open it, no need to click to open and click to close. The user will constantly select and deselect instances anyways - we might as well just give them access to that menu automatically instead of making them constantly click to get it. It will come to them instead :p

So to summarize:

  • this will save loads of points and clicks (better flow)
  • make Gd even more intuitive

Alternatives considered

Alternatively we can show global variables there - as they are quite an important element too, or some other element that is often accessed while developing a game

Anyways, just an idea :) why waste the space

@4ian
Copy link
Owner

4ian commented Feb 2, 2019

Another alternative to consider: just add a few buttons to the most useful features.

But I'm not even sure this a wasted space though. Consider that:

  • For a new user:
    • it feels least intimidating. New user basically want to edit a level and starting having fun doing it - hence an empty space force them to focus on the important things: the center of the screen, the list of object and the tabs (to go the events sheet).
    • They can actually learn the existence of the term "properties" by reading the message, rather than by confused by a project manager taking all the space on the left. They associate this way the term "properties" to this list of controls appearing when they click on an instance. The software is self descriptive.
  • For a power user:
    • When you're editing an object, this space is almost always showing the properties anyway.
    • Power user can anyway open the project manager using a shortcut. As the search box is automatically focused, they can immediately start typing for searching for a scene...

It's true that:

  • Accessing global variable is more of a pain. Same for game properties, resources, because they are hidden in the project manager.

But:

  • This helps focus on the right thing for new users as I explained + all the things I listed before.
  • For power user, the simplest solution is "just" to add shortcuts for these :)

This is the "less is more" approach. Less usage of the space give more opportunity to the user to discover by himself how this space is filled when clicking on an object.
It's also giving a very specific and unique responsibility to this panel: show instance properties, no more no less. This is what make things intuitive I think.

Pretty sure that actually this help GDevelop being considered intuitive compared to other solutions that show you tons of things on the screen :)

What do you think?

@blurymind
Copy link
Contributor Author

blurymind commented Feb 2, 2019

yes I agree with all the points. It does give a cleaner look when we show less and less intimidating too.
I still think that this would bring benefits to the long term use of the ide, but does come at some cost in terms of first impression :)

The project manager really is not that visually busy to go as far as to call it intimidating. I personally think that you have succeeded in making it very clean and effective.

How about if it's hidden by default, and to make it visible the user has to uncollapse it ? So instead of showing all the contents there is just a row called 'Project manager' and when clicked the project manager becomes visible. That means that we would have to keep its state somewhere, so when selecting and deselecting instances the user wouldnt have to uncollapse it each time.

Perhaps I am trying to hard to reduce clicks to get to things, but the more we reduce clicks,the more of a pleasure it is to use it imo.In any case, just brainstorming :)

@Wend1go
Copy link
Contributor

Wend1go commented Feb 3, 2019

Not sure if the project panel should be integrated into the properties panel. But I think making the properties panel multi purpose depending on what item is selected would surely improve the user experience.

  • If nothing is selected show the scene properties (these are hard to find in the context menu currently).
  • If you click on an instance show the instance properties and instance variables.
  • If you click on an object in the right panel show the object variables.
  • If (in the future) you click on a tilemap instance show the available tiles to paint with.

@blurymind
Copy link
Contributor Author

blurymind commented Feb 3, 2019 via email

@zatsme
Copy link
Contributor

zatsme commented Feb 3, 2019

While ide is being discussed I'd love to be able to make the panels smaller by percentage if possible. Also we really need to be able to group objects as the list get unmanageable and very hard to navigate, collapsible object groups I mean, maybe by using the existing object groups? 🤔

@blurymind
Copy link
Contributor Author

blurymind commented Feb 3, 2019

While ide is being discussed I'd love to be able to make the panels smaller by percentage if possible. Also we really need to be able to group objects as the list get unmanageable and very hard to navigate, collapsible object groups I mean, maybe by using the existing object groups? 🤔

I was actually thinking of that too - making a UI module that can group and collapse its children. @4ian actually has some code for that already in the project manager - I was wondering if it can be moved to another file and be reusable by other parts of GD

@Lizard-13
Copy link
Contributor

Lizard-13 commented Feb 3, 2019

AFAIK the idea is supporting slashes (/) in the objects names to display them in virtual folders, something like "Env/Decor/Plant" to create the collapsible virtual folders "Env" and "Decor".
The same could be applied for scenes, external events and layouts.

@zatsme
Copy link
Contributor

zatsme commented Feb 3, 2019

That would be helpful, but isn't something like the godot hierarchy possible? Ideally having parent objects and children just like godot would be the best, but just visually for now would help a lot with big projects/scenes 🙄

@Lizard-13
Copy link
Contributor

Lizard-13 commented Feb 3, 2019

The objects would be shown in a "hierarchy" and (as godot) the object name would be the path in the tree. For a parent and childs system a lot of things should be rewritten, objects management, behaviors, rendering, too much, the transformation matrix is the easiest part and is not easy, and get something used a lot as the global rotation turns into:

gdjs.sk.Transform.prototype.getGlobalRot = function(){
this.updateParentsTransform();
var sx = Math.sqrt(this.worldMatrix.a * this.worldMatrix.a +
this.worldMatrix.c * this.worldMatrix.c );
var sy = Math.sqrt(this.worldMatrix.b * this.worldMatrix.b +
this.worldMatrix.d * this.worldMatrix.d );
return Math.atan2(-this.worldMatrix.b/sy, this.worldMatrix.a/sx) * 180.0 / Math.PI;
};

Which is not performance friendly at all, somebody with better understanding on the topic could do it better, though :/

EDIT: I know the global rotation could be calculated as the summation of the parents rotations, is easier and mathematically correct if they're is no skew.

@blurymind
Copy link
Contributor Author

blurymind commented Feb 4, 2019

We are kind of getting a bit off track here :D The parent child relationship in godot is great for animating characters made out of body parts. It would be really cool to have with @Wend1go 's extension, but as @Lizard-13 says it would require a huge refactoring.

This post here is just for the Ide and for a low hanging fruit. I am looking at something that is both easy to implement and bring benefits to usability.

A cool thing that Godot also does is that some children classes can be combined with parent classes, so if you place a specific type of a node as a child of another type of a node, godot automatically links them logically in other ways than coordinates. It's quite powerful, as also every scene in godot is a node- you can instance levels inside levels the same way you would instance a game object that is made out of a node tree of other game objects.
https://docs.godotengine.org/en/3.0/getting_started/step_by_step/scenes_and_nodes.html

Godot has been designed from the ground up to be like this, so it would be a huge task for any other game engine to have such a feature added. It took unity devs a decade or more to make their prefabs nestable

@zatsme
Copy link
Contributor

zatsme commented Feb 4, 2019

Godot has been designed from the ground up to be like this, so it would be a huge task for any other game engine to have such a feature added. It took unity devs a decade or more to make their prefabs nestable

I know, but if you don't ask, nobody answers 😁

@4ian
Copy link
Owner

4ian commented Feb 4, 2019

It's quite powerful, as also every scene in godot is a node- you can instance levels inside levels the same way you would instance a game object that is made out of a node tree of other game objects.

This is indeed a powerful feature and a really nice design. The idea of external layouts comes a bit from the same idea, but nodes in Godot are more advanced/reusable.
This is something that might come in GDevelop later but would need quite a bit of change (game engine, but also in the UI to make this crystal clear to users - this might actually be the harder thing!). For now, priorities are different because I think there is still a lot to do on other features and improvements but that's an interesting idea :)

@blurymind
Copy link
Contributor Author

Which is not performance friendly at all, somebody with better understanding on the topic could do it better, though :/
EDIT: I know the global rotation could be calculated as the summation of the parents rotations, is easier and mathematically correct if they're is no skew.

Could perhaps be made conditionally less performant, so for example an object without any parents doesnt have to calculate relative transformations? :)
Also would it be easier if only sprites can be nested - that would be enough to later on do really cool things with tweens in GD? In any case- having dragonbones objects in gd5 would cover this feature much more sufficiently, as they also can be deformed as meshes and much more

@4ian 4ian added ✨ enhancement 🙇‍♀️Careful thinking/design or refactoring needed Needs a bit of studying to come with an elegant solution labels Feb 22, 2020
@4ian 4ian closed this as completed Feb 21, 2021
Repository owner locked and limited conversation to collaborators Feb 21, 2021

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
🙇‍♀️Careful thinking/design or refactoring needed Needs a bit of studying to come with an elegant solution ✨ enhancement
Projects
None yet
Development

No branches or pull requests

5 participants