Add touchpad controls to editor; move dup to entity after spawned
This commit is contained in:
parent
d15c4ec6d1
commit
97483d4ce5
|
@ -1095,6 +1095,10 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
|||
str = JS_ToCString(js,argv[1]);
|
||||
app_name(str);
|
||||
break;
|
||||
|
||||
case 135:
|
||||
ret = float2js(cam_zoom());
|
||||
break;
|
||||
}
|
||||
|
||||
if (str)
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
|
||||
#include "stb_ds.h"
|
||||
|
||||
int32_t mouseWheelX = 0;
|
||||
int32_t mouseWheelY = 0;
|
||||
float deltaT = 0;
|
||||
|
||||
static int mouse_states[3] = {INPUT_UP};
|
||||
|
@ -29,7 +27,9 @@ JSValue jsany;
|
|||
JSValue jsmouse;
|
||||
JSValue jspos;
|
||||
JSValue jsmove;
|
||||
JSValue jsscroll;
|
||||
|
||||
cpVect mousewheel = {0,0};
|
||||
cpVect mouse_pos = {0, 0};
|
||||
cpVect mouse_delta = {0, 0};
|
||||
|
||||
|
@ -115,7 +115,7 @@ void input_mouse(int btn, int state, uint32_t mod)
|
|||
JS_FreeValue(js, argv[1]);
|
||||
}
|
||||
|
||||
void input_mouse_move(float x, float y, float dx, float dy)
|
||||
void input_mouse_move(float x, float y, float dx, float dy, uint32_t mod)
|
||||
{
|
||||
mouse_pos.x = x;
|
||||
mouse_pos.y = y;
|
||||
|
@ -132,10 +132,24 @@ void input_mouse_move(float x, float y, float dx, float dy)
|
|||
JS_FreeValue(js, argv[3]);
|
||||
}
|
||||
|
||||
void input_mouse_scroll(float x, float y)
|
||||
void input_mouse_scroll(float x, float y, uint32_t mod)
|
||||
{
|
||||
mouseWheelY = y;
|
||||
mouseWheelX = x;
|
||||
mousewheel.x = x;
|
||||
mousewheel.y = y;
|
||||
|
||||
JSValue argv[4];
|
||||
argv[0] = jsmouse;
|
||||
char out[16] = {0};
|
||||
snprintf(out, 16, "%s%s%sscroll",
|
||||
mod & SAPP_MODIFIER_CTRL ? "C-" : "",
|
||||
mod & SAPP_MODIFIER_ALT ? "M-" : "",
|
||||
mod & SAPP_MODIFIER_SUPER ? "S-" : ""
|
||||
);
|
||||
argv[1] = JS_NewString(js,out);
|
||||
argv[2] = vec2js(mousewheel);
|
||||
script_callee(pawn_callee, 3, argv);
|
||||
JS_FreeValue(js, argv[1]);
|
||||
JS_FreeValue(js, argv[2]);
|
||||
}
|
||||
|
||||
void input_btn(int btn, int state, uint32_t mod)
|
||||
|
@ -232,6 +246,7 @@ void input_init() {
|
|||
jsmouse = str2js("mouse");
|
||||
jspos = str2js("pos");
|
||||
jsmove = str2js("move");
|
||||
jsscroll = str2js("scroll");
|
||||
|
||||
for (int i = 0; i < 512; i++)
|
||||
key_states[i] = INPUT_UP;
|
||||
|
@ -368,8 +383,7 @@ void call_input_down(int *key) {
|
|||
/* This is called once every frame - or more if we want it more! */
|
||||
void input_poll(double wait) {
|
||||
mouse_delta = cpvzero;
|
||||
mouseWheelX = 0;
|
||||
mouseWheelY = 0;
|
||||
mousewheel = cpvzero;
|
||||
|
||||
for (int i = 0; i < arrlen(downkeys); i++)
|
||||
call_input_down(&downkeys[i]);
|
||||
|
|
|
@ -8,9 +8,7 @@
|
|||
#include <chipmunk/chipmunk.h>
|
||||
#include <stdint.h>
|
||||
|
||||
extern int32_t mouseWheelX;
|
||||
extern int32_t mouseWheelY;
|
||||
|
||||
extern cpVect mousewheel;
|
||||
extern cpVect mouse_pos;
|
||||
extern cpVect mouse_delta;
|
||||
|
||||
|
@ -28,8 +26,8 @@ void cursor_show();
|
|||
void set_mouse_mode(int mousemode);
|
||||
|
||||
void input_mouse(int btn, int state, uint32_t mod);
|
||||
void input_mouse_move(float x, float y, float dx, float dy);
|
||||
void input_mouse_scroll(float x, float y);
|
||||
void input_mouse_move(float x, float y, float dx, float dy, uint32_t mod);
|
||||
void input_mouse_scroll(float x, float y, uint32_t mod);
|
||||
void input_btn(int btn, int state, uint32_t mod);
|
||||
void input_key(int key, uint32_t mod);
|
||||
|
||||
|
|
|
@ -213,11 +213,11 @@ void c_event(const sapp_event *e)
|
|||
|
||||
switch (e->type) {
|
||||
case SAPP_EVENTTYPE_MOUSE_MOVE:
|
||||
input_mouse_move(e->mouse_x, e->mouse_y, e->mouse_dx, e->mouse_dy);
|
||||
input_mouse_move(e->mouse_x, e->mouse_y, e->mouse_dx, e->mouse_dy, e->modifiers);
|
||||
break;
|
||||
|
||||
case SAPP_EVENTTYPE_MOUSE_SCROLL:
|
||||
input_mouse_scroll(e->scroll_x, e->scroll_y);
|
||||
input_mouse_scroll(e->scroll_x, e->scroll_y, e->modifiers);
|
||||
break;
|
||||
|
||||
case SAPP_EVENTTYPE_KEY_DOWN:
|
||||
|
|
|
@ -6,6 +6,7 @@ prototypes.generate_ur('.');
|
|||
|
||||
var editor_config = {
|
||||
grid_size: 100,
|
||||
ruler_mark_px: 100,
|
||||
grid_color: [99, 255, 128, 100],
|
||||
};
|
||||
|
||||
|
@ -164,16 +165,8 @@ var editor = {
|
|||
var objs = x.slice();
|
||||
var duped = [];
|
||||
|
||||
objs.forEach(function(x) {
|
||||
var newobj = this.edit_level.spawn(x.ur);
|
||||
//dainty_assign(newobj, x);
|
||||
Object.assign(newobj,x);
|
||||
newobj.pos = x.pos;
|
||||
newobj.angle = x.angle;
|
||||
duped.push(newobj);
|
||||
} ,this);
|
||||
|
||||
return duped.flat();
|
||||
objs.forEach(function(x) { duped.push(x.dup()); } );
|
||||
return duped;
|
||||
},
|
||||
|
||||
sel_start: [],
|
||||
|
@ -576,17 +569,23 @@ var editor = {
|
|||
});
|
||||
|
||||
Debug.draw_grid(1, editor_config.grid_size/editor.camera.zoom, editor_config.grid_color);
|
||||
var startgrid = screen2world([-20,Window.height]).map(function(x) { return Math.snap(x, editor_config.grid_size); }, this);
|
||||
var startgrid = screen2world([-20,Window.height]).map(function(x) { return Math.snap(x, editor_config.grid_size); });
|
||||
var endgrid = screen2world([Window.width, 0]);
|
||||
|
||||
var w_step = Math.round(editor_config.ruler_mark_px/Window.width * (endgrid.x-startgrid.x)/editor_config.grid_size)*editor_config.grid_size;
|
||||
if (w_step === 0) w_step = editor_config.grid_size;
|
||||
|
||||
var h_step = Math.round(editor_config.ruler_mark_px/Window.height * (endgrid.y-startgrid.y)/editor_config.grid_size)*editor_config.grid_size;
|
||||
if (h_step === 0) h_step = editor_config.grid_size;
|
||||
|
||||
while(startgrid[0] <= endgrid[0]) {
|
||||
GUI.text(startgrid[0], [world2screen([startgrid[0], 0])[0],0]);
|
||||
startgrid[0] += editor_config.grid_size;
|
||||
startgrid[0] += w_step;
|
||||
}
|
||||
|
||||
while(startgrid[1] <= endgrid[1]) {
|
||||
GUI.text(startgrid[1], [0, world2screen([0, startgrid[1]])[1]]);
|
||||
startgrid[1] += editor_config.grid_size;
|
||||
startgrid[1] += h_step;
|
||||
}
|
||||
|
||||
/* Draw selection box */
|
||||
|
@ -948,12 +947,7 @@ editor.inputs['C-n'] = function() {
|
|||
editor.inputs['C-n'].doc = "Open a new level.";
|
||||
|
||||
editor.inputs['C-o'] = function() {
|
||||
if (editor.check_level_nested()) {
|
||||
Log.warn("Nested level ...");
|
||||
return;
|
||||
}
|
||||
|
||||
if (editor.edit_level.dirty) {
|
||||
if (editor.edit_level.dirty()) {
|
||||
editor.openpanel(gen_notify("Level is changed. Are you sure you want to close it?", function() {
|
||||
editor.clear_level();
|
||||
editor.openpanel(openlevelpanel);
|
||||
|
@ -1219,6 +1213,16 @@ editor.inputs.mouse.move = function(pos, dpos)
|
|||
});
|
||||
}
|
||||
|
||||
editor.inputs.mouse['C-scroll'] = function(scroll)
|
||||
{
|
||||
editor.camera.pos = editor.camera.pos.sub(scroll.scale(editor.camera.zoom * 3).scale([1,-1]));
|
||||
}
|
||||
|
||||
editor.inputs.mouse['C-M-scroll'] = function(scroll)
|
||||
{
|
||||
editor.camera.zoom += scroll.y/100;
|
||||
}
|
||||
|
||||
editor.inputs['C-M-S-lm'] = function() { editor.selectlist[0].set_center(Mouse.worldpos); };
|
||||
editor.inputs['C-M-S-lm'].doc = "Set world center to mouse position.";
|
||||
|
||||
|
@ -1425,7 +1429,6 @@ var inputpanel = {
|
|||
|
||||
start() {},
|
||||
|
||||
|
||||
close() {
|
||||
Player.players[0].uncontrol(this);
|
||||
if (this.stolen) {
|
||||
|
@ -1918,5 +1921,4 @@ if (IO.exists("editor.config"))
|
|||
/* This is the editor level & camera - NOT the currently edited level, but a level to hold editor things */
|
||||
editor.clear_level();
|
||||
editor.camera = Game.camera;
|
||||
|
||||
Game.stop();
|
||||
|
|
|
@ -44,14 +44,6 @@ var gameobject = {
|
|||
this.draw_layer = Nuke.radio(i, this.draw_layer, i);
|
||||
},
|
||||
|
||||
|
||||
|
||||
dup(diff) {
|
||||
var dup = World.spawn(gameobjects[this.from]);
|
||||
Object.assign(dup, diff);
|
||||
return dup;
|
||||
},
|
||||
|
||||
ed_locked: false,
|
||||
|
||||
_visible: true,
|
||||
|
@ -66,11 +58,6 @@ var gameobject = {
|
|||
},
|
||||
|
||||
mass: 1,
|
||||
bodytype: {
|
||||
dynamic: 0,
|
||||
kinematic: 1,
|
||||
static: 2
|
||||
},
|
||||
|
||||
phys: 2,
|
||||
phys_nuke() {
|
||||
|
@ -283,6 +270,13 @@ var gameobject = {
|
|||
disable() { this.components.forEach(function(x) { x.disable(); });},
|
||||
enable() { this.components.forEach(function(x) { x.enable(); });},
|
||||
sync() { },
|
||||
dirty() { return false; },
|
||||
|
||||
dup(diff) {
|
||||
var dup = Primum.spawn(this.ur);
|
||||
Object.assign(dup, this);
|
||||
return dup;
|
||||
},
|
||||
|
||||
kill() {
|
||||
if (this.body === -1) {
|
||||
|
@ -385,6 +379,7 @@ gameobject.make_parentable = function(obj) {
|
|||
obj.add_child = function(child) {
|
||||
child.unparent();
|
||||
objects.push(child);
|
||||
child.level = obj;
|
||||
}
|
||||
|
||||
/* Reparent this object to a new one */
|
||||
|
@ -393,11 +388,13 @@ gameobject.make_parentable = function(obj) {
|
|||
return;
|
||||
|
||||
parent.add_child(obj);
|
||||
obj.level = parent;
|
||||
}
|
||||
|
||||
obj.unparent = function() {
|
||||
if (!obj.level) return;
|
||||
obj.level.remove_child(obj);
|
||||
obj.parent = undefined;
|
||||
}
|
||||
obj.objects = objects;
|
||||
}
|
||||
|
@ -553,22 +550,22 @@ prototypes.generate_ur = function(path)
|
|||
var ur = prototypes.ur;
|
||||
|
||||
prototypes.from_obj("camera2d", {
|
||||
phys: gameobject.bodytype.kinematic,
|
||||
phys: Physics.kinematic,
|
||||
speed: 300,
|
||||
|
||||
get zoom() { return this._zoom; },
|
||||
get zoom() { return cmd(135); },
|
||||
set zoom(x) {
|
||||
if (x <= 0) return;
|
||||
this._zoom = x;
|
||||
cmd(62, this._zoom);
|
||||
x = Math.clamp(x,0.1,10);
|
||||
cmd(62, x);
|
||||
},
|
||||
_zoom: 1.0,
|
||||
|
||||
speedmult: 1.0,
|
||||
|
||||
selectable: false,
|
||||
|
||||
view2world(pos) {
|
||||
return pos.mapc(mult, [1,-1]).add([-Window.width,Window.height].scale(0.5)).scale(this.zoom).add(this.pos);
|
||||
pos.y *= -1;
|
||||
return pos.add([-Window.width,Window.height].scale(0.5)).scale(this.zoom).add(this.pos);
|
||||
},
|
||||
|
||||
world2view(pos) {
|
||||
|
|
Loading…
Reference in a new issue