///////////////////////////////////////////////////////////////////////////////// // Copyright © 2008-2010 W. Kowarschick // // Dieses Werk darf unter den Bedingungen der Creative Common Lizenz by-nc 3.0 de // (http://creativecommons.org/licenses/by-nc/3.0/de/) // vervielfaeltigt, verbreitet, publiziert und modifiziert werden. ///////////////////////////////////////////////////////////////////////////////// package ldvcs.logic { import automaton.EventAutomaton; import automaton.IAutomaton; import ldvcs.data.IDataCar; [Bindable] public class LogicCar implements ILogicCar { ///////////////////////////////////////////////////////////////////////////// // LDVCS ///////////////////////////////////////////////////////////////////////////// private var v_data_car: IDataCar; public function set data(p_data_car: IDataCar): void { v_data_car = p_data_car; } ///////////////////////////////////////////////////////////////////////////// // Attributes ///////////////////////////////////////////////////////////////////////////// public var reaction: String = ""; private var v_automaton: IAutomaton; ///////////////////////////////////////////////////////////////////////////// // Constructor ///////////////////////////////////////////////////////////////////////////// public function LogicCar(p_automaton: IAutomaton) { v_automaton = p_automaton; // Mealy + MealyNoDefaults + Moore this.m_add_listener("engineOn"); this.m_add_listener("engineOff"); this.m_add_listener("gotFuel"); this.m_add_listener("driven"); this.m_add_listener("fuelConsumed"); this.m_add_listener("errorFuelConsumed"); // Mealy + Moore this.m_add_error_listener(EventAutomaton.ERROR); // MealyNoDefaults + MooreNoDefaults this.m_add_listener("errorEngineOff"); this.m_add_listener("errorEngineOn"); } ///////////////////////////////////////////////////////////////////////////// // Private methods ///////////////////////////////////////////////////////////////////////////// private function m_add_listener(p_reaction: String):void { v_automaton.addEventListener(p_reaction, o_reaction); } private function m_add_error_listener(p_reaction: String):void { v_automaton.addEventListener(p_reaction, o_error); } ///////////////////////////////////////////////////////////////////////////// // Observers ///////////////////////////////////////////////////////////////////////////// private function o_error(p_event: EventAutomaton): void { v_data_car.reaction = "Error: Action: " + p_event.action + ", State: " + p_event.state; } private function o_reaction(p_event: EventAutomaton): void { v_data_car.reaction = "Action: " + p_event.action + ", Reaction: " + p_event.type + ", State: " + p_event.state; } ///////////////////////////////////////////////////////////////////////////// // Public methods ///////////////////////////////////////////////////////////////////////////// public function startEngine(): void { v_automaton.doAction("startEngine"); } public function stopEngine(): void { v_automaton.doAction("stopEngine"); } public function drive(): void { v_automaton.doAction("drive"); } public function driveUntilFuelConsumed(): void { v_automaton.doAction("driveUntilFuelConsumed"); } public function refuel(): void { v_automaton.doAction("refuel"); } ///////////////////////////////////////////////////////////////////////////// // End of Class ///////////////////////////////////////////////////////////////////////////// } }