glasshouse/src/Game.hx

86 lines
1.8 KiB
Haxe

import Const;
import DialogueBox;
import DialogueManager;
import DialogueManager.Option;
@:publicFields
class Game extends hxd.App {
public var scene:h2d.Scene;
public var font:h2d.Font;
public var world:World;
public var curDialogue:h2d.Object;
public var actions:Array<h2d.ScaleGrid> = [];
public var dialogueManager:DialogueManager;
override function init() {
scene = s2d;
s2d.scaleMode = Stretch(Const.W, Const.H + 12);
world = new World(Res.map, Res.tiles);
s2d.add(world.root, 0);
font = Res.font.minecraftia_regular_6.toFont();
font.resizeTo(24);
dialogueManager = new DialogueManager(dialogue, renderActions);
var yarnText = [
hxd.Res.text.intro.entry.getText(),
];
var yarnFileNames = [
hxd.Res.text.intro.entry.name,
];
dialogueManager.load(yarnText, yarnFileNames);
dialogueManager.runNode("Intro");
}
public static var inst:Game;
function dialogue(manager:DialogueManager, t:String) {
var d = new DialogueBox(Const.W, 100, t);
d.y = 0;
d.onClick = function() {
manager.resume();
};
curDialogue = d;
}
function renderActions(manager:DialogueManager, t:Array<Option>) {
for (action in t) {
addAction(action.text, action.callback);
}
}
function newPanel(w, h) {
var g = new h2d.ScaleGrid(Res.ui.toTile(), 5, 5);
g.width = w;
g.height = h;
g.colorKey = 0xFF00FF;
scene.add(g, 1);
return g;
}
function addAction(a: String, callback: () -> Void) {
var spr = newPanel(Const.W, 60);
curDialogue.addChild(spr);
var tf = new h2d.Text(font, spr);
tf.text = a;
tf.x = 10;
tf.y = 10;
spr.x = 0;
spr.y = 100 + actions.length * 60;
var int = new h2d.Interactive(spr.width, spr.height, spr);
int.onClick = function(_) {
for (action in actions) {
action.remove();
}
callback();
// removeDialog();
}
int.cursor = Button;
actions.push(spr);
return spr;
}
}