diff --git a/hGameTest/project.xml b/hGameTest/project.xml index eaad2b00..3dabf948 100644 --- a/hGameTest/project.xml +++ b/hGameTest/project.xml @@ -16,10 +16,10 @@ + - diff --git a/hGameTest/res/fonts/Terminus.ttf b/hGameTest/res/fonts/Terminus.ttf new file mode 100644 index 00000000..eafa3a6e Binary files /dev/null and b/hGameTest/res/fonts/Terminus.ttf differ diff --git a/hGameTest/src/Main.hx b/hGameTest/src/Main.hx index 2f3023dc..455e07fb 100644 --- a/hGameTest/src/Main.hx +++ b/hGameTest/src/Main.hx @@ -1,33 +1,33 @@ +import game.video.Mode; import openfl.events.KeyboardEvent; import openfl.display.Sprite; import openfl.display.Stage; import openfl.events.Event; +import game.Input; import game.Game; +import game.video.Mode; class Main extends Sprite { public function new () { super (); + this.addEventListener(Event.ADDED_TO_STAGE, onInit); + //stage.application.window.resize(1920, 1080); + //stage.application.window.title = "Kanker"; + } + private function onInit(e:Event) + { stage.frameRate = 1000; var game:Game = new Game(stage); - game.onInit(); stage.addEventListener(Event.ENTER_FRAME, game.onEnterFrame); - stage.addEventListener(KeyboardEvent.KEY_DOWN,keyIsDown); - stage.addEventListener(KeyboardEvent.KEY_UP,keyIsUp); + stage.addEventListener(KeyboardEvent.KEY_DOWN,Input.onKeyIsDown); + stage.addEventListener(KeyboardEvent.KEY_UP,Input.onKeyIsUp); stage.addEventListener(Event.RESIZE,onResize); - stage.application.window.resize(1920, 1080); - stage.application.window.title = "Kanker"; - - } + game.onInit(); + Mode.setVideoMode(1920, 1080); + } private function onResize (event:Event):Void { //Here we can do shit with window scaling //stage.stageWidth; //stage.stageHeight; } - - private function keyIsDown(e:KeyboardEvent){ - Game.keys[e.keyCode] = true; - } - private function keyIsUp(e:KeyboardEvent){ - Game.keys[e.keyCode] = false; - } } \ No newline at end of file diff --git a/hGameTest/src/game/Bind.hx b/hGameTest/src/game/Bind.hx index 854df82a..5d2534a8 100644 --- a/hGameTest/src/game/Bind.hx +++ b/hGameTest/src/game/Bind.hx @@ -1,8 +1,10 @@ package game; class Bind{ - - public function new(){ - + public var key:Int; + public var action:String; + public function new(key:Int, action:String){ + this.key = key; + this.action = action; } } \ No newline at end of file diff --git a/hGameTest/src/game/Game.hx b/hGameTest/src/game/Game.hx index 5c8eed6e..7ce63366 100644 --- a/hGameTest/src/game/Game.hx +++ b/hGameTest/src/game/Game.hx @@ -1,5 +1,7 @@ package game; +import openfl.display.DisplayObject; +import game.ui.Console; import game.entities.Player; import assets.tilesets.TilesetGeneric; import assets.tilesets.Tileset; @@ -11,30 +13,47 @@ import openfl.display.Sprite; import openfl.ui.Keyboard; import openfl.events.Event; import openfl.Assets; +import openfl.display.DisplayObject; import assets.Scanner; import assets.HTex; import openfl.Lib; import openfl.display.StageDisplayState; +import game.ui.ConVar; class Game { public var stage:Stage; + public var gameLayer:Sprite; + public var uiLayer:Sprite; public function new(_stage:Stage){ stage = _stage; Scanner.scanTextureDir(); for(tex in Scanner.textures){ HTex.createTextureObjectFromJSON(tex); } + + gameLayer = new Sprite(); + uiLayer = new Sprite(); + + + trace("wattafak"); } public var player:Player; + public var console:Console = new game.ui.Console(); public function onInit():Void { - + gameLayer = new Sprite(); + uiLayer = new Sprite(); + stage.addChild(gameLayer); + stage.addChild(uiLayer); //player.graphics.lineStyle(2,0xFF0000); //player.graphics.drawRect(0,0,16,16); // var bitmapData:BitmapData = Assets.getBitmapData("textures/sprites/character.png"); player = new Player(); - stage.addChild(player.sprite); + console = new Console(); + gameLayer.addChild(player.sprite); + uiLayer.addChild(console); + ConVar.setCVar("echo", "blaw"); //var sheet:SpriteSheet = new SpriteSheet(sheetData); //var playerBitmap:Bitmap = new Bitmap(Tileset.tilesetMap["testsheet"].tileMap["testTile5"]); //var someotherbitmap:Bitmap = new Bitmap(Tileset.tilesetMap["testsheet"].tileMap["testTile3"]); @@ -43,20 +62,10 @@ class Game //TextureData.parseConfig(); //Sys. } - public static var keys:Array = []; - public static var keysLast:Array = []; public function onEnterFrame(e:Event):Void { - trace(keys); - if( keys[Keyboard.ALTERNATE] && keys[Keyboard.ENTER] && !keysLast[Keyboard.ALTERNATE] && !keysLast[Keyboard.ENTER] ){ - if(Lib.current.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){ - Lib.current.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; - } - else{ - Lib.current.stage.displayState = StageDisplayState.NORMAL; - } - } - keysLast = keys; + Input.onEnterFrame(); + //player.x++; //player.y++; } diff --git a/hGameTest/src/game/Input.hx b/hGameTest/src/game/Input.hx index 846c0c10..4acd444d 100644 --- a/hGameTest/src/game/Input.hx +++ b/hGameTest/src/game/Input.hx @@ -1,20 +1,95 @@ package game; +import game.ui.Console; +import game.video.Mode; import openfl.events.KeyboardEvent; +import openfl.ui.Keyboard in Kb; +import openfl.Lib; +import game.ui.CVarType; +import game.ui.CVar; +import game.ui.ConVar; class Input{ public static var keys:Array = []; public static var keysLast:Array = []; + public static var bindMap:Map = []; + //public static var bind:CVar = Convar.registerCVar("bind",CVarType.cCmd, null, ()->{ + // + //}); + public static var keyCodeMap:Map = [ + "HOME" => Kb.HOME, "END" => Kb.END, "INSERT" => Kb.INSERT, "DELETE" => Kb.DELETE, "PGUP" => Kb.PAGE_UP, "PGDN" => Kb.PAGE_DOWN, + "ESC" => Kb.ESCAPE, "F1" => Kb.F1, "F2" => Kb.F2, "F3" => Kb.F3, "F4" => Kb.F4, "F5" => Kb.F5, + "F6" => Kb.F6, "F7" => Kb.F7, "F8" => Kb.F8, "F9" => Kb.F9, "F10" => Kb.F10, "F11" => Kb.F11, + "F12" => Kb.F12, + "~" => Kb.BACKQUOTE, "1" => Kb.NUMBER_1, "2" => Kb.NUMBER_2, "3" => Kb.NUMBER_3, "4" => Kb.NUMBER_4, "5" => Kb.NUMBER_5, + "6" => Kb.NUMBER_6, "7" => Kb.NUMBER_7, "8" => Kb.NUMBER_8, "9" => Kb.NUMBER_9, "0" => Kb.NUMBER_0, + "TAB" => Kb.TAB, "Q" => Kb.Q, "W" => Kb.W, "E" => Kb.E, "R" => Kb.R, "T" => Kb.T, + "Y" => Kb.Y, "U" => Kb.U, "I" => Kb.I, "O" => Kb.O, "P" => Kb.P, "[" => Kb.LEFTBRACKET, + "]" => Kb.RIGHTBRACKET, "\\" => Kb.BACKSLASH, + "CAPSLOCK" => Kb.CAPS_LOCK, "A" => Kb.A, "S" => Kb.S, "D" => Kb.D, "F" => Kb.F, "G" => Kb.G, + "H" => Kb.H, "J" => Kb.J, "K" => Kb.K, "L" => Kb.L, "SEMICOLON" => Kb.SEMICOLON, "'" => Kb.QUOTE, + "ENTER" => Kb.ENTER, + "SHIFT" => Kb.SHIFT, "Z" => Kb.Z, "X" => Kb.X, "C" => Kb.C, "V" => Kb.V, "B" => Kb.B, + "N" => Kb.N, "M" => Kb.M, "COMMA" => Kb.COMMA, "PERIOD" => Kb.PERIOD, "/" => Kb.SLASH , + "CTRL" => Kb.CONTROL, "ALT" => Kb.ALTERNATE + ]; + public static var keyNameMap:Map = [ + Kb.HOME => "HOME", Kb.END => "END", Kb.INSERT => "INSERT", Kb.DELETE => "DELETE", Kb.PAGE_UP => "PGUP", Kb.PAGE_DOWN => "PGDN", + Kb.ESCAPE => "ESC", Kb.F1 => "F1", Kb.F2 => "F2", Kb.F3 => "F3", Kb.F4 => "F4", Kb.F5 => "F5", + Kb.F6 => "F6", Kb.F7 => "F7", Kb.F8 => "F8", Kb.F9 => "F9", Kb.F10 => "F10", Kb.F11 => "F11", + Kb.F12 => "F12", + Kb.BACKQUOTE => "~", Kb.NUMBER_1 => "1", Kb.NUMBER_2 => "2", Kb.NUMBER_3 => "3", Kb.NUMBER_4 => "4", Kb.NUMBER_5 => "5" , + Kb.NUMBER_6 => "6", Kb.NUMBER_7 => "7", Kb.NUMBER_8 => "8", Kb.NUMBER_9 => "9", Kb.NUMBER_0 => "0", + Kb.TAB => "TAB", Kb.Q => "Q", Kb.W => "W", Kb.E => "E", Kb.R => "R", Kb.T => "T", Kb.Y => "Y", + Kb.U => "U", Kb.I => "I", Kb.O => "O", Kb.P => "P", Kb.LEFTBRACKET => "[", Kb.RIGHTBRACKET => "]", Kb.BACKSLASH => "\\", + Kb.CAPS_LOCK => "CAPSLOCK", Kb.A => "A", Kb.S => "S", Kb.D => "D", Kb.F => "F", Kb.G => "G" , Kb.H => "H", + Kb.J => "J", Kb.K => "K" , Kb.L => "L", Kb.SEMICOLON => "SEMICOLON", Kb.QUOTE => "'", Kb.ENTER => "ENTER", + Kb.SHIFT => "SHIFT", Kb.Z => "Z", Kb.X => "X", Kb.C => "C", Kb.V => "V", Kb.B => "B", Kb.N => "N", + Kb.M => "M", Kb.COMMA => "COMMA",Kb.PERIOD => "PERIOD", Kb.SLASH => "/" , + Kb.CONTROL => "CTRL", Kb.ALTERNATE =>"ALT" + ]; public static function onKeyIsDown(e:KeyboardEvent){ keys[e.charCode] = true; } public static function onKeyIsUp(e:KeyboardEvent){ keys[e.charCode] = false; } + public static function resolveKeyName(key:Int):String + { + return keyNameMap[key]; + } + // public static function bind(input:Dynamic, action:String):Void + // { + // var key:Int; + // if(Std.is(input,Int)){ + // key = input; + // } + // else if(Std.is(input, String)){ + // var value:String = input; + // key = keyCodeMap[value.toUpperCase()]; + // } + + // } public static function onEnterFrame() { + if( keys[Kb.ALTERNATE] && keys[Kb.ENTER] && !keysLast[Kb.ALTERNATE] && !keysLast[Kb.ENTER] ){ + Mode.switchFsMode(); + } - keysLast = keys; + if ( keys[Kb.ENTER] && !keysLast[Kb.ENTER] && !keysLast[Kb.ALTERNATE]){ + if(Lib.current.stage.focus == Console.consoleIndex.cIn){ + Console.consoleIndex.submitInput(); + } + } + + for(i in 0...keys.length){ + keysLast[i] = keys[i]; + } + //trace("enter pressed: " + keys[Kb.ENTER] + "enter pressed last: " + keysLast[Kb.ENTER]); + //trace(keysLast[Kb.ENTER]); + //keysLast = keys; + //trace(keys[Kb.ENTER]); + //trace(keysLast[Kb.ENTER]); } } \ No newline at end of file diff --git a/hGameTest/src/game/ui/CVar.hx b/hGameTest/src/game/ui/CVar.hx new file mode 100644 index 00000000..cc5457b3 --- /dev/null +++ b/hGameTest/src/game/ui/CVar.hx @@ -0,0 +1,9 @@ +package game.ui; + + +typedef CVar = { + var name:String; + var type:CVarType; + var value:Dynamic; + @:optional var callback:Void -> Void; +}; diff --git a/hGameTest/src/game/ui/CVarType.hx b/hGameTest/src/game/ui/CVarType.hx new file mode 100644 index 00000000..32c4bb80 --- /dev/null +++ b/hGameTest/src/game/ui/CVarType.hx @@ -0,0 +1,9 @@ +package game.ui; + +enum CVarType { + CInt; + CFloat; + CString; + CBool; + CCmd; +} \ No newline at end of file diff --git a/hGameTest/src/game/ui/ConVar.hx b/hGameTest/src/game/ui/ConVar.hx new file mode 100644 index 00000000..7a715948 --- /dev/null +++ b/hGameTest/src/game/ui/ConVar.hx @@ -0,0 +1,33 @@ +package game.ui; + +import game.ui.CVar; +import game.ui.CVarType; + + +class ConVar{ + static var CVarMap:Map = []; + public static inline function registerCVar(_name:String, _type:CVarType, _value, _callback:Void->Void,_callOnSet:Bool=false) + { + if(CVarMap[_name]!=null){ + + return; + } + CVarMap[_name] = { + name : _name, + type : _type, + value : _value, + callback : _callback == null ? ()->{} : _callback + } + } + public static inline function setCVar(_name:String, _value:Dynamic) + { + if(CVarMap[_name] != null){ + CVarMap[_name] = _value; + } + else{ + Console.consoleIndex.devMsg("trying to set null convar '"+_name+"'"); + } + + } + +} \ No newline at end of file diff --git a/hGameTest/src/game/ui/Console.hx b/hGameTest/src/game/ui/Console.hx new file mode 100644 index 00000000..9df94abe --- /dev/null +++ b/hGameTest/src/game/ui/Console.hx @@ -0,0 +1,78 @@ +package game.ui; + +import openfl.events.Event; +import openfl.text.TextFieldAutoSize; +import openfl.text.TextField; +import openfl.display.Sprite; +import openfl.Assets; +import openfl.text.TextFormat; +import openfl.text.TextFieldType; + +class Console extends Sprite{ + + public var textFormat:TextFormat; + public var cOut:TextField; + public var cIn:TextField; + public static var consoleIndex:Console; + public function new(){ + super(); + + consoleIndex = this; + + graphics.beginFill(0x111111); + graphics.drawRect(0,0,800,600); + + textFormat = new TextFormat(Assets.getFont("fonts/Terminus.ttf").fontName, 24, 0x00ff00); + + + + cIn = new TextField(); + cIn.type = TextFieldType.INPUT; + cIn.text = "b"; + cIn.multiline = false; + //cIn.autoSize = TextFieldAutoSize.LEFT; + cIn.width = 800-24; + cIn.height = 32; + + cIn.background = true; + cIn.backgroundColor = 0x000000; + cIn.selectable = true; + cIn.setTextFormat(textFormat); + cIn.y = 600-cIn.height-12; + cIn.x = 12; + + cOut = new TextField(); + cOut.text = "hConsole Initialized\n"; + cOut.setTextFormat(textFormat); + //cOut.autoSize = TextFieldAutoSize.LEFT; + cOut.multiline = true; + cOut.background = true; + cOut.backgroundColor = 0x000000; + cOut.width = 800 - 24; + cOut.height = 600 - cIn.height - 38; + cOut.y = 12; + cOut.x = 12; + + + cOut.addEventListener(Event.CHANGE, onOutputTextChange); + //cOut.addEventListener() + this.addChild(cOut); + this.addChild(cIn); + } + public function parseCmd(cmd:String){ + var parts:Array = cmd.split(" "); + } + public function submitInput(){ + parseCmd(cIn.text); + cOut.appendText(">"+cIn.text+"\n"); + cIn.text = ""; + cOut.scrollV = cOut.maxScrollV; + } + public function onOutputTextChange(e:Event){ + cOut.scrollV = cOut.maxScrollV; + } + public function devMsg(msg:String):Void + { + cOut.appendText(msg+"\n"); + } +} \ No newline at end of file diff --git a/hGameTest/src/game/video/Mode.hx b/hGameTest/src/game/video/Mode.hx new file mode 100644 index 00000000..eee4bb0a --- /dev/null +++ b/hGameTest/src/game/video/Mode.hx @@ -0,0 +1,29 @@ +package game.video; + +import openfl.Lib; +import openfl.display.StageDisplayState; + +class Mode +{ + public static function getWindow():lime.ui.Window + { + return Lib.application.window; + } + + public static function setVideoMode(width:Int, height:Int, fs:Int = null){ + getWindow().resize(width,height); + } + public static function switchFsMode(toState:Int = 0){ + if(toState == 0){ + if(Lib.current.stage.displayState != StageDisplayState.FULL_SCREEN_INTERACTIVE){ + Lib.current.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; + } + else{ + Lib.current.stage.displayState = StageDisplayState.NORMAL; + } + } + else{ + + } + } +} \ No newline at end of file