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