This commit is contained in:
mruac 2024-04-25 01:42:06 -07:00 committed by GitHub
commit 85cd65da00
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -887,11 +887,24 @@ class Player extends PrimaryView {
// TODO allow starting a level without moving?
// TODO if you don't move the touch, the player can pass it and will keep going in that
// direction?
let [px, py] = (()=>{
if (this.renderer.directional_touch_type === 0){
let [px, py] = this.level.player.visual_position();
px += 0.5;
py += 0.5;
return [px, py];
}else if (this.renderer.directional_touch_type === 1){
return [touch_target.offsetLeft + touch_target.offsetWidth / 2, touch_target.offsetTop + touch_target.offsetHeight / 2];
}
})();
for (let touch of ev.changedTouches) {
let [x, y] = this.renderer.point_to_real_cell_coords(touch.clientX, touch.clientY);
let [x, y] = (()=>{
if (this.renderer.directional_touch_type === 0){
return this.renderer.point_to_real_cell_coords(touch.clientX, touch.clientY);
}else if (this.renderer.directional_touch_type === 1){
return [touch.clientX, touch.clientY];
}
})();
let dx = x - px;
let dy = y - py;
// Divine a direction from the results
@ -1431,6 +1444,7 @@ class Player extends PrimaryView {
this.captions_el.textContent = '';
}
this.renderer.use_cc2_anim_speed = options.use_cc2_anim_speed ?? false;
this.renderer.directional_touch_type = options.directional_touch_type ?? 0;
if (this.level) {
this.update_tileset();
@ -2974,6 +2988,13 @@ class OptionsOverlay extends DialogOverlay {
mk('dd', mk('label', mk('input', {name: 'show-captions', type: 'checkbox'}), " Enable captions")),
mk('dt'),
mk('dd', mk('label', mk('input', {name: 'use-cc2-anim-speed', type: 'checkbox'}), " Use CC2 animation speed")),
mk('dt', "Directional touch type (for mobile)"),
mk('dd',
mk('select', {name: 'dir-touch-type'},
mk('option', {value: '0'}, "Relative to player"),
mk('option', {value: '1'}, "Relative to viewport")
),
),
);
// Update volume live, if the player is active and was playing when this dialog was opened
// (note that it won't auto-pause until open())
@ -3082,6 +3103,7 @@ class OptionsOverlay extends DialogOverlay {
this.root.elements['spatial-mode'].value = this.conductor.options.spatial_mode ?? 2;
this.root.elements['show-captions'].checked = this.conductor.options.show_captions ?? false;
this.root.elements['use-cc2-anim-speed'].checked = this.conductor.options.use_cc2_anim_speed ?? false;
this.root.elements['dir-touch-type'].checked = this.conductor.options.directional_touch_type ?? 0;
this.root.elements['custom-tileset'].addEventListener('change', ev => {
this._load_custom_tileset(ev.target.files[0]);
@ -3096,6 +3118,7 @@ class OptionsOverlay extends DialogOverlay {
options.spatial_mode = parseInt(this.root.elements['spatial-mode'].value, 10);
options.show_captions = this.root.elements['show-captions'].checked;
options.use_cc2_anim_speed = this.root.elements['use-cc2-anim-speed'].checked;
options.directional_touch_type = parseInt(this.root.elements['dir-touch-type'].value, 10);
// Tileset stuff: slightly more complicated. Save custom ones to localStorage as data
// URIs, and /delete/ any custom ones we're not using any more, both of which require