0.1.4 • Published 6 months ago

@gamely/core-native-html5 v0.1.4

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
6 months ago

core-native-html5

npm cdn

create your own game-engine with just javascript or lua.

Built-in Modules

driver namedescription
fengarilua vm in es6
wasmoonlua vm in wasm
keyboardinputs events
gamepadinputs events
runtimetick and draw events
resizeauto resize width and height
player-fakefake video player using html element <canvas>
player-html5video player using html element <video>
player-videojsvideo player using videojs library
player-youtubevideo player using iframe youtube integration
fengari-checkcheck for a lua virtual machine(also wasmoon-check fengari-or-wasmoon-check)
fengari-jsonrxithirdy party library json for core native api(use string: https://cdn.jsdelivr.net/gh/rxi/json.lua/json.lua)

Third-party Libraries

<!-- fengari -->
<script src="https://cdn.jsdelivr.net/npm/fengari-web@latest/dist/fengari-web.min.js"></script>

<!-- wasmoon -->
<script type="module">
import { LuaFactory, LuaMultiReturn } from 'https://cdn.jsdelivr.net/npm/wasmoon@1.16.0/+esm'
window.LuaFactory = LuaFactory
window.LuaMultiReturn = LuaMultiReturn
</script>

<!-- videojs -->
<script src="https://cdn.jsdelivr.net/npm/video.js@8.22.0/dist/video.min.js"></script>

Gly Engine

replace @latest with the engine version you want.

versionfengarilibrary configs
0.0.7'runtime' {uptime: true}'keyboard' 'legacy'
0.0.8 ~ 0.0.11
0.0.18 and newersupport
const gly = await core_native_html5()
    .set_el_root('main')
    .set_el_canvas('#gameCanvas')
    .set_library('wasmoon', LuaFactory, LuaMultiReturn)
    .set_library('runtime', {uptime: false})
    .set_library('keyboard')
    .set_library('resize')
    .set_engine('https://cdn.jsdelivr.net/npm/@gamely/gly-engine@latest/dist/main.lua')
    .set_game('game.lua')
    .build()

Love2D

support wasmoon and fengari!

const keymap = [
    ['KeyZ', 'a'],
    ['KeyX', 'b'],
    ['KeyC', 'c'],
    ['KeyV', 'd'],
    ['Enter', 'a'],
    ['ArrowUp', 'up'],
    ['ArrowDown', 'down'],
    ['ArrowLeft', 'left'],
    ['ArrowRight', 'right'],
    ['ShiftLeft', 'menu'],
];

const gly = await core_native_html5()
    .set_el_root('main')
    .set_el_canvas('#gameCanvas')
    .set_library('fengari', fengari)
    .set_library('runtime', {unfocus_pause: true})
    .set_library('keyboard', keymap)
    .set_library('resize')
    .set_engine('https://cdn.jsdelivr.net/npm/@gamely/love-engine@latest/dist/main.lua')
    .set_game('main.lua')
    .build()

Engine writen in lua

const gly = await core_native_html5()
    .set_el_root('main')
    .set_el_canvas('#gameCanvas')
    .set_library('wasmoon', window.LuaFactory, window.LuaMultiReturn)
    .set_library('fengari', window.fengari)
    .set_library('fengari-jsonrxi', 'https://cdn.jsdelivr.net/gh/rxi/json.lua/json.lua')
    .set_library('fengari-or-wasmoon-check')
    .set_library('player-videojs', window.videojs)
    .set_library('runtime')
    .set_library('keyboard')
    .set_library('resize')
    .set_engine('engine.lua')
    .set_game('game.lua')
    .build()

Baremetal javascript

const gly = await core_native_html5()
    .set_el_canvas('#gameCanvas')
    .build()

gly.engine.on('draw', () => {
    gly.backend.native_draw_color(0xFFFFFFFFF)
    gly.backend.native_draw_rect(0, 50, 50, 50, 50)
})

function tick() {
    gly.frontend.native_callback_loop()
    gly.frontend.native_callback_draw()
    window.requestAnimationFrame(tick)
}

gly.frontend.native_callback_init()
tick();

Custom engine javascript

function awesome_game(loop, draw, keys) {
    let color = 0x00FFFFFF

    loop.callback(() => {

    })
    draw.callback(() => {
        draw.color(color)
        draw.rect(0, 10, 20, 30, 40)
    })
    keys.callback((key, press) => {
        if (key == 'a' && press) {
            color = 0xFF0000FF
        }
    })
}
function awesome_engine(game) {
    core_native_html5().set_el_canvas('#game').set_library('keyboard').set_library('runtime').build().then((gly) => {
        const loop = {
            callback: (f) => gly.on('loop', f)
        }
        const draw = {
            color: gly.backend.native_draw_color,
            rect: gly.backend.native_draw_rect,
            callback: (f) => gly.on('draw', f)
        }
        const keys = {
            callback: (f) => gly.on('keyboard', f)
        }
    
        game(loop, draw, keys)
    })
}
awesome_engine(awesome_game)
0.0.20

7 months ago

0.0.21

7 months ago

0.0.11

12 months ago

0.0.13

11 months ago

0.0.14

11 months ago

0.1.0

7 months ago

0.1.2

7 months ago

0.1.1

7 months ago

0.0.15

11 months ago

0.0.16

11 months ago

0.0.17

11 months ago

0.0.18

9 months ago

0.1.4

6 months ago

0.0.19

8 months ago

0.1.3

7 months ago

0.0.10

12 months ago

0.0.9

12 months ago

0.0.8

12 months ago

0.0.7

1 year ago