http://www.perlmonks.org?node_id=174334


in reply to MoLD: Request for Advice

Clarification:
Most of our event code is unwieldy.
This is how I'd like it to work:

The Command_processor should have the following information in it for each valid command: Valid Command - "move west" Pre Acceptance Checking - "can I 'move west'" Event Class - "what kind of event is 'move west'" Event Delay - "how long will moving west take?" Event - "how do I 'move west'" The Command_Processor will most likely have CODEREFS for each of the data types, except for Event Class. For efficiency, Command_Processor will contain a single hash of hashes... perhaps like the following: $self->{matrix}= ( "move west"=> ( "Test"=>\&Player::MoveTest('west'), "Class"=>"Player", "Delay"=>\&Player::MoveDelay('walk'), "Event"=>\&Player::Move('west') ), "run west" => ( "Test"=>\&Player::MoveTest('west'), "Class"=>"Player", "Delay"=>sub { return int (100/($DEXTERITY /2) +)} , # OR ## "Delay"=>\&Player::MoveDelay('run'), "Event"=>\&Player::Move('west') ), } ############################################################### So when the command processor recieves a request, it first checks for the validity of the command: return $INVALID_CMD unless defined ($self->{matrix}->{$NEWCOMM +AND}); And then: return $CMD_FAIL unless &$self->{matrix}->{$NEWCOMMAND}->{'Tes +t'}; and if everything is okay: return $self->{eventqueue}->event_add( &$self->{matrix}->{$NEWCOMMAND}->{'Delay'}, &$self->{matrix}->{$NEWCOMMAND}->{'Event'} ); And this is how it should work. ###############################################################