Skip to content
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

Introduces toggle effect & expression #4154

Open
wants to merge 110 commits into
base: dev/feature
Choose a base branch
from

Conversation

Olyno
Copy link
Contributor

@Olyno Olyno commented Jul 3, 2021

Description

This pull request introduces the toggle effect and expression.

set {_var} to true
toggle {_var} # {_var} is now false

set {_var} to inverse of {_var} # {_var} is now true

Target Minecraft Versions: /
Requirements: /
Related Issues: /

@Mwexim
Copy link
Contributor

Mwexim commented Jul 3, 2021

I have the same question I had with Delta’s PR initially: why would you add a new ChangeMode value? Toggling a boolean is essentially equal to setting the boolean to its opposite value.

If anyone can give me one type that could use toggling except booleans, then go ahead, but in my opinion this should just be added as a separate effect and use the set-operation to perform the action.

Copy link
Member

@TPGamesNL TPGamesNL left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expression's javadocs for change and acceptChange should be updated

@Olyno
Copy link
Contributor Author

Olyno commented Jul 3, 2021

why would you add a new ChangeMode value?

It's more intuitive and makes more sense than toggle the value manually. For example:

set flight mode to false # Bruh
toggle flight mode # This is good

Toggling a boolean is essentially equal to setting the boolean to its opposite value

Yes it is, but what's the most intuitive for users? Having a boolean "state" expression, or use a simple toggle?

in my opinion this should just be added as a separate effect and use the set-operation to perform the action

I did that in a first time, but try to reuse an effect in addons, this is just impossible or really tricky/hard to do. What we would like is a simple api for addons developers that anyone could use it easily. Adding a mode makes things easier than adding an effect, and trying to use this effect.
I would like add too a changer is already an effect. Wouldn't be better to group up all changer effects at the same place? 😃

@Mwexim
Copy link
Contributor

Mwexim commented Jul 3, 2021

You're understanding me wrong. What I'm saying is that the internal structure of this feature does not make sense to me.

  1. You're adding a new ChangeMode while toggling is essentially setting the value to its opposite:
    Ex. toggle flying state
    This should not be handled as 'ChangeMode.TOGGLE' but rather as 'ChangeMode.SET'.
  2. Only booleans can be toggled, unless someone can give me an example where another object could be toggled. The pattern should become toggle %booleans%, which essentially means that whenever a boolean expression can be set to something, it can also be set to its opposite, which is essentially what toggling means.

@Olyno
Copy link
Contributor Author

Olyno commented Jul 3, 2021

The pattern should become toggle %booleans%

Yeah, but here is the problem: how do you manage that with addons?

@Mwexim
Copy link
Contributor

Mwexim commented Jul 3, 2021

The pattern should become toggle %booleans%

Yeah, but here is the problem: how do you manage that with addons?

Addons that register boolean expressions can just accept SET as a valid change mode?

@OGContent
Copy link

OGContent commented Jul 3, 2021

Addons that register boolean expressions can just accept SET as a valid change mode?

Hey, I don't really get what you mean, why shouldn't TOGGLE be a mode?
also do you mean the TOGGLE should be like set {variable} to toggle {variable} or what?

@Mwexim
Copy link
Contributor

Mwexim commented Jul 4, 2021

Addons that register boolean expressions can just accept SET as a valid change mode?

Hey, I don't really get what you mean, why shouldn't TOGGLE be a mode?
also do you mean the TOGGLE should be like set {variable} to toggle {variable} or what?

Not really. I am advocating for the removal of this ChangeMode because toggling equals setting a value to its opposite. This means that all boolean expressions that accept 'set' as a valid ChangeMode, can be toggled, since, again, toggling equals setting a value to its opposite.

@AyhamAl-Ali
Copy link
Member

I think both ways are useful as a GhangeMode and as an expression.

because toggling equals setting a value to its opposite.

I don't think this is correct, it is technically setting to it's opposite but to do this manually you will need a work-around and it will be longer that just toggle ... or toggled ... which makes it much easier if you use it a lot.

@Mwexim
Copy link
Contributor

Mwexim commented Jul 4, 2021

I think both ways are useful as a GhangeMode and as an expression.

because toggling equals setting a value to its opposite.

I don't think this is correct, it is technically setting to it's opposite but to do this manually you will need a work-around and it will be longer that just toggle ... or toggled ... which makes it much easier if you use it a lot.

You are not understanding me correctly but at this point I think it doesn’t matter anymore.

@AyhamAl-Ali
Copy link
Member

You are not understanding me correctly but at this point I think it doesn’t matter anymore.

I would like to understand your opinion of course, let me know more. It does matter :)

@AyhamAl-Ali
Copy link
Member

My point is that you can toggle using current SET mode like this

set flight state of player to false if flight state of player is true else true
# OR
if flight state of player is true:
  set flight state of player to false
else:
  set flight state of player to true

Which works perfectly but adding

toggle flight state of player
send "Flight state has been set to %toggle flight state of player%"
# OR
set flight state toggled {Flight::%uuid of player%}

Makes it easier in some cases if not many, Am I correct?

@TPGamesNL
Copy link
Member

@Mwexim's point is that toggle flight state of player does not need a new ChangeMode, but can be done with using get methods and the SET ChangeMode

@AyhamAl-Ali
Copy link
Member

@Mwexim's point is that toggle flight state of player does not need a new ChangeMode, but can be done with using get methods and the SET ChangeMode

But with that it won't be possible to do toggle flight state of player because toggle is GhangeMode here right?

@TPGamesNL
Copy link
Member

But with that it won't be possible to do toggle flight state of player because toggle is ChangeMode here right?

Yes that would be possible, TOGGLE is not a ChangeMode in that code: https://pastebin.com/mEvXw429

@AyhamAl-Ali
Copy link
Member

Yes that would be possible, TOGGLE is not a ChangeMode in that code: https://pastebin.com/mEvXw429

If that works well I think it is a better idea, because it will be easier and no need to add TOGGLE ChangeMode to all boolean type expressions manually.

@Olyno
Copy link
Contributor Author

Olyno commented Jul 4, 2021

expression.change(e, new Boolean[] {!b}, ChangeMode.SET);

Oh okay, that's what I didn't understand, how we could do that without a mode. It seems to be a good way to do it. I'm gonna probably change for that (and adding a new expression if the community wants to)

@TPGamesNL TPGamesNL added the enhancement Feature request, an issue about something that could be improved, or a PR improving something. label Jul 6, 2021
@Olyno
Copy link
Contributor Author

Olyno commented Jul 16, 2021

This pull request is not ready to be review due to some changes to do. I convert it to draft during this time.

@Olyno Olyno marked this pull request as draft July 16, 2021 09:34
@APickledWalrus APickledWalrus removed the feature-ready A PR/issue that has been approved, tested and can be merged/closed in the next feature version. label Jul 1, 2024
@APickledWalrus APickledWalrus mentioned this pull request Sep 5, 2024
1 task
@sovdeeth sovdeeth added the 2.10 Targeting a 2.10.X version release label Dec 17, 2024
@Olyno
Copy link
Contributor Author

Olyno commented Dec 29, 2024

Tests are not passing, please do not merge this pull request yet, while we don't find the issue.

@Moderocky
Copy link
Member

Tests are not passing
The parse logic for EffToggle is wrong. Also, the effect does not set converted variables right now.

@Moderocky Moderocky marked this pull request as draft December 29, 2024 20:02
@Moderocky Moderocky removed the 2.10 Targeting a 2.10.X version release label Dec 31, 2024
@Olyno Olyno marked this pull request as ready for review January 7, 2025 16:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Feature request, an issue about something that could be improved, or a PR improving something.
Projects
None yet
Development

Successfully merging this pull request may close these issues.