New Preserves float interface
This commit is contained in:
parent
730d40b90b
commit
608bdde8c8
|
@ -22,6 +22,6 @@
|
||||||
"types": "lib/index.d.ts",
|
"types": "lib/index.d.ts",
|
||||||
"author": "Tony Garnock-Jones <tonyg@leastfixedpoint.com>",
|
"author": "Tony Garnock-Jones <tonyg@leastfixedpoint.com>",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"preserves": "0.5.2"
|
"preserves": "0.5.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
import { $QuitDataspace, Double, Facet, Inbound, Outbound } from '@syndicate-lang/core';
|
import { $QuitDataspace, Double, Facet, Inbound, Outbound, floatValue } from '@syndicate-lang/core';
|
||||||
activate import { WindowEvent, template, Anchor } from '@syndicate-lang/html';
|
activate import { WindowEvent, template, Anchor } from '@syndicate-lang/html';
|
||||||
activate import { PeriodicTick } from '@syndicate-lang/timer';
|
activate import { PeriodicTick } from '@syndicate-lang/timer';
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ function spawnGame<T>(thisFacet: Facet<T>) {
|
||||||
field ypos: number = 312;
|
field ypos: number = 312;
|
||||||
field yvel: number = 0;
|
field yvel: number = 0;
|
||||||
|
|
||||||
assert Position(new Double(this.xpos), new Double(this.ypos));
|
assert Position(Double(this.xpos), Double(this.ypos));
|
||||||
|
|
||||||
assert Outbound(
|
assert Outbound(
|
||||||
ui.html('#board-area',
|
ui.html('#board-area',
|
||||||
|
@ -99,7 +99,7 @@ function spawnGame<T>(thisFacet: Facet<T>) {
|
||||||
on message Inbound(WindowEvent('+click', $_e)) => this.yvel = -10;
|
on message Inbound(WindowEvent('+click', $_e)) => this.yvel = -10;
|
||||||
|
|
||||||
const ms_per_tick = 1000.0 / 60;
|
const ms_per_tick = 1000.0 / 60;
|
||||||
on message Inbound(PeriodicTick(new Double(ms_per_tick))) => {
|
on message Inbound(PeriodicTick(Double(ms_per_tick))) => {
|
||||||
this.xpos += 0.15 * ms_per_tick;
|
this.xpos += 0.15 * ms_per_tick;
|
||||||
this.ypos = (this.ypos + this.yvel);
|
this.ypos = (this.ypos + this.yvel);
|
||||||
this.yvel += ms_per_tick * 0.05;
|
this.yvel += ms_per_tick * 0.05;
|
||||||
|
@ -110,7 +110,7 @@ function spawnGame<T>(thisFacet: Facet<T>) {
|
||||||
spawn named 'border-scroll' {
|
spawn named 'border-scroll' {
|
||||||
let ui = new Anchor();
|
let ui = new Anchor();
|
||||||
field pos: number = 0;
|
field pos: number = 0;
|
||||||
on asserted Position($xpos, _) => this.pos = Double.unwrap(xpos as any) % 23;
|
on asserted Position($xpos, _) => this.pos = floatValue(xpos) % 23;
|
||||||
assert Outbound(ui.html(
|
assert Outbound(ui.html(
|
||||||
'#board-area',
|
'#board-area',
|
||||||
template`<div class="scrolling-border" style="${`background-position-x: ${-this.pos}px`}"></div>`,
|
template`<div class="scrolling-border" style="${`background-position-x: ${-this.pos}px`}"></div>`,
|
||||||
|
@ -138,10 +138,10 @@ function spawnGame<T>(thisFacet: Facet<T>) {
|
||||||
on start react { stop on (this.xpos <= 0) send message IncreaseScore(); };
|
on start react { stop on (this.xpos <= 0) send message IncreaseScore(); };
|
||||||
|
|
||||||
field xpos: number = xlocation;
|
field xpos: number = xlocation;
|
||||||
on asserted Position($xpos, _) => this.xpos = xlocation - Double.unwrap(xpos as any);
|
on asserted Position($xpos, _) => this.xpos = xlocation - floatValue(xpos);
|
||||||
|
|
||||||
on asserted Position($xpos, $ypos) => {
|
on asserted Position($xpos, $ypos) => {
|
||||||
if (touchingPillar(Double.unwrap(xpos as any), Double.unwrap(ypos as any))) {
|
if (touchingPillar(floatValue(xpos), floatValue(ypos))) {
|
||||||
react {
|
react {
|
||||||
assert GameOver();
|
assert GameOver();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
import { preserves, Observe, Dataspace, Float, Facet } from "@syndicate-lang/core";
|
import { preserves, Observe, Dataspace, floatValue, Facet } from "@syndicate-lang/core";
|
||||||
|
|
||||||
export message type PeriodicTick(intervalMS);
|
export message type PeriodicTick(intervalMS);
|
||||||
export assertion type TimeLaterThan(deadlineMS);
|
export assertion type TimeLaterThan(deadlineMS);
|
||||||
|
@ -38,7 +38,7 @@ boot {
|
||||||
on start {
|
on start {
|
||||||
handle = setInterval(thisFacet.wrapExternal((thisFacet) => {
|
handle = setInterval(thisFacet.wrapExternal((thisFacet) => {
|
||||||
send message PeriodicTick(intervalMS);
|
send message PeriodicTick(intervalMS);
|
||||||
}), Float.unwrap(intervalMS as any));
|
}), floatValue(intervalMS as any));
|
||||||
}
|
}
|
||||||
on stop {
|
on stop {
|
||||||
if (handle) {
|
if (handle) {
|
||||||
|
@ -59,7 +59,7 @@ boot {
|
||||||
let handle: any | null = null;
|
let handle: any | null = null;
|
||||||
let finish: (() => void) | null = thisFacet.actor.dataspace.backgroundTask();
|
let finish: (() => void) | null = thisFacet.actor.dataspace.backgroundTask();
|
||||||
on start {
|
on start {
|
||||||
let delta = Float.unwrap(deadlineMS as any) - (+(new Date()));
|
let delta = floatValue(deadlineMS as any) - (+(new Date()));
|
||||||
handle = setTimeout(thisFacet.wrapExternal((thisFacet) => {
|
handle = setTimeout(thisFacet.wrapExternal((thisFacet) => {
|
||||||
handle = null;
|
handle = null;
|
||||||
if (finish) finish();
|
if (finish) finish();
|
||||||
|
|
Loading…
Reference in New Issue