start program without spawning thread so screen works on mac. improve mouse demo

floats
Ondřej Hruška 4 years ago
parent f4ced467e4
commit 2fa23dbbc3
  1. 6
      crsn/src/runtime/run_thread.rs
  2. 40
      examples/mouse.csn
  3. 5
      launcher/src/main.rs

@ -48,13 +48,15 @@ impl RunThread {
self.info.cycle_time = cycle_time; self.info.cycle_time = cycle_time;
} }
pub fn start(self) -> JoinHandle<()> { /// Spawn as a thread
pub fn spawn(self) -> JoinHandle<()> {
std::thread::spawn(move || { std::thread::spawn(move || {
self.run(); self.run();
}) })
} }
fn run(mut self) { /// Start synchronously
pub fn run(mut self) {
'run: loop { 'run: loop {
match self.eval_op() { match self.eval_op() {
Ok(EvalRes { cycles, advance }) => { Ok(EvalRes { cycles, advance }) => {

@ -1,18 +1,25 @@
( (
(sc-init 640 480) (sc-init 800 600)
(sym x r6) (sym x r6)
(sym y r7) (sym y r7)
(def BOXSIZE 10) (def BOXSIZE 7)
(:loop) (:loop)
(sc-poll) (sc-poll)
(sc-mouse x y (sc-blit 0)
(ov? (j :next))) (sc-mouse x y (ov? (j :next)))
(sc-mbtn _ 1 (nz? (sc-erase) (sc-blit 1)))
(sc-mbtn _ 0 (z? (j :next)))
(sc-mbtn r0 0 (z? (j :next))) (call draw_box x y)
(:next)
(sleep 500)
(j :loop)
(proc draw_box x y
(sym vx r0) (sym vx r0)
(sym vy r1) (sym vy r1)
(sym endx r2) (sym endx r2)
@ -20,21 +27,16 @@
(add endx x BOXSIZE) (add endx x BOXSIZE)
(add endy y BOXSIZE) (add endy y BOXSIZE)
(sub vy y BOXSIZE) (sub vy y BOXSIZE)
(:nextline) (:nextline)
(cmp vy endy (eq? (j :endbox))) (cmp vy endy (eq? (ret)))
(sub vx x BOXSIZE) (sub vx x BOXSIZE)
(:nextpx) (:nextpx)
(sc-px vx vy 0xffffff) (sc-px vx vy 0xffffff)
(inc vx) (inc vx)
(cmp vx endx (cmp vx endx
(eq? (inc vy)(j :nextline))) (eq? (inc vy)(j :nextline)))
(j :nextpx) (j :nextpx)
(:endbox) )
(:next)
(sleep 20000)
(j :loop)
) )

@ -148,9 +148,8 @@ fn main() -> anyhow::Result<()> {
let mut thread = RunThread::new(ThreadToken(0), None, parsed.clone(), Addr(0), args); let mut thread = RunThread::new(ThreadToken(0), None, parsed.clone(), Addr(0), args);
thread.set_speed(config.cycle_time); thread.set_speed(config.cycle_time);
let a = thread.start(); // run without spawning, so it is on the main thread - required by some extensions
// ... thread.run();
let _ = a.join();
info!("Runtime shut down."); info!("Runtime shut down.");

Loading…
Cancel
Save