Skip to content

Introduces toggle effect & expression #4154

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

Merged
merged 127 commits into from
May 14, 2025

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
@sovdeeth
Copy link
Member

yes these are standard style convention for Skript

@sovdeeth sovdeeth added the feature-ready A PR/issue that has been approved, tested and can be merged/closed in the next feature version. label Mar 17, 2025
@sovdeeth sovdeeth dismissed stale reviews from TPGamesNL and AyhamAl-Ali March 17, 2025 19:24

stale

@Olyno
Copy link
Contributor Author

Olyno commented Mar 17, 2025

When you say unresolved, what do you mean exactly? @Efnilite

@sovdeeth sovdeeth removed the feature-ready A PR/issue that has been approved, tested and can be merged/closed in the next feature version. label Mar 20, 2025
@Olyno Olyno requested a review from a team as a code owner March 26, 2025 22:06
Olyno and others added 3 commits March 26, 2025 23:08
Co-authored-by: Ayham Al Ali <20037329+AyhamAl-Ali@users.noreply.github.com>
Copy link
Member

@sovdeeth sovdeeth left a comment

Choose a reason for hiding this comment

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

looks great

Olyno and others added 2 commits March 27, 2025 00:29
Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com>
Copy link
Member

@APickledWalrus APickledWalrus left a comment

Choose a reason for hiding this comment

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

A few minor things. Looking really good with all of the changes! Great work

@Olyno Olyno requested a review from APickledWalrus May 4, 2025 16:26
@APickledWalrus
Copy link
Member

Great work! Thanks for your longtime effort on this.

@Efnilite Efnilite added the feature-ready A PR/issue that has been approved, tested and can be merged/closed in the next feature version. label May 13, 2025
@sovdeeth sovdeeth merged commit 5178ac2 into SkriptLang:dev/feature May 14, 2025
5 checks passed
@sovdeeth sovdeeth moved this to Done in 2.12 Release May 14, 2025
@Olyno Olyno deleted the feature/toggleChanger branch May 17, 2025 21:32
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. feature-ready A PR/issue that has been approved, tested and can be merged/closed in the next feature version.
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.