Add touch events, clipboard, virtual keyboard
This commit is contained in:
parent
4843981527
commit
8e941d55c9
|
@ -215,6 +215,17 @@ Range is given by a semantic versioning number, prefixed with nothing, a ~, or a
|
||||||
~ means that MAJOR and MINOR must match exactly, but any PATCH greater or equal is valid.
|
~ means that MAJOR and MINOR must match exactly, but any PATCH greater or equal is valid.
|
||||||
^ means that MAJOR must match exactly, but any MINOR and PATCH greater or equal is valid.`;
|
^ means that MAJOR must match exactly, but any MINOR and PATCH greater or equal is valid.`;
|
||||||
|
|
||||||
|
prosperon.iconified = function(icon) {};
|
||||||
|
prosperon.focus = function(focus) {};
|
||||||
|
prosperon.resize = function(dimensions) {};
|
||||||
|
prosperon.suspended = function(sus) {};
|
||||||
|
prosperon.mouseenter = function(){};
|
||||||
|
prosperon.mouseleave = function(){};
|
||||||
|
prosperon.touchpress = function(touches){};
|
||||||
|
prosperon.touchrelease = function(touches){};
|
||||||
|
prosperon.touchmove = function(touches){};
|
||||||
|
prosperon.clipboardpaste = function(str){};
|
||||||
|
|
||||||
global.mixin("scripts/input.js");
|
global.mixin("scripts/input.js");
|
||||||
global.mixin("scripts/std.js");
|
global.mixin("scripts/std.js");
|
||||||
console.level = 1;
|
console.level = 1;
|
||||||
|
|
|
@ -1,22 +1,26 @@
|
||||||
var keycodes = {
|
var keycodes = {
|
||||||
0x00E: "back",
|
259: "back",
|
||||||
0x00F: "tab",
|
258: "tab",
|
||||||
0x01C: "enter",
|
257: "enter",
|
||||||
0x001: "esc",
|
1: "escape",
|
||||||
0x039: "space",
|
32: "space",
|
||||||
0x149: "pgup",
|
266: "pgup",
|
||||||
0x151: "pgdown",
|
267: "pgdown",
|
||||||
0x14F: "end",
|
268: "home",
|
||||||
0x147: "home",
|
269: "end",
|
||||||
0x14B: "left",
|
263: "left",
|
||||||
0x148: "up",
|
265: "up",
|
||||||
0x14D: "right",
|
262: "right",
|
||||||
0x150: "down",
|
265: "down",
|
||||||
0x152: "insert",
|
260: "insert",
|
||||||
0x153: "delete",
|
261: "delete",
|
||||||
45: "minus",
|
45: "minus",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var codekeys = {};
|
||||||
|
for (var code in keycodes)
|
||||||
|
codekeys[keycodes[code]] = code;
|
||||||
|
|
||||||
var mod = {
|
var mod = {
|
||||||
shift: 0,
|
shift: 0,
|
||||||
ctrl: 0,
|
ctrl: 0,
|
||||||
|
@ -63,6 +67,7 @@ function modstr()
|
||||||
|
|
||||||
prosperon.keydown = function(key, repeat)
|
prosperon.keydown = function(key, repeat)
|
||||||
{
|
{
|
||||||
|
|
||||||
prosperon.keys[key] = true;
|
prosperon.keys[key] = true;
|
||||||
|
|
||||||
if (key == 341 || key == 345)
|
if (key == 341 || key == 345)
|
||||||
|
@ -232,6 +237,13 @@ input.action = {
|
||||||
actions: [],
|
actions: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
input.keyboard_show(show)
|
||||||
|
{
|
||||||
|
cmd(250,show);
|
||||||
|
}
|
||||||
|
|
||||||
|
input.keyboard_shown() { return cmd(248); }
|
||||||
|
|
||||||
/* May be a human player; may be an AI player */
|
/* May be a human player; may be an AI player */
|
||||||
var Player = {
|
var Player = {
|
||||||
players: [],
|
players: [],
|
||||||
|
@ -364,5 +376,7 @@ return {
|
||||||
Keys,
|
Keys,
|
||||||
input,
|
input,
|
||||||
Player,
|
Player,
|
||||||
player
|
player,
|
||||||
|
keycodes,
|
||||||
|
codekeys
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,11 +1,21 @@
|
||||||
os.cwd.doc = "Get the absolute path of the current working directory.";
|
os.cwd.doc = "Get the absolute path of the current working directory.";
|
||||||
os.env.doc = "Return the value of the environment variable v.";
|
os.env.doc = "Return the value of the environment variable v.";
|
||||||
os.platform = "steam";
|
os.platform = "steam";
|
||||||
if (os.sys === 'windows')
|
if (os.sys() === 'windows')
|
||||||
os.user = os.env("USERNAME");
|
os.user = os.env("USERNAME");
|
||||||
else
|
else
|
||||||
os.user = os.env("USER");
|
os.user = os.env("USER");
|
||||||
|
|
||||||
|
|
||||||
|
var appy = {};
|
||||||
|
appy.inputs = {};
|
||||||
|
if (os.sys() === 'macos') {
|
||||||
|
appy.inputs['S-q'] = function() { Game.quit(); };
|
||||||
|
appy.inputs['S-h'] = function() { };
|
||||||
|
}
|
||||||
|
|
||||||
|
player[0].control(appy);
|
||||||
|
|
||||||
var steam = {};
|
var steam = {};
|
||||||
steam.appid = 480;
|
steam.appid = 480;
|
||||||
steam.userid = 8437843;
|
steam.userid = 8437843;
|
||||||
|
|
|
@ -10,12 +10,14 @@
|
||||||
#include "resources.h"
|
#include "resources.h"
|
||||||
#include "jsffi.h"
|
#include "jsffi.h"
|
||||||
|
|
||||||
static struct callee pawn_callee;
|
|
||||||
static struct callee gamepad_callee;
|
|
||||||
|
|
||||||
void input_dropped_files(int n)
|
void input_dropped_files(int n)
|
||||||
{
|
{
|
||||||
script_evalf("prosperon.droppedfile('%s');", sapp_get_dropped_file_path(0));
|
script_evalf("prosperon.droppedfile(`%s`);", sapp_get_dropped_file_path(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void input_clipboard_paste(char *str)
|
||||||
|
{
|
||||||
|
script_evalf("prosperon.clipboardpaste(`%s`);", sapp_get_clipboard_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -29,9 +31,46 @@ void cursor_show() { sapp_show_mouse(1); }
|
||||||
|
|
||||||
void cursor_img(const char *path)
|
void cursor_img(const char *path)
|
||||||
{
|
{
|
||||||
/* NSString *str = [NSString stringWithUTF8String:path];
|
/* NSdesting *dest = [NSdesting destingWithUTF8desting:path];
|
||||||
NSImage *img = [[NSImage alloc] initWithContentsOfFile:str];
|
NSImage *img = [[NSImage alloc] initWithContentsOfFile:dest];
|
||||||
NSCursor *custom = [[NSCursor alloc] initWithImage:img hotSpot:NSMakePoint(0,0)];
|
NSCursor *custom = [[NSCursor alloc] initWithImage:img hotSpot:NSMakePoint(0,0)];
|
||||||
[custom set];
|
[custom set];
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *touch_jstrn(char *dest, int len, sapp_touchpoint *touch, int n)
|
||||||
|
{
|
||||||
|
dest[0] = 0;
|
||||||
|
char touchdest[512] = {0};
|
||||||
|
strncat(dest,"[", 512);
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
snprintf(touchdest, 512, "{id:%p, x:%g, y:%g},", touch[i].identifier, touch[i].pos_x, touch[i].pos_y);
|
||||||
|
strncat(dest,touchdest,512);
|
||||||
|
}
|
||||||
|
strncat(dest,"]", 512);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
void touch_start(sapp_touchpoint *touch, int n)
|
||||||
|
{
|
||||||
|
char dest[512] = {0};
|
||||||
|
script_evalf("prosperon.touchpress(%s);", touch_jstrn(dest, 512, touch, n));
|
||||||
|
}
|
||||||
|
|
||||||
|
void touch_move(sapp_touchpoint *touch, int n)
|
||||||
|
{
|
||||||
|
char dest[512] = {0};
|
||||||
|
script_evalf("prosperon.touchmove(%s);", touch_jstrn(dest,512,touch,n));
|
||||||
|
}
|
||||||
|
|
||||||
|
void touch_end(sapp_touchpoint *touch, int n)
|
||||||
|
{
|
||||||
|
char dest[512] = {0};
|
||||||
|
script_evalf("prosperon.touchend(%s);", touch_jstrn(dest,512,touch,n));
|
||||||
|
}
|
||||||
|
|
||||||
|
void touch_cancelled(sapp_touchpoint *touch, int n)
|
||||||
|
{
|
||||||
|
char dest[512] = {0};
|
||||||
|
script_evalf("prosperon.touchend(%s);", touch_jstrn(dest,512,touch,n));
|
||||||
|
}
|
||||||
|
|
|
@ -4,13 +4,19 @@
|
||||||
#include "script.h"
|
#include "script.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "HandmadeMath.h"
|
#include "HandmadeMath.h"
|
||||||
|
#include "sokol_app.h"
|
||||||
|
|
||||||
void cursor_hide();
|
void cursor_hide();
|
||||||
void cursor_show();
|
void cursor_show();
|
||||||
void cursor_img(const char *path);
|
void cursor_img(const char *path);
|
||||||
void set_mouse_mode(int mousemode);
|
void set_mouse_mode(int mousemode);
|
||||||
|
void touch_start(sapp_touchpoint *touch, int n);
|
||||||
|
void touch_move(sapp_touchpoint *touch, int n);
|
||||||
|
void touch_end(sapp_touchpoint *touch, int n);
|
||||||
|
void touch_cancelled(sapp_touchpoint *touch, int n);
|
||||||
|
|
||||||
void input_dropped_files(int n);
|
void input_dropped_files(int n);
|
||||||
|
void input_clipboard_paste(char *str);
|
||||||
|
|
||||||
const char *keyname_extd(int key);
|
const char *keyname_extd(int key);
|
||||||
|
|
||||||
|
|
|
@ -1401,10 +1401,16 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
||||||
case 234:
|
case 234:
|
||||||
ret = emitter2js(make_emitter());
|
ret = emitter2js(make_emitter());
|
||||||
break;
|
break;
|
||||||
|
case 248:
|
||||||
|
ret = bool2js(sapp_keyboard_shown());
|
||||||
|
break;
|
||||||
case 249:
|
case 249:
|
||||||
str = JS_ToCString(js,argv[2]);
|
str = JS_ToCString(js,argv[2]);
|
||||||
js2emitter(argv[1])->texture = texture_pullfromfile(str);
|
js2emitter(argv[1])->texture = texture_pullfromfile(str);
|
||||||
break;
|
break;
|
||||||
|
case 250:
|
||||||
|
sapp_show_keyboard(js2bool(argv[1]));
|
||||||
|
break;
|
||||||
case 251:
|
case 251:
|
||||||
js2gameobject(argv[1])->warp_filter = js2bitmask(argv[2]);
|
js2gameobject(argv[1])->warp_filter = js2bitmask(argv[2]);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -30,25 +30,25 @@ void window_resize(int width, int height)
|
||||||
float raspect = mainwin.rwidth/mainwin.rheight;
|
float raspect = mainwin.rwidth/mainwin.rheight;
|
||||||
mainwin.pheight = mainwin.rheight;
|
mainwin.pheight = mainwin.rheight;
|
||||||
mainwin.pwidth = mainwin.rwidth*aspect/raspect;
|
mainwin.pwidth = mainwin.rwidth*aspect/raspect;
|
||||||
|
|
||||||
JSValue vals[2] = { int2js(width), int2js(height) };
|
script_evalf("prosperon.resize([%d,%d]);", width,height);
|
||||||
send_signal("window_resize", 2, vals);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void window_focused(int focus)
|
void window_focused(int focus)
|
||||||
{
|
{
|
||||||
mainwin.focus = focus;
|
mainwin.focus = focus;
|
||||||
|
script_evalf("prosperon.focus(%d);", focus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void window_iconified(int s)
|
void window_iconified(int s)
|
||||||
{
|
{
|
||||||
mainwin.iconified = s;
|
mainwin.iconified = s;
|
||||||
|
script_evalf("prosperon.iconified(%d);", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void window_suspended(int s)
|
void window_suspended(int s)
|
||||||
{
|
{
|
||||||
|
script_evalf("prosperon.suspended(%d);", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void window_set_icon(const char *png) {
|
void window_set_icon(const char *png) {
|
||||||
|
|
|
@ -232,9 +232,30 @@ void c_event(const sapp_event *e)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SAPP_EVENTTYPE_FILES_DROPPED:
|
case SAPP_EVENTTYPE_FILES_DROPPED:
|
||||||
// input_mouse_move(e->mouse_x, e->mouse_y, e->mouse_dx, e->mouse_dy, e->modifiers);
|
|
||||||
input_dropped_files(sapp_get_num_dropped_files());
|
input_dropped_files(sapp_get_num_dropped_files());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SAPP_EVENTTYPE_MOUSE_ENTER:
|
||||||
|
script_evalf("prosperon.mouseenter();");
|
||||||
|
break;
|
||||||
|
case SAPP_EVENTTYPE_MOUSE_LEAVE:
|
||||||
|
script_evalf("prosperon.mouseleave();");
|
||||||
|
break;
|
||||||
|
case SAPP_EVENTTYPE_TOUCHES_BEGAN:
|
||||||
|
touch_start(e->touches, e->num_touches);
|
||||||
|
break;
|
||||||
|
case SAPP_EVENTTYPE_TOUCHES_MOVED:
|
||||||
|
touch_move(e->touches, e->num_touches);
|
||||||
|
break;
|
||||||
|
case SAPP_EVENTTYPE_TOUCHES_ENDED:
|
||||||
|
touch_end(e->touches, e->num_touches);
|
||||||
|
break;
|
||||||
|
case SAPP_EVENTTYPE_TOUCHES_CANCELLED:
|
||||||
|
touch_cancelled(e->touches, e->num_touches);
|
||||||
|
break;
|
||||||
|
case SAPP_EVENTTYPE_CLIPBOARD_PASTED:
|
||||||
|
input_clipboard_paste(sapp_get_clipboard_string());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue