sample_ruffle.hsp

sample\iron\sample_ruffle.hsp » Plain Format

;============================================================
;  sample_ruffle.hsp
;
;  iron_ruffle (WebView2 + Ruffle) で任意の .swf を再生するデモ。
;
;  事前準備:
;    1) hspwebview2.dll を実行時ディレクトリに配置
;    2) https://github.com/ruffle-rs/ruffle/releases から
;       "ruffle-nightly-*-web-selfhosted.zip" を取得して展開し、
;       ruffle.js と *.wasm を "ruffle/" フォルダに配置
;    3) 再生したい .swf を適当な場所に置く (例: movies/hello.swf)
;
;  Ruffle ランタイム未配置の場合は、黒画面 + JS エラーになるだけで
;  HSP 側は落ちない。
;============================================================

#include "hsp3_net_64.as"
#include "iron_ruffle.hsp"

    title "iron_ruffle demo"
    screen 0, 960, 720
    cls 4

    sdim s_path, 1024
    sdim s_log,  2048
    s_path = "movies/hello.swf"

    objsize 120, 28
    pos 8, 8
    button gosub "SWF 選択",  *on_pick
    pos 140, 8
    button gosub "ロード",    *on_load
    pos 272, 8
    button gosub "閉じる",    *on_close

    pos 8, 40
    mesbox s_path, 944, 24

    pos 8, 648
    mesbox s_log, 944, 64

    ruffle_init 8, 72, 944, 568
    wv_id = stat
    if wv_id < 0 {
        s_log = "ruffle_init 失敗: " + wv_id
    } else {
        s_log = "Ruffle host ready (id=" + wv_id + ")"
    }
    goto *loop

*on_pick
    dialog "swf", 16, "Flash Movie"
    if stat = 0 : return
    s_path = refstr
    objprm 3, s_path
    return

*on_load
    if wv_id < 0 : return
    if s_path = "" : return
    ruffle_load wv_id, s_path
    s_log = "load request: " + s_path
    return

*on_close
    if wv_id < 0 : return
    ruffle_close wv_id
    wv_id = -1
    s_log = "closed"
    return

*loop
    if wv_id >= 0 {
        msg = wv_recv(wv_id)
        if msg ! "" {
            s_log = msg
            objprm 4, s_log
        }
    }
    await 50
    goto *loop