d
This commit is contained in:
parent
eab7cd0976
commit
f17c746162
|
@ -1,4 +1,4 @@
|
||||||
= Yugine Engine
|
= Yugine
|
||||||
|
|
||||||
The yugine essentially is made of a sequence of levels. Levels can be
|
The yugine essentially is made of a sequence of levels. Levels can be
|
||||||
nested, they can be streamed in, or loaded one at a time. Levels are
|
nested, they can be streamed in, or loaded one at a time. Levels are
|
||||||
|
@ -136,3 +136,17 @@ be rendered: is it a sprite, is it a texture, does it have mipmaps,
|
||||||
etc. Textures are all file based, and are only accessed through the
|
etc. Textures are all file based, and are only accessed through the
|
||||||
explicit path to their associated image file.
|
explicit path to their associated image file.
|
||||||
|
|
||||||
|
.Finding & Addressing Objects
|
||||||
|
|
||||||
|
|
||||||
|
.Editor & Debugging
|
||||||
|
Although intertwined, debugging functions and the editor are separate entities.
|
||||||
|
|
||||||
|
..Debugging
|
||||||
|
Debugging functions are mapped to the F buttons, and are always available during gameplay in a debug build. Pressing the F button toggles the feature; pressing it with ALT shows a legend for that feature; pressing it with CTRL shows additional info
|
||||||
|
|
||||||
|
,===
|
||||||
|
F1, Draw physics info
|
||||||
|
F3, Draw bounding boxes
|
||||||
|
F12, Drawing gui debugging info
|
||||||
|
,===
|
||||||
|
|
|
@ -236,7 +236,6 @@ int main(int argc, char **args) {
|
||||||
else
|
else
|
||||||
input_poll(1000);
|
input_poll(1000);
|
||||||
window_all_handle_events();
|
window_all_handle_events();
|
||||||
|
|
||||||
framems[framei++] = elapsed;
|
framems[framei++] = elapsed;
|
||||||
|
|
||||||
if (framei == FPSBUF) framei = 0;
|
if (framei == FPSBUF) framei = 0;
|
||||||
|
@ -245,6 +244,7 @@ int main(int argc, char **args) {
|
||||||
timer_update(elapsed * timescale);
|
timer_update(elapsed * timescale);
|
||||||
physlag += elapsed;
|
physlag += elapsed;
|
||||||
call_updates(elapsed * timescale);
|
call_updates(elapsed * timescale);
|
||||||
|
// TODO: Physics is not independent ...
|
||||||
// while (physlag >= physMS) {
|
// while (physlag >= physMS) {
|
||||||
phys_step = 1;
|
phys_step = 1;
|
||||||
physlag -= physMS;
|
physlag -= physMS;
|
||||||
|
|
|
@ -604,8 +604,8 @@ function bb_expand(oldbb, x) {
|
||||||
function bb_draw(bb, color) {
|
function bb_draw(bb, color) {
|
||||||
if (!bb) return;
|
if (!bb) return;
|
||||||
var draw = bb2cwh(bb);
|
var draw = bb2cwh(bb);
|
||||||
draw.wh[0] /= editor.camera.zoom;
|
draw.wh[0] /= Yugine.camera.zoom;
|
||||||
draw.wh[1] /= editor.camera.zoom;
|
draw.wh[1] /= Yugine.camera.zoom;
|
||||||
Debug.box(world2screen(draw.c), draw.wh, color);
|
Debug.box(world2screen(draw.c), draw.wh, color);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -673,14 +673,14 @@ var circle2d = clone(collider2d, {
|
||||||
|
|
||||||
complete_assign(circle, {
|
complete_assign(circle, {
|
||||||
set radius(x) { cmd_circle2d(0,this.id,x); },
|
set radius(x) { cmd_circle2d(0,this.id,x); },
|
||||||
get radius() { return cmd_circle2d(3,this.id); },
|
get radius() { return cmd_circle2d(2,this.id); },
|
||||||
|
|
||||||
set offset(x) { cmd_circle2d(1,this.id,this.offset); },
|
set offset(x) { cmd_circle2d(1,this.id,this.offset); },
|
||||||
get offset() { return cmd_circle2d(4,this.id); },
|
get offset() { return cmd_circle2d(3,this.id); },
|
||||||
|
|
||||||
get boundingbox() {
|
get boundingbox() {
|
||||||
var diameter = this.radius*2*this.gameobject.scale;
|
var diameter = this.radius*2*this.gameobject.scale;
|
||||||
return cwh2bb(this.offset.scale(this.gameobject.scale), [radius,radius]);
|
return cwh2bb(this.offset.scale(this.gameobject.scale), [this.radius,this.radius]);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,40 @@ var Debug = {
|
||||||
cmd(83, points, color, thickness);
|
cmd(83, points, color, thickness);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
draw_bb: false,
|
||||||
|
draw_gizmos: false,
|
||||||
|
draw_names: false,
|
||||||
|
|
||||||
|
draw() {
|
||||||
|
if (this.draw_bb)
|
||||||
|
Game.objects.forEach(function(x) { bb_draw(x.boundingbox); });
|
||||||
|
|
||||||
|
if (Game.paused()) gui_text("PAUSED", [0,0],1);
|
||||||
|
|
||||||
|
if (this.draw_gizmos)
|
||||||
|
Game.objects.forEach(function(x) {
|
||||||
|
if (!x.icon) return;
|
||||||
|
gui_img(x.icon, world2screen(x.pos));
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this.draw_names)
|
||||||
|
Game.objects.forEach(function(x) {
|
||||||
|
GUI.text(x.fullpath(), world2screen(x.pos).add([0,32]), 1, [84,110,255]);
|
||||||
|
});
|
||||||
|
/*
|
||||||
|
gui_text(sim_playing() ? "PLAYING"
|
||||||
|
: sim_paused() ?
|
||||||
|
"PAUSED" :
|
||||||
|
"STOPPED", [0, 0], 1);
|
||||||
|
*/
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
Debug.Options = { };
|
||||||
|
Debug.Options.Color = {
|
||||||
|
set trigger(x) { cmd(17,x); },
|
||||||
|
set debug(x) { cmd(16, x); },
|
||||||
};
|
};
|
||||||
|
|
||||||
var Gizmos = {
|
var Gizmos = {
|
||||||
|
@ -95,6 +129,8 @@ var Profile = {
|
||||||
|
|
||||||
Log.warn(`Profiled in ${(Date.now()-start)/1000} seconds.`);
|
Log.warn(`Profiled in ${(Date.now()-start)/1000} seconds.`);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get fps() { return sys_cmd(8); },
|
||||||
};
|
};
|
||||||
|
|
||||||
var Nuke = {
|
var Nuke = {
|
||||||
|
@ -190,9 +226,56 @@ var DebugControls = {
|
||||||
Debug.draw_phys(!Debug.phys_drawing);
|
Debug.draw_phys(!Debug.phys_drawing);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
input_f3_pressed() {
|
||||||
|
Debug.draw_bb = !Debug.draw_bb;
|
||||||
|
},
|
||||||
|
|
||||||
|
input_f5_pressed() {
|
||||||
|
if (Game.paused())
|
||||||
|
Game.play();
|
||||||
|
else
|
||||||
|
Game.pause();
|
||||||
|
},
|
||||||
|
|
||||||
|
input_f6_pressed() {
|
||||||
|
if (Game.paused())
|
||||||
|
Game.step();
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Toggle physics */
|
||||||
|
input_f7_pressed() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
input_1_pressed() {
|
||||||
|
if (!Keys.alt()) return;
|
||||||
|
Render.normal();
|
||||||
|
},
|
||||||
|
|
||||||
|
input_2_pressed() {
|
||||||
|
if (!Keys.alt()) return;
|
||||||
|
Render.wireframe();
|
||||||
|
},
|
||||||
|
|
||||||
|
input_f10_pressed() { Time.timescale = 0.1; },
|
||||||
|
input_f10_released() { Time.timescale = 1.0; },
|
||||||
input_f12_pressed() {
|
input_f12_pressed() {
|
||||||
GUI.defaults.debug = !GUI.defaults.debug;
|
GUI.defaults.debug = !GUI.defaults.debug;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
input_f4_pressed() {
|
||||||
|
Debug.draw_names = !Debug.draw_names;
|
||||||
|
Debug.draw_gizmos = !Debug.draw_gizmos;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
var Time = {
|
||||||
|
set timescale(x) { cmd(3, x); },
|
||||||
|
set updateMS(x) { cmd(6, x); },
|
||||||
|
set physMS(x) { cmd(7, x); },
|
||||||
|
set renderMS(x) { cmd(5, x); },
|
||||||
};
|
};
|
||||||
|
|
||||||
set_pawn(DebugControls);
|
set_pawn(DebugControls);
|
||||||
|
register_gui(Debug.draw, Debug);
|
||||||
|
|
|
@ -45,8 +45,6 @@ var editor = {
|
||||||
this.edit_mode = "basic";
|
this.edit_mode = "basic";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.draw_phys(!Debug.phys_drawing);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
input_f2_pressed() {
|
input_f2_pressed() {
|
||||||
|
@ -1210,27 +1208,6 @@ var editor = {
|
||||||
this.clear_level();
|
this.clear_level();
|
||||||
},
|
},
|
||||||
|
|
||||||
set timescale(x) { cmd(3, x); },
|
|
||||||
set updateMS(x) { cmd(6, x); },
|
|
||||||
set physMS(x) { cmd(7, x); },
|
|
||||||
set renderMS(x) { cmd(5, x); },
|
|
||||||
set dbg_draw_phys(x) { cmd(4, x); },
|
|
||||||
set dbg_color(x) { cmd(16, x); },
|
|
||||||
set trigger_color(x) { cmd(17, x); },
|
|
||||||
get fps() { return sys_cmd(8); },
|
|
||||||
input_f10_pressed() { this.timescale = 0.1; },
|
|
||||||
input_f10_released() { this.timescale = 1.0; },
|
|
||||||
|
|
||||||
input_1_pressed() {
|
|
||||||
if (!Keys.alt()) return;
|
|
||||||
Render.normal();
|
|
||||||
},
|
|
||||||
|
|
||||||
input_2_pressed() {
|
|
||||||
if (!Keys.alt()) return;
|
|
||||||
Render.wireframe();
|
|
||||||
},
|
|
||||||
|
|
||||||
_sel_comp: null,
|
_sel_comp: null,
|
||||||
get sel_comp() { return this._sel_comp; },
|
get sel_comp() { return this._sel_comp; },
|
||||||
set sel_comp(x) {
|
set sel_comp(x) {
|
||||||
|
@ -1263,9 +1240,6 @@ var editor = {
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
draw_gizmos: true,
|
|
||||||
|
|
||||||
input_f4_pressed() { this.draw_gizmos = !this.draw_gizmos; },
|
|
||||||
time: 0,
|
time: 0,
|
||||||
|
|
||||||
ed_gui() {
|
ed_gui() {
|
||||||
|
@ -1301,17 +1275,6 @@ var editor = {
|
||||||
|
|
||||||
gui_text("0,0", world2screen([0,0]), 1);
|
gui_text("0,0", world2screen([0,0]), 1);
|
||||||
|
|
||||||
if (this.draw_gizmos)
|
|
||||||
Game.objects.forEach(function(x) {
|
|
||||||
if (!x.icon) return;
|
|
||||||
gui_img(x.icon, world2screen(x.pos));
|
|
||||||
});
|
|
||||||
|
|
||||||
gui_text(sim_playing() ? "PLAYING"
|
|
||||||
: sim_paused() ?
|
|
||||||
"PAUSED" :
|
|
||||||
"STOPPED", [0, 0], 1);
|
|
||||||
|
|
||||||
var clvl = this.edit_level;
|
var clvl = this.edit_level;
|
||||||
var ypos = 200;
|
var ypos = 200;
|
||||||
var lvlcolor = Color.white;
|
var lvlcolor = Color.white;
|
||||||
|
@ -1395,10 +1358,6 @@ var editor = {
|
||||||
Debug.point(world2screen(this.selected_com), 3);
|
Debug.point(world2screen(this.selected_com), 3);
|
||||||
this.selected_com = find_com(this.selectlist);
|
this.selected_com = find_com(this.selectlist);
|
||||||
|
|
||||||
if (this.draw_bb) {
|
|
||||||
Game.objects.forEach(function(x) { bb_draw(x.boundingbox); });
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Draw selection box */
|
/* Draw selection box */
|
||||||
if (this.sel_start) {
|
if (this.sel_start) {
|
||||||
var endpos = screen2world(Mouse.pos);
|
var endpos = screen2world(Mouse.pos);
|
||||||
|
@ -1614,11 +1573,6 @@ var editor = {
|
||||||
|
|
||||||
repl: false,
|
repl: false,
|
||||||
input_backtick_pressed() { this.repl = !this.repl; },
|
input_backtick_pressed() { this.repl = !this.repl; },
|
||||||
|
|
||||||
draw_bb: false,
|
|
||||||
input_f3_pressed() {
|
|
||||||
this.draw_bb = !this.draw_bb;
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var inputpanel = {
|
var inputpanel = {
|
||||||
|
|
|
@ -1292,6 +1292,11 @@ var Level = {
|
||||||
|
|
||||||
return "Loose level";
|
return "Loose level";
|
||||||
},
|
},
|
||||||
|
|
||||||
|
fullpath() {
|
||||||
|
return `${this.level.fullpath()}.${this.name}`;
|
||||||
|
},
|
||||||
|
|
||||||
get boundingbox() {
|
get boundingbox() {
|
||||||
return bb_from_objects(this.objects);
|
return bb_from_objects(this.objects);
|
||||||
},
|
},
|
||||||
|
@ -1765,6 +1770,7 @@ var Level = {
|
||||||
|
|
||||||
var World = Level.create();
|
var World = Level.create();
|
||||||
World.name = "World";
|
World.name = "World";
|
||||||
|
World.fullpath = function() { return World.name; };
|
||||||
|
|
||||||
var gameobjects = {};
|
var gameobjects = {};
|
||||||
var Prefabs = gameobjects;
|
var Prefabs = gameobjects;
|
||||||
|
@ -2119,6 +2125,10 @@ var gameobject = {
|
||||||
var edited = !props.empty;
|
var edited = !props.empty;
|
||||||
return (edited ? "#" : "") + obj.name + " object " + obj.body + ", layer " + obj.draw_layer + ", phys " + obj.layer;
|
return (edited ? "#" : "") + obj.name + " object " + obj.body + ", layer " + obj.draw_layer + ", phys " + obj.layer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
obj.fullpath = function() {
|
||||||
|
return `${obj.level.fullpath()}.${obj.name}`;
|
||||||
|
};
|
||||||
obj.deflock('toString');
|
obj.deflock('toString');
|
||||||
obj.defc('from', this.name);
|
obj.defc('from', this.name);
|
||||||
obj.defn('body', make_gameobject(this.scale,
|
obj.defn('body', make_gameobject(this.scale,
|
||||||
|
|
Loading…
Reference in a new issue