package org.generalrelativity.input { import flash.display.Stage; import flash.events.KeyboardEvent; import org.generalrelativity.data.BitVector; public class Key { private static var instance:Key; private var map:BitVector; public function Key( singletonEnforcer:SingletonEnforcer ) { } public function isDown( keyCode:uint ) : Boolean { return map.getBit( keyCode ) == 1; } public function set stage( value:Stage ) : void { map = new BitVector( null, 256 ); value.addEventListener( KeyboardEvent.KEY_UP, onKeyUp ); value.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown ); } private function onKeyUp( event:KeyboardEvent ) : void { map.setBit( event.keyCode, false ); } private function onKeyDown( event:KeyboardEvent ) : void { map.setBit( event.keyCode, true ); } public static function getInstance() : Key { if( instance == null ) instance = new Key( new SingletonEnforcer() ); return instance; } } } class SingletonEnforcer{}