What he said :) Without kidding, using the binary type of variable
values and checking what the resulting value is, is the way we do it.
Don't ask me how it works, but it does :) (just to help pointing in the
right direction) 

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Martin
Wood
Sent: woensdag 25 januari 2006 20:05
To: Flashcoders mailing list
Subject: Re: [Flashcoders] checking combinations

i've got to go out now so cant give the full answer i have in my head,
but one way of tackling it is to make each state variable's value a
power of 2

a = 1
b = 2
c = 4
d = 8

then you know that any combination of them has a unique value. (its
basically a 4 bit number)

then to handle the dispatch depending on the state combination you can
build a function table.

functionTable = new Array();

// create a handler for the combination a + b functionTable[a + b] =
Delegate.create(this,combinationAB);

and when you check the variables just call the function directly from
the table :

// a,b,c,d are just passed as boolean flags here function
handleUpdate(a:boolean,b:boolean,c:boolean,d:boolean)
{
        // taking advantage of a true being 1 in flash
        // and ideally you would setup these numbers
        // as static class variables
        var state = a + (b * 2) + (c * 4) + (d * 8);
        
        // call the defined function
        functionTable[state]();
}

of course you could do a check first to see if the function is defined
and do something like log a warning or whatever is appropriate for your
situation.

hope that makes sense.

martin

eric dolecki wrote:
> I have 4 variables I need to check the states of routinely... and 
> combinations thereof.
> 
> I am assuming that if I have a counter, and interogate and += them 
> values, I can then check the value of the counter to determine the
combinations.
> 
> psudeo-code:
> 
> var counter:Number = 0;
> if ( a ){ counter += 2; }
> if ( b ){ counter += 3; }
> if ( c ){ counter += 6; }
> if ( d ){ counter += 12;}
> 
> if ( counter == 2 ){
>      // only a was true
> } else if ( counter == 3 ){
>      // only b was true
> }  ...
> 
> Which is fine, but thats gonna be one honkin' if else statement to 
> catch all the combinations.

> 
> Is there a better way of doing this that will catch all the possible 
> combinations in an elegant way?
> 
> - edolecki
> _______________________________________________
> Flashcoders mailing list
> [email protected]
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
> 

--
Martin Wood

http://relivethefuture.com/choronzon
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to