Add touch events, clipboard, virtual keyboard
This commit is contained in:
parent
4843981527
commit
3e8bbdbeb2
|
@ -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 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/std.js");
|
||||
console.level = 1;
|
||||
|
|
|
@ -1,22 +1,26 @@
|
|||
var keycodes = {
|
||||
0x00E: "back",
|
||||
0x00F: "tab",
|
||||
0x01C: "enter",
|
||||
0x001: "esc",
|
||||
0x039: "space",
|
||||
0x149: "pgup",
|
||||
0x151: "pgdown",
|
||||
0x14F: "end",
|
||||
0x147: "home",
|
||||
0x14B: "left",
|
||||
0x148: "up",
|
||||
0x14D: "right",
|
||||
0x150: "down",
|
||||
0x152: "insert",
|
||||
0x153: "delete",
|
||||
259: "back",
|
||||
258: "tab",
|
||||
257: "enter",
|
||||
1: "escape",
|
||||
32: "space",
|
||||
266: "pgup",
|
||||
267: "pgdown",
|
||||
268: "home",
|
||||
269: "end",
|
||||
263: "left",
|
||||
265: "up",
|
||||
262: "right",
|
||||
265: "down",
|
||||
260: "insert",
|
||||
261: "delete",
|
||||
45: "minus",
|
||||
};
|
||||
|
||||
var codekeys = {};
|
||||
for (var code in keycodes)
|
||||
codekeys[keycodes[code]] = code;
|
||||
|
||||
var mod = {
|
||||
shift: 0,
|
||||
ctrl: 0,
|
||||
|
@ -63,6 +67,7 @@ function modstr()
|
|||
|
||||
prosperon.keydown = function(key, repeat)
|
||||
{
|
||||
|
||||
prosperon.keys[key] = true;
|
||||
|
||||
if (key == 341 || key == 345)
|
||||
|
@ -232,6 +237,13 @@ input.action = {
|
|||
actions: [],
|
||||
};
|
||||
|
||||
input.keyboard_show = function(show)
|
||||
{
|
||||
cmd(250,show);
|
||||
}
|
||||
|
||||
input.keyboard_shown = function() { return cmd(248); }
|
||||
|
||||
/* May be a human player; may be an AI player */
|
||||
var Player = {
|
||||
players: [],
|
||||
|
@ -364,5 +376,7 @@ return {
|
|||
Keys,
|
||||
input,
|
||||
Player,
|
||||
player
|
||||
player,
|
||||
keycodes,
|
||||
codekeys
|
||||
};
|
||||
|
|
|
@ -1,11 +1,21 @@
|
|||
os.cwd.doc = "Get the absolute path of the current working directory.";
|
||||
os.env.doc = "Return the value of the environment variable v.";
|
||||
os.platform = "steam";
|
||||
if (os.sys === 'windows')
|
||||
if (os.sys() === 'windows')
|
||||
os.user = os.env("USERNAME");
|
||||
else
|
||||
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 = {};
|
||||
steam.appid = 480;
|
||||
steam.userid = 8437843;
|
||||
|
|
|
@ -10,12 +10,14 @@
|
|||
#include "resources.h"
|
||||
#include "jsffi.h"
|
||||
|
||||
static struct callee pawn_callee;
|
||||
static struct callee gamepad_callee;
|
||||
|
||||
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)
|
||||
{
|
||||
/* NSString *str = [NSString stringWithUTF8String:path];
|
||||
NSImage *img = [[NSImage alloc] initWithContentsOfFile:str];
|
||||
/* NSdesting *dest = [NSdesting destingWithUTF8desting:path];
|
||||
NSImage *img = [[NSImage alloc] initWithContentsOfFile:dest];
|
||||
NSCursor *custom = [[NSCursor alloc] initWithImage:img hotSpot:NSMakePoint(0,0)];
|
||||
[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 <stdint.h>
|
||||
#include "HandmadeMath.h"
|
||||
#include "sokol_app.h"
|
||||
|
||||
void cursor_hide();
|
||||
void cursor_show();
|
||||
void cursor_img(const char *path);
|
||||
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_clipboard_paste(char *str);
|
||||
|
||||
const char *keyname_extd(int key);
|
||||
|
||||
|
|
|
@ -1401,10 +1401,16 @@ JSValue duk_cmd(JSContext *js, JSValueConst this, int argc, JSValueConst *argv)
|
|||
case 234:
|
||||
ret = emitter2js(make_emitter());
|
||||
break;
|
||||
case 248:
|
||||
ret = bool2js(sapp_keyboard_shown());
|
||||
break;
|
||||
case 249:
|
||||
str = JS_ToCString(js,argv[2]);
|
||||
js2emitter(argv[1])->texture = texture_pullfromfile(str);
|
||||
break;
|
||||
case 250:
|
||||
sapp_show_keyboard(js2bool(argv[1]));
|
||||
break;
|
||||
case 251:
|
||||
js2gameobject(argv[1])->warp_filter = js2bitmask(argv[2]);
|
||||
break;
|
||||
|
|
|
@ -30,25 +30,25 @@ void window_resize(int width, int height)
|
|||
float raspect = mainwin.rwidth/mainwin.rheight;
|
||||
mainwin.pheight = mainwin.rheight;
|
||||
mainwin.pwidth = mainwin.rwidth*aspect/raspect;
|
||||
|
||||
JSValue vals[2] = { int2js(width), int2js(height) };
|
||||
send_signal("window_resize", 2, vals);
|
||||
|
||||
script_evalf("prosperon.resize([%d,%d]);", width,height);
|
||||
}
|
||||
|
||||
void window_focused(int focus)
|
||||
{
|
||||
mainwin.focus = focus;
|
||||
script_evalf("prosperon.focus(%d);", focus);
|
||||
}
|
||||
|
||||
void window_iconified(int s)
|
||||
{
|
||||
mainwin.iconified = s;
|
||||
script_evalf("prosperon.iconified(%d);", s);
|
||||
}
|
||||
|
||||
|
||||
void window_suspended(int s)
|
||||
{
|
||||
|
||||
script_evalf("prosperon.suspended(%d);", s);
|
||||
}
|
||||
|
||||
void window_set_icon(const char *png) {
|
||||
|
|
|
@ -232,9 +232,30 @@ void c_event(const sapp_event *e)
|
|||
break;
|
||||
|
||||
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());
|
||||
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:
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue