Create account / Log in

Comparing Properties Between Game Pieces

Talk about module design ideas and techniques.

Moderators: Tim M, uckelman

Comparing Properties Between Game Pieces

Postby twenck » July 25th, 2018, 3:10 pm

I need to have a piece issue a GKC to other pieces that have a matching property.

The Module Designer's Guide has an example in which a counter has a GKC command with matching properties that includes "nation = $nation$".

This works correctly, comparing the property nation on the counter receiving the GKC, to the property $nation$ on the counter sending the GKC.

I need to make a more complex set of comparisons and therefore need to use a Beanshell Expression. I cannot come up with any method to compare property values between two pieces in a Beanshell Expression. I tried:

{nation = $nation$}
{nation = "$nation$}
etc.

Can anyone advise how to compare property values between two pieces using a Beanshell Expression?


Thank you,

Tom
twenck
 
Posts: 22
Joined: October 27th, 2017, 11:15 pm

Re: Comparing Properties Between Game Pieces

Postby DrNostromo » July 27th, 2018, 5:59 pm

Off the top of my head, I believe it would just be

{nation==nation}

The use of $ (dollar signs) to signify variables is a Vassal tool that is not recognized by beanshell but, if you use that syntax, clicking the Expression Builder button should convert Vassal syntax to a Beanshell compatible expression.
User avatar
DrNostromo
 
Posts: 987
Joined: December 21st, 2007, 3:54 am
Location: Wine Country, Cal. USA

Re: Comparing Properties Between Game Pieces

Postby Malnorma » July 28th, 2018, 9:56 pm

It seems unlikely that the same name would correctly refer to different objects without any kind of qualifier though.
Malnorma
 
Posts: 72
Joined: October 14th, 2015, 9:26 am

Re: Comparing Properties Between Game Pieces

Postby twenck » September 2nd, 2018, 4:28 pm

Malnorma is correct.

Even though converting nation=$nation$ by clicking on the Expression Builder button does yield {nation==nation},

{nation==nation} is always true because they do NOT refer to different objects -- this compares nation to itself.

Anyone have a solution? I do need to compare properties between two different game pieces using beanshell.
twenck
 
Posts: 22
Joined: October 27th, 2017, 11:15 pm

Re: Comparing Properties Between Game Pieces

Postby Brent Easton » September 3rd, 2018, 12:47 am

Comparing properties between two pieces is a bit tricky in Beanshell expressions. The old-style expressions had special coding which handled each side of the == differently.

As far as I can remember, you should be able to use $...$ inside a beanshell expression to force it to be evaluated on the source piece before being tested against the destination piece:

{nation=="$nation$"}

You original example above would have failed due to using = instead of == and no closing " (though that may be just typos when you where writing it up).

Regards,
Brent.
User avatar
Brent Easton
 
Posts: 2742
Joined: December 21st, 2007, 3:06 am
Location: Berry, NSW, Australia


Return to Module Design

Who is online

Users browsing this forum: No registered users and 2 guests