
require 'StateMachine.rb'


class QuadState < MachineState
    
    include Observable
    
    def initialize(name)
        super(name)
        
        idle    = MachineState.new(@name+"-IDLE")
        running = MachineState.new(@name+"-RUNNING")
        paused  = MachineState.new(@name+"-PAUSED")
        done    = MachineState.new(@name+"-DONE")
        
        idle   .all_events = [["start", proc{|x| running }]]
        running.all_events = [["pause", proc{|x| paused  }],
                              ["stop" , proc{|x| done    }]]
        paused .all_events = [["resume",proc{|x| running }]]

        @states = [idle, running, paused, done]
        
        @states.each{|state| state.add_observer(self) }

        @machine = StateMachine.new(@states).run
        
    end

    def update(*args)
        notify_observers(*args)
    end

    def on_event(evt)
        p "QuadState on_event(#{evt})"
        @machine.on_event(evt)
        nil
    end

end

