4 Commits

Author SHA1 Message Date
24432f1b91 Implemented UIPane 2021-06-11 13:17:49 +02:00
07fa2e7868 Moved ConVar related files to engine 2021-04-28 09:32:47 +02:00
4fe14e341c removed unneeded class 2021-04-28 08:34:19 +02:00
c3ac30208b implemented keybinds 2021-04-28 08:29:55 +02:00
9 changed files with 320 additions and 64 deletions

View File

@@ -1,4 +1,4 @@
package game.ui; package engine;
typedef CVar = { typedef CVar = {

View File

@@ -1,4 +1,4 @@
package game.ui; package engine;
enum CVarType { enum CVarType {
CInt; CInt;

View File

@@ -1,4 +1,4 @@
package game.ui; package engine;
import haxe.Constraints.Function; import haxe.Constraints.Function;
import engine.typedefs.CVar; import engine.typedefs.CVar;

View File

@@ -1,10 +0,0 @@
package game;
class Bind{
public var key:Int;
public var action:String;
public function new(key:Int, action:String){
this.key = key;
this.action = action;
}
}

View File

@@ -7,7 +7,7 @@ import openfl.display.Sprite;
import openfl.events.Event; import openfl.events.Event;
import assets.Scanner; import assets.Scanner;
import assets.HTex; import assets.HTex;
import game.ui.ConVar; import engine.ConVar;
import game.ui.console.Console; import game.ui.console.Console;
class Game class Game
@@ -41,20 +41,9 @@ class Game
uiLayer = new Sprite(); uiLayer = new Sprite();
stage.addChild(gameLayer); stage.addChild(gameLayer);
stage.addChild(uiLayer); 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();
//gameLayer.addChild(player.sprite);
uiLayer.addChild(console); uiLayer.addChild(console);
var cvar_cl_kankerlow:CVar = ConVar.registerCVar("cl_kankerlow", CInt, 10, FCVAR_ARCHIVE, "is de speler een kankerlow?",null,false,false,0,0,false); //var cvar_cl_kankerlow:CVar = ConVar.registerCVar("cl_kankerlow", CInt, 10, FCVAR_ARCHIVE, "is de speler een kankerlow?",null,false,false,0,0,false);
//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"]);
//playerBitmap.scaleX = playerBitmap.scaleY = 10;
//player.addChild(playerBitmap);
//TextureData.parseConfig();
//Sys.
} }
public function onEnterFrame(e:Event):Void public function onEnterFrame(e:Event):Void
{ {

View File

@@ -1,5 +1,6 @@
package game; package game;
import openfl.text.TextField;
import engine.enums.CVarFlag; import engine.enums.CVarFlag;
import engine.typedefs.CCmd; import engine.typedefs.CCmd;
import game.ui.console.Console; import game.ui.console.Console;
@@ -9,16 +10,12 @@ import openfl.ui.Keyboard in Kb;
import openfl.Lib; import openfl.Lib;
import engine.enums.CVarType; import engine.enums.CVarType;
import engine.typedefs.CVar; import engine.typedefs.CVar;
import game.ui.ConVar; import engine.ConVar;
class Input{ class Input{
public static var keys:Map<Int,Bool> = []; public static var keys:Map<Int,Bool> = [];
public static var keysLast:Map<Int,Bool> = []; public static var keysLast:Map<Int,Bool> = [];
public static var bindMap:Map<String, String> = []; public static var bindMap:Map<String, String> = ["~" => "toggleconsole", "\\" => "toggleconsole", "1" => "echo kak", "2" => "+attack"];
//public static var bind:CVar = Convar.registerCVar("bind",CVarType.cCmd, null, ()->{
//
//});
public static var cv_debugKeys = ConVar.registerCVar("cl_debuginput", CInt, 0, null, "print debug messages related to input to console", null, false, true, 0, 0, false); public static var cv_debugKeys = ConVar.registerCVar("cl_debuginput", CInt, 0, null, "print debug messages related to input to console", null, false, true, 0, 0, false);
public static var keyNameMap:Map<Int, String> = [ public static var keyNameMap:Map<Int, String> = [
Kb.HOME => "HOME", Kb.END => "END", Kb.INSERT => "INSERT", Kb.DELETE => "DELETE", Kb.PAGE_UP => "PGUP", Kb.PAGE_DOWN => "PGDN", Kb.HOME => "HOME", Kb.END => "END", Kb.INSERT => "INSERT", Kb.DELETE => "DELETE", Kb.PAGE_UP => "PGUP", Kb.PAGE_DOWN => "PGDN",
@@ -46,9 +43,14 @@ class Input{
Console.devMsg(Std.string(keycode)); Console.devMsg(Std.string(keycode));
}); });
public static function onKeyIsDown(e:KeyboardEvent){ public static function onKeyIsDown(e:KeyboardEvent){
if(!Std.isOfType(Lib.current.stage.focus,TextField)){
Console.consoleInstance.parseCmd(bindMap[keyNameMap[e.keyCode]]);
}
if(!keys[e.keyCode]){ if(!keys[e.keyCode]){
if(cv_debugKeys.value > 0) if(cv_debugKeys.value == 1)
Console.devMsg("triggered key: "+keyNameMap[e.keyCode]); Console.devMsg("triggered key: "+keyNameMap[e.keyCode]);
else if(cv_debugKeys.value > 1 )
Console.devMsg(""+e.keyCode);
} }
keys[e.keyCode] = true; keys[e.keyCode] = true;
var key:String = keyNameMap[e.keyCode]; var key:String = keyNameMap[e.keyCode];
@@ -56,27 +58,40 @@ class Input{
} }
public static function onKeyIsUp(e:KeyboardEvent){ public static function onKeyIsUp(e:KeyboardEvent){
if(!Std.isOfType(Lib.current.stage.focus,TextField)){
if(bindMap[keyNameMap[e.keyCode]].indexOf("+") == 0){
Console.consoleInstance.parseCmd(StringTools.replace(bindMap[keyNameMap[e.keyCode]],"+","-"));
}
}
keys[e.keyCode] = false; keys[e.keyCode] = false;
} }
public static function resolveKeyName(key:Int):String // public static function resolveKeyName(key:Int):String
{
return keyNameMap[key];
}
// public static function bind(input:Dynamic, action:String):Void
// { // {
// var key:Int; // return keyNameMap[key];
// if(Std.is(input,Int)){
// key = input;
// }
// else if(Std.is(input, String)){
// var value:String = input;
// key = keyCodeMap[value.toUpperCase()];
// }
// } // }
public static function bindKey(input:String, action:String):Void
{
bindMap[input] = action;
}
private static var bind:CCmd = ConVar.registerCCmd("bind", (cArgs:Array<String>)->{ private static var bind:CCmd = ConVar.registerCCmd("bind", (cArgs:Array<String>)->{
cArgs[0] = cArgs[0].toUpperCase();
ConVar.runCmd("echo",cArgs); if(cArgs.length == 2){
if(keyCodeMap[cArgs[0]]!= null) {
if(cArgs[1].indexOf('"') == 0 && cArgs[1].lastIndexOf('"') == cArgs[1].length-1){
bindKey(cArgs[0], cArgs[1].substring(1,cArgs[1].length-1));
}
else{
bindKey(cArgs[0], cArgs[1]);
}
}
}
else if(cArgs.length == 1){
Console.devMsg(bindMap[cArgs[0]]);
}
else{
Console.devMsg("usage: bind <key> <command>");
}
}); });
public static function onEnterFrame() public static function onEnterFrame()
{ {
@@ -99,6 +114,12 @@ class Input{
if (keys[Kb.DOWN] && !keysLast[Kb.DOWN]){ if (keys[Kb.DOWN] && !keysLast[Kb.DOWN]){
Console.histNext(); Console.histNext();
} }
}
if(Console.consoleInstance.visible){
if (keys[Kb.ESCAPE]){
Console.toggle();
}
} }
keysLast = keys.copy(); keysLast = keys.copy();
} }

View File

@@ -1,15 +1,258 @@
package game.ui; package game.ui;
class UIPane{ import openfl.display.Sprite;
public static var paneList:Array<UIPane>=[]; import openfl.display.BitmapData;
public var x:Int; import openfl.display.DisplayObject;
public var y:Int; import openfl.text.TextField;
public var width:Int;
public var height:Int;
public var parent:UIPane;
public function new(){
typedef P2d = {
x:Float,
y:Float
}
enum PaneLayout{
HORIZONTAL;
VERTICAL;
}
enum PaneAnchor{
LEFT;
TOPLEFT;
TOP;
TOPRIGHT;
RIGHT;
BOTTOMLEFT;
BOTTOM;
BOTTOMRIGHT;
}
enum ExpandBehavior{
FACTOR;
ABSOLUTE;
STRETCH;
FILL;
FIT;
NONE;
}
enum PaneAlign{
START;
END;
}
typedef PaneDimensions = {
var width:Float;
var height:Float;
@:optional var expandBehavior:ExpandBehavior;
@:optional var minWidth:Float;
@:optional var minHeight:Float;
@:optional var maxWidth:Float;
@:optional var maxHeight:Float;
}
typedef PaneProps = {
dimensions:PaneDimensions,
layout:PaneLayout
}
class UIPane{
public var name:String;
public var sprite:Sprite;
public var x(get, set):Float;
public var y(get, set):Float;
function get_x(){ return sprite.x; }
function set_x(x){ return sprite.x = x; }
function get_y(){ return sprite.y; }
function set_y(y){ return sprite.y = y; }
public var dimensions:PaneDimensions;
public var width(get,set):Float;
function get_width(){
return dimensions.width;
}
function set_width(width){
dimensions.width = width;
onResize();
return width;
}
public var height(get,set):Float;
function get_height(){
return dimensions.height;
}
function set_height(height){
dimensions.height = height;
onResize();
return height;
}
public var layout:PaneLayout;
public var autoArrange:Bool = true;
public var autoArrangeChildren = true;
public var expand:Bool;
public var children:Array<UIPane> = [];
public var parent:UIPane = null;
public var align:PaneAlign = START;
public var maskSprite:Sprite;
public function new(_name:String, _dimensions:PaneDimensions)
{
// Set name
name = _name;
// Set dimensions
if(_dimensions != null){
dimensions = _dimensions;
}
else{
dimensions = {
width: 0,
height: 0,
minWidth: 0,
minHeight: 0,
maxWidth: 0,
maxHeight: 0
};
}
// Initialize Sprite
initSprite();
// Draw debug pane for visualizing
//drawDebugPane();
}
public function getAnchorOffset(anchor:PaneAnchor):P2d
{
switch(anchor){
case LEFT:
return {x:0,y:(height/2)};
case TOPLEFT:
return {x:0, y:0};
case TOP:
return {x:width/2,y:0};
case TOPRIGHT:
return {x:width, y:0};
case RIGHT:
return {x:width, y:height/2}
case BOTTOMRIGHT:
return {x:width, y:height};
case BOTTOM:
return {x:width/2, y:height};
case BOTTOMLEFT:
return {x:0, y:height};
}
}
public function initSprite():Void
{
// Construct Sprite object
sprite = new Sprite();
// Draw mask
//maskSprite = new Sprite();
//drawMask();
//sprite.addChild(maskSprite);
//sprite.mask = maskSprite;
} }
} public function drawMask():Void
{
maskSprite.graphics.clear();
maskSprite.graphics.beginFill(0xffffff);
maskSprite.graphics.drawRect(0,0,width,height);
}
public function drawDebugPane()
{
// Clear graphics
sprite.graphics.clear();
// Create objects we need to draw.
var label:TextField = new TextField();
var bmp = new BitmapData(Std.int(width),Std.int(height),true,0x00000000);
// Set textfield text to the panel name
label.text = name;
// Draw textfield to bitmap
bmp.draw(label);
// Draw graphics
sprite.graphics.beginFill(Std.int(Math.random()*0xffffff),0.5);
sprite.graphics.drawRect(0,0,dimensions.width,dimensions.height);
sprite.graphics.beginBitmapFill(bmp,null);
sprite.graphics.drawRect(0,0,dimensions.width,dimensions.height);
if(true){
sprite.graphics.beginFill(Std.int(Math.random()*0xffffff),0.5);
sprite.graphics.drawCircle(getAnchorOffset(TOPLEFT).x,getAnchorOffset(TOPLEFT).y,5);
sprite.graphics.drawCircle(getAnchorOffset(TOP).x,getAnchorOffset(TOP).y,5);
sprite.graphics.drawCircle(getAnchorOffset(TOPRIGHT).x,getAnchorOffset(TOPRIGHT).y,5);
sprite.graphics.drawCircle(getAnchorOffset(RIGHT).x,getAnchorOffset(RIGHT).y,5);
sprite.graphics.drawCircle(getAnchorOffset(BOTTOMRIGHT).x,getAnchorOffset(BOTTOMRIGHT).y,5);
sprite.graphics.drawCircle(getAnchorOffset(BOTTOM).x,getAnchorOffset(BOTTOM).y,5);
sprite.graphics.drawCircle(getAnchorOffset(BOTTOMLEFT).x,getAnchorOffset(BOTTOMLEFT).y,5);
sprite.graphics.drawCircle(getAnchorOffset(LEFT).x,getAnchorOffset(LEFT).y,5);
}
}
public var endOffset:Float = 0;
public var startOffset:Float = 0;
public function addChild(child:UIPane)
{
children.push(child);
sprite.addChild(child.sprite);
child.parent = this;
if(child.autoArrange && autoArrangeChildren){
arrangeChild(child);
}
return child;
}
public function redraw():Void
{
//drawDebugPane();
//drawMask();
}
public function onResize(){
redraw();
if(autoArrangeChildren){
arrangeChildren();
}
}
private function arrangeChild(child:UIPane){
if(child.autoArrange){
switch(layout){
case HORIZONTAL:
if(endOffset == 0) endOffset = width;
switch(child.dimensions.expandBehavior){
case STRETCH:
child.width = endOffset-startOffset;
child.height = height;
default:
child.height = height;
//
}
switch(child.align){
case START:
child.x = startOffset;
startOffset += child.width;
case END:
child.x = endOffset-= child.width;
}
case VERTICAL:
if(endOffset == 0) endOffset = height;
switch(child.dimensions.expandBehavior){
case STRETCH:
child.height = endOffset-startOffset;
child.width = width;
default:
child.width = width;
//
}
switch(child.align){
case START:
child.y = startOffset;
startOffset += child.height;
case END:
child.y = endOffset-=child.height;
}
}
}
}
public function arrangeChildren(){
startOffset = 0;
endOffset = 0;
for(child in children){
arrangeChild(child);
}
}
}

View File

@@ -12,7 +12,7 @@ import openfl.Assets;
import openfl.text.TextFormat; import openfl.text.TextFormat;
import openfl.text.TextFieldType; import openfl.text.TextFieldType;
import engine.typedefs.CVar; import engine.typedefs.CVar;
import game.ui.ConVar; import engine.ConVar;
import engine.typedefs.CCmd; import engine.typedefs.CCmd;
import game.ui.console.elements.ConsoleInput; import game.ui.console.elements.ConsoleInput;
@@ -26,6 +26,9 @@ class Console extends Sprite{
public var cAutoComp:TextField; public var cAutoComp:TextField;
public static var consoleInstance:Console; public static var consoleInstance:Console;
public var cvar_mat_consolebg:CVar; public var cvar_mat_consolebg:CVar;
public var cCmd_visible:CCmd = ConVar.registerCCmd("toggleconsole",(cArgs:Array<String>)->{
toggle();
});
public function new(){ public function new(){
super(); super();
@@ -88,8 +91,10 @@ class Console extends Sprite{
ConVar.registerCCmd("echo", (args:Array<String>) -> { Console.devMsg(args.join(" ").split('"').join(""));}); ConVar.registerCCmd("echo", (args:Array<String>) -> { Console.devMsg(args.join(" ").split('"').join(""));});
ConVar.registerCCmd("quit", (args:Array<String>) -> { Lib.application.window.close();}); ConVar.registerCCmd("quit", (args:Array<String>) -> { Lib.application.window.close();});
} }
public function parseCmd(cmd:String){ public function parseCmd(cmd:String, bNoHist:Bool = false){
history.push(cmd); if(!bNoHist)
history.push(cmd);
cmd = cmd.split(";").join(" ; "); cmd = cmd.split(";").join(" ; ");
var subStrings = []; var subStrings = [];
var startQuoteIndex:Int = cmd.indexOf('"'); var startQuoteIndex:Int = cmd.indexOf('"');
@@ -218,6 +223,14 @@ class Console extends Sprite{
public static function toggle():Void public static function toggle():Void
{ {
consoleInstance.visible = !consoleInstance.visible; consoleInstance.visible = !consoleInstance.visible;
if(!consoleInstance.visible){
if(Lib.current.stage.focus == consoleInstance.cIn){
Lib.current.stage.focus = null;
}
}
else{
Lib.current.stage.focus = consoleInstance.cIn;
}
} }
public static function devMsg(msg:String):Void public static function devMsg(msg:String):Void
{ {

View File

@@ -1,6 +1,6 @@
package game.video; package game.video;
import game.ui.ConVar; import engine.ConVar;
import openfl.Lib; import openfl.Lib;
import openfl.display.StageDisplayState; import openfl.display.StageDisplayState;