littlejsengine 1.5.2 → 1.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -33
- package/{engine/index.d.ts → build/littlejs.d.ts} +14 -6
- package/{engine/engine.all.module.js → build/littlejs.esm.js} +110 -99
- package/build/littlejs.esm.min.js +1 -0
- package/{engine/engine.all.js → build/littlejs.js} +102 -97
- package/build/littlejs.min.js +1 -0
- package/{engine/engine.all.release.js → build/littlejs.release.js} +95 -95
- package/examples/breakout/game.js +5 -0
- package/examples/breakout/gameObjects.js +41 -48
- package/examples/breakout/index.html +5 -4
- package/examples/breakoutTutorial/README.md +514 -0
- package/examples/breakoutTutorial/game.js +181 -0
- package/examples/breakoutTutorial/images/1.png +0 -0
- package/examples/breakoutTutorial/images/10.png +0 -0
- package/examples/breakoutTutorial/images/11.png +0 -0
- package/examples/breakoutTutorial/images/2.png +0 -0
- package/examples/breakoutTutorial/images/3.png +0 -0
- package/examples/breakoutTutorial/images/4.png +0 -0
- package/examples/breakoutTutorial/images/5.png +0 -0
- package/examples/breakoutTutorial/images/6.png +0 -0
- package/examples/breakoutTutorial/images/7.png +0 -0
- package/examples/breakoutTutorial/images/8.png +0 -0
- package/examples/breakoutTutorial/images/9.png +0 -0
- package/examples/breakoutTutorial/index.html +10 -0
- package/examples/electron/build.bat +52 -0
- package/{electron → examples/electron}/electron.js +18 -21
- package/{game.js → examples/electron/game.js} +1 -1
- package/examples/electron/index.html +2 -0
- package/examples/electron/package.json +20 -0
- package/examples/empty/game.js +11 -1
- package/examples/empty/index.html +2 -2
- package/examples/module/game.js +1 -1
- package/examples/module/index.html +3 -2
- package/examples/particles/index.html +3 -2
- package/examples/platformer/gameLevel.js +1 -1
- package/examples/platformer/gamePlayer.js +1 -1
- package/examples/platformer/index.html +8 -7
- package/examples/puzzle/index.html +4 -3
- package/{build.bat → examples/starter/build.bat} +17 -17
- package/examples/starter/game.js +111 -0
- package/examples/starter/index.html +27 -0
- package/examples/starter/tiles.png +0 -0
- package/examples/stress/index.html +3 -2
- package/examples/typescript/game.js +89 -89
- package/examples/typescript/game.ts +11 -11
- package/examples/typescript/index.html +3 -2
- package/package.json +4 -4
- package/{engine → src}/engine.js +1 -2
- package/{engine → src}/engineAudio.js +11 -11
- package/src/engineBuild.bat +132 -0
- package/{engine → src}/engineDebug.js +8 -2
- package/{engine → src}/engineDraw.js +19 -15
- package/{engine → src}/engineExport.js +8 -2
- package/{engine → src}/engineInput.js +54 -58
- package/{engine → src}/engineMedals.js +1 -1
- package/{engine → src}/engineObject.js +4 -4
- package/{engine → src}/engineRelease.js +1 -0
- package/{engine → src}/engineUtilities.js +4 -4
- package/electron/electronBuild.bat +0 -32
- package/electron/electronSetup.bat +0 -2
- package/electron/package.json +0 -21
- package/engine/engine.all.min.js +0 -1
- package/engine/engine.all.module.min.js +0 -1
- package/engine/engineBuild.bat +0 -127
- package/index.html +0 -26
- /package/{tiles.png → examples/electron/tiles.png} +0 -0
- /package/{favicon.png → examples/favicon.png} +0 -0
- /package/{engine → src}/engineFont.png +0 -0
- /package/{engine → src}/engineParticles.js +0 -0
- /package/{engine → src}/engineSettings.js +0 -0
- /package/{engine → src}/engineTileLayer.js +0 -0
- /package/{engine → src}/engineWebGL.js +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<html><head>
|
|
2
|
+
<title>Little JS Breakout Tutorial</title>
|
|
3
|
+
<meta name=viewport content=width=device-width,height=device-height,initial-scale=1,maximum-scale=1>
|
|
4
|
+
<meta name=apple-mobile-web-app-capable content=yes>
|
|
5
|
+
<meta name=mobile-web-app-capable content=yes>
|
|
6
|
+
<link rel=icon type=image/png href=../favicon.png>
|
|
7
|
+
</head><body>
|
|
8
|
+
|
|
9
|
+
<script src=../../build/littlejs.js?126></script>
|
|
10
|
+
<script src=game.js?126></script>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
rem Simple build script for LittleJS by Frank Force
|
|
2
|
+
rem Minfies and combines index.html and index.js and zips the result
|
|
3
|
+
|
|
4
|
+
set NAME=game
|
|
5
|
+
set BUILD_FOLDER=build
|
|
6
|
+
set BUILD_FILENAME=index.js
|
|
7
|
+
|
|
8
|
+
rem remove old files
|
|
9
|
+
rmdir /s /q %BUILD_FOLDER%
|
|
10
|
+
mkdir %BUILD_FOLDER%
|
|
11
|
+
pushd %BUILD_FOLDER%
|
|
12
|
+
|
|
13
|
+
rem copy engine release build
|
|
14
|
+
type ..\..\..\build\littlejs.release.js >> %BUILD_FILENAME%
|
|
15
|
+
echo. >> %BUILD_FILENAME%
|
|
16
|
+
|
|
17
|
+
rem add your game's files to include here
|
|
18
|
+
type ..\game.js >> %BUILD_FILENAME%
|
|
19
|
+
echo. >> %BUILD_FILENAME%
|
|
20
|
+
|
|
21
|
+
rem copy images to build folder
|
|
22
|
+
copy ..\tiles.png tiles.png
|
|
23
|
+
|
|
24
|
+
rem minify code with uglify
|
|
25
|
+
call npx uglifyjs -o %BUILD_FILENAME% --compress --mangle -- %BUILD_FILENAME%
|
|
26
|
+
if %ERRORLEVEL% NEQ 0 (
|
|
27
|
+
pause
|
|
28
|
+
exit /b %ERRORLEVEL%
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
rem build the html, you can add html header and footers here
|
|
32
|
+
rem type ..\header.html >> index.html
|
|
33
|
+
echo ^<body^>^<script^> >> index.html
|
|
34
|
+
type %BUILD_FILENAME% >> index.html
|
|
35
|
+
echo ^</script^> >> index.html
|
|
36
|
+
|
|
37
|
+
rem delete intermediate files
|
|
38
|
+
del %BUILD_FILENAME%
|
|
39
|
+
|
|
40
|
+
rem copy elecron files to build folder
|
|
41
|
+
copy ..\electron.js electron.js
|
|
42
|
+
copy ..\package.json package.json
|
|
43
|
+
|
|
44
|
+
popd
|
|
45
|
+
|
|
46
|
+
rem build with electron
|
|
47
|
+
call npx electron-packager ./%BUILD_FOLDER% --overwrite
|
|
48
|
+
if %ERRORLEVEL% NEQ 0 (
|
|
49
|
+
pause
|
|
50
|
+
exit /b %ERRORLEVEL%
|
|
51
|
+
)
|
|
52
|
+
pause
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
// Modules to control application life and create native browser window
|
|
2
|
-
const {app, BrowserWindow} = require('electron')
|
|
3
|
-
const path = require('path')
|
|
2
|
+
const { app, BrowserWindow } = require('electron')
|
|
4
3
|
|
|
5
|
-
|
|
4
|
+
const createWindow = () => {
|
|
6
5
|
// Create the browser window.
|
|
7
6
|
const mainWindow = new BrowserWindow({
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
height: 576,
|
|
11
|
-
webPreferences: {
|
|
12
|
-
preload: path.join(__dirname, 'preload.js')
|
|
13
|
-
}
|
|
7
|
+
width: 800,
|
|
8
|
+
height: 600
|
|
14
9
|
})
|
|
15
|
-
|
|
10
|
+
|
|
16
11
|
// hide menu
|
|
17
12
|
mainWindow.setMenu(null);
|
|
18
13
|
//mainWindow.setFullScreen(true);
|
|
@@ -27,20 +22,22 @@ function createWindow () {
|
|
|
27
22
|
// This method will be called when Electron has finished
|
|
28
23
|
// initialization and is ready to create browser windows.
|
|
29
24
|
// Some APIs can only be used after this event occurs.
|
|
30
|
-
app.whenReady().then(
|
|
25
|
+
app.whenReady().then(() => {
|
|
26
|
+
createWindow()
|
|
31
27
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
app.on('activate', () => {
|
|
29
|
+
// On macOS it's common to re-create a window in the app when the
|
|
30
|
+
// dock icon is clicked and there are no other windows open.
|
|
31
|
+
if (BrowserWindow.getAllWindows().length === 0) createWindow()
|
|
32
|
+
})
|
|
37
33
|
})
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
// Quit when all windows are closed, except on macOS. There, it's common
|
|
36
|
+
// for applications and their menu bar to stay active until the user quits
|
|
37
|
+
// explicitly with Cmd + Q.
|
|
38
|
+
app.on('window-all-closed', () => {
|
|
39
|
+
if (process.platform !== 'darwin') app.quit()
|
|
43
40
|
})
|
|
44
41
|
|
|
45
42
|
// In this file you can include the rest of your app's specific main process
|
|
46
|
-
// code. You can also put them in separate files and require them here.
|
|
43
|
+
// code. You can also put them in separate files and require them here.
|
|
@@ -103,7 +103,7 @@ function gameRender()
|
|
|
103
103
|
function gameRenderPost()
|
|
104
104
|
{
|
|
105
105
|
// draw to overlay canvas for hud rendering
|
|
106
|
-
drawTextScreen('
|
|
106
|
+
drawTextScreen('LittleJS Engine Demo', vec2(mainCanvasSize.x/2, 80), 80);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
///////////////////////////////////////////////////////////////////////////////
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<body><script>
|
|
2
|
+
eval(Function("[M='DYhuJzCBV~LKby?Vt_b^ejSdE[eOF]^xwJzztBUSE|iPNBKKb?dBsnnlAtsdW{Bah}DrNQBAvepYbgAd|MkbArM~O||rTzOp@j@plQJwXWvVhjJOIAP]qltDKs]}eKr_hNM[lCb@AimlGZse}EkgtrHOvPEpL_wCglz}RRMIaRQzRhG{}zBgw@o]PR]~GKdRJGuuTSzzixXpGA}gRynsIAu{Sw{F}R|LIG@CsRCM`JUJvCzAYYZu@oL[I|WDTw|soA_N|ancvowsba{YWMEFfRfNMYRp_TvI~Fx`ZQzun_?[FQ@j?nsDgS}HlS_G~]h^vAvy^dSsvmUzvoHPLSdEgeGgYV{KTFMcq?byagUHA{yNhjvosWF|JY}?fQEbD}OjGVwx^c}OMOl^bWOui^[Ivg[jsXiPsH`v}AUS`pXxUJz]hAOQhlYOCMUceMnrGhge|EkH{?WpWojSpLiJRRVcNwXKw{JXRZgzX]gQ@etO^dYcUGvirBooulMfYq@JovQKWTOHCIDd`K?junfya]tnwNmtrCnEB{FBvcPIR|p|]apt~LzVZ`uIsSeaTtTVKi[|LYGO[ML_ulpHJ?QteSYjISIHNzI~mePARzyvRJcPtslrQgXO`fAyNNzFJ{abI]jpXTnT{YFRvrJAZnOzUaRuTX?uAkmmeJpZJmvyULO@`p@R}[t~qOlHB_TqPslYp|R^ftUiccRghndwglFSLpBAa[g}cKvx|HibXgWlIGXsGIHCa_f[tS?]eiZq^dtAhlWJffyPW]n|D[zRUFIAdi_iVHNQfkSn@QdEqqhUEgzE{pCpfnhacZJWV[MOjtdQq_ZMcC@pwJwmnFt^HK^tEOUeu{nl[wvQqf{SE`UhYtcDsdLALAbt`qDfmeZ`Gyj_iWv_[?}SPzvE[AtFJ^_X?pq|SjuuYFSkniQYdhaUmNmvDtHn[DTt{TIE}NtkDvi~?bd~RAu|fK^?lOvUUv]AWT?Ui]^_Z{kytzlQ@rhR`_OTEnDFk[bDtj|uyttWJ_VkirTg]WBlS{[om@LudgyTdJ^MNdmXo^lRP`e`kKtZVD|YGFqjGCYQH`EpErSwlhtYDgRUwujfAXWXJI|NDwQ|OApShIKEJJeOcBUbchxxQ^}gcH?gbfNYwk~{|]LScUWE`Gzv{hx^FyioJP[^_CMUeICIIdroIVKkR}xTKYDLqUzfl{XVao`@zbtAlV{?mOXelBkgKeQuwqPWbf^PM]ahX]{IFKYF@b_VE_vFs[ct~l?CA_}mZV^aoMAdYCOU`PDjYFEwqxxUHWzpnY@?H~GagutCltWqq{zsWds^jkN{`z{Pp}pZCnyfV^tLhLE|ydFFDytCUAIghmjfWqbH?ma]_gRnYJsboB{nQSoIVYVrqHLO`mzC{QkZojEUA`FLfOKzM_mQommrT?yezZeYPodczzc_aQuQrBSNeQ@Kitt^QKmf@]KKHjygOxxYH?B^UgPp]zXK[xffIt`jHIFw?zfy~|m`KpIyJ{{nwW@TqacRjViIfW{UKT@mYNZWOTUeckbaYMnJ~h|}y_?a{nnE_s?GV_tWBqSPr?gqq@wfIZWLCA|CAN_MvkhvcnQhKZsBrmU^w[D|YNf}_nZJwNXM{Dw?PDY~rusf_Nrm{NyzSY}qt|y]mPgPRl?SliU@CxtCFf@ZNP`gg|g@FsI^mUayJjOK~doq~|GuDt`PwKMWyb}|~iklbESGhcS?a~zT_a]yTKpMi?Llrs@bQ_L|xh?wUOpuXkZoSzWDvwmyg[ggMnEAAr_w?Fctw|EHql|OGtTRN{XBWxdvVsiEwZkGFD|{WspkNjMSV[nxYmppwBVb]tlZReEPHhIDZfHgEZemYtiXft_}_sOEnA~U~`awBrmQ`W[[jaOu@Fp_dtyZc]|BR{[jSOy}SA]?sfaRz[jwiMufnOLOBKalL`JiYH]YUQMkwJuqvd[lPcZt[Ek?r`TkRDTXBszW}QszISPMPzj]l}ALBP?coK[M}QMu|wHvPrMNPA^vCUGbGeCBhF|SgQeVptFfDMWrpc@Taj~WpCNPzwvBSSY`ccans??UzK^adxVBOtiNdoZmqaJ]T^RkMfPuxlyn|YUcdf[AQWqOVGUTUSz_CROMCRtM^WCCCcFo}o@bH[J{l?wUM[soFzKgJRpv[FCLYRXOd|bdqfd?AAwYCSeZkbWj~SoXDi`xRUyQWQX_j@GuxZkjxN^RZgfd~~|N`gBA]kJ^jLTZxlNV]N`_urbSf|Yt?prXcvhiS?hfbamVv{LPqhim{]bCM}OA}^DYjrDsrFIsSDvhCKLu^]`vKo{tWV_FdyqpUPIKgN`Qa[GaKuKvF?kcEhJvS[ypCruGUVHmk^xG_Q@HXMmpiaKvf?UjJ{icwDQrrq{UYw_DmVFzhHqzUUi?o_~VRU_HxKdUm|y`dvA^{Ai`tnSdO@YsBWAIBflM?UvLR]vTf`TcMoc`fVGNWIkTJsfMkDMzHIJcuC^ASrCabcl[?QfonyEFyogsunyRacV{CgFm[hynYFecGgAdftoVsZJNdPCRDkk[UUMWq_Pox`Xk{HeeROyfq`?rCg?JIrtnO@Ns{Tm{@r|}gExLpF|JgzZV~eliS?zT?y~CxIIZ?[_SRbJcO@_kdVJOWwZNAUFEVBBgxK_xhkGZa_JxymZlCAaygyaf?dIo]m}Wgpf~K_]bAQgOwnJ{k{XmHGGyePZsjd{?OvUCG_zrjAo{Uo_QyCJzWJ]wf|_FIYQxgrdqjv~lcItCWI}sAyqPX]RlX?FJjKUBJKccMPWcgp[`YALWnUJpmyp`oqB~IP@zOZZpz`b_xMG}dCNuxsaRgsqIv?cGPWEFWeBIFPQ@l}OVPbwvrGvkPBZ?jRyrh^i{gO@?wqvzGHzFnAPw}mkpzvJWrNQfLof]WL[}?nXSz_ADPjhQcG_aGS[|@DYJqMX?O^NqUQ^Bi@d~}`fhleXD?L~J|NzlkQoJCBMWvwgzMhAXqxIbIgNf@?vroNXhzJ?@oUShEqi}LAyTp|cYKyjf|Vs[wbGDfkegITHOozosxloZdxlFmE_?pjFMZMrR]DbjdzXPzNYT}@rPKDwY^_WWgNRYtoIETZhvzXP[wa|tWKTwF^KogSPW{o?[N}AyT`GtdzSErko?DtjzKBJdWXugT~s`rW~|TjTCTgCeD|Fu_YsR]VXmUOxBVVY|GMNC`BhQltZtz`YsG?k_DXUfSGKMSYlhiabhMLOyYJfUlR_|RRzFmb@FQxZO`wlGQP^FxEE`?l~n~W`DNYmbnz_pnZZaDG|_YeeF[wqjSVu{^BMQg}wpp{J_qyLlzMrTY|HDTN`QzoQuHeaktwqmPOg[Z[cEzjmQyF][qtCQ]NPJk~jZkDRDej]yk^tLJmRJZsEBh{Sa]Md^D|EI~yCSNMqAjn?BMwuXNe|KnjSXrmPThgj_hc^B_SficQw|T@SSgzBygIwDtvEqDRlTB}hA@mZUW]g`dfbtEsR?rWqWkVp``InYlyoerOtU?okUZV?jK}CPWw?Onq?^IezHJTqBASonkuD{_GzqZ[aSMZPhvBnpQYII~VT}JPxgQUZShecdMcDNYjemVgIF|~dnM[{@~~QDAcCeK_QLSx|BFIC`esdZmo??xI]~p|uRcQY_Q}LlzWioticXqY?pNOWNhOW_q{sm[?NLoivJcl~qDRwFM_dTK[j@^DF[bFY`sEVhUq[miWk[xV?RM?KVNSG^f_qnvRxN?zMwCaxwZNvw@ohtzk^gDC`Z_]zUHnOFLr~ZhGFYIYyWOl?IbAKVJcKtj@~ToUxGCDDZIx?nd?iOV^uh{dsRWtva?faEhvImhRbneQWoSCPFu}[Hb]XrcDOqkVbkyIazdpDcAaCxYW]jmcQhOsE|b[}CdczX^J}yKGjtAJAWsgGSV~ntNxtmYJEhbh{u[HKv_kPDhZt?oGT~V}dLsPWWCpT|qtGix|mfU`rFh`ir{bTgskDf]FZ}NZXJiAVUNaiIwkuskx~}u@djezJXzq?LBA^_dCIW@XW|t`bouxD|ACJvpChHVp[|wD]FpB_~~lV_Pz[|_s[ku^wAzh[{qm|W~K@OBK@vlDG|Y|RelcMQKvtmmdVGQ}OCFexbHzJR}Y}akNvONeOxcZ@JhVUC{dcXndDvsG[ytriKIdRIwVJgQ]wX?Cg~aTXtDcvVM^Z``tLyH~Ez~BRKDBplY`tnvS_w|RmGBQ[Yh_Q[ftvHMPpFoUR|cAGAjKj^[Ht@cD}ruQOpnTQhpYC`@yKdJPaSbIRv}VfCbYDE@BUuqaM?AFYo_ZGM]{ndLiLzrQsYWIUrisBQBBBOf_ImzH@|}xU}yC~ry`mbSlHgnMDKqFIRFqKZ?CXUToMcveLQaQ~]|OPC[[tfFvu{V^h]s[G{l?O`Y}kBnJk}XPy`ldz^Ktur?CEWVfWkgLMzS`usxxfDEuN`UHbfikOU~YG]lDfAlv]Vctn`KxS~v|ALhjCSZEHC}NwYuRIyjgYQUtp]lMAGyQNqFLfyMiHnK`SyMdXOofrwQg_VMKJgP@QtWto@v]qAGxbJDh_MVJJZRASfi@GjM]TwzgaM^zyLke~eYnHcq_ZBr`RKoeq~pauJETAgraal?EdOgqRfcjcpBExanDBdw[YYj]p@nRyCcBFx_STvj~nMeXGyEslPfCQJm_acS|}OvEeYanDQSEVzFbVIWvNnIxjPT_NXi@y]IkSGiFmu^lq`pKB_UpFoSmKkufT[{^i?rccrmoGMVtYjcOZolZdgUwKI^voQfjNd}LxukpVjx~VqN|nyLUBY^qAqn`^?phzGoiRhx_c?btr^AFByUK]wNtGGrkfsXpjjLUCe?O}iCqbnwBNXjrrVFPgKtBKMUnpaYdj@acAua[PeU]n_U?tpDMoepGZhPcuB|IynrfSCKNkzftCqZ?ti~jKOHBRM}jWza^cVFRXnzK?tL_TFmqSsqMfIAPINqLDqQy}YZGuhyzyb|OLj~vfgRfEfv?usSOLsF`[uUcJY_gnaKF?dXNvDEFQWqDbSBpi~ZCQEUy_hd@Owm^YKt_BIXv@NDk[jxRMWICW~GD[`sTQLGv`gPyUbmDdDO}OdbKvwzLoDKavDJRgQwnHIMe?u|xtBo?eqqSPMgwfzyatUiSnBnEuToTwb]cbrRQQ^uAIPswLp|hKaPWk^`MKhE^auir{sJNzqptiGN@Iz@~X`O`JuL?efbeF_k][dvHESTkxn^HnXUsxPbI?lE|EDbKmCRL~NprItUGvq~q{qBp]njD[yctdo^JxjZFSrgHwDouGkqHxgg}mj{noEHzfmb~JSVzIoyAlzwtmQbL~OdZWRZ`mpUDKagmcvNmne[jP|nxCJqzUgLXJBmGG~?a}uDTGbIqsC@u]VfgPVgbg[xto`zeQ_nXRbwY}K~|n`yKeSBFswLA?oCOdiwmc?YwcVGvitUWIjVSawT~Yh`NXx~Jr?HRf}LqVExCisFu|@KvWGETo]?[Xviep^tXQlsS|xschkIzdVzNdgf?ZcwsXX]RanjaebtW[Ujl|^BOlkwK`CTOkvyC?N@EnuWVN]X?oUwlhJVyZAVLmLW]P_vrZoZ}O]vFrWBXwz{lU]XVwrPx]khjwUuv}xUAfaVgfEwv[JgiUpxIIfr}??wIhnnNvMtbmq[hDkfgfTaInXGW[WW?@nnaDVLbGRvFXDSZHcjoMrwbZ`BQCegnD}NJjtNR`[AfJjVAfwrWLnVftTcVYUNCFb[n}[yyEEFSHNllFBh@c^^t?bQDld}OlyIxKwTv[BnLENhKGrHITL^|waFPlQsa]soPPFxON}UKWy^yvyKe]WuqWb]xaGAbPL@tGyLknI_AfSAj^YD?tlORYT_Go`AdJXhJkgiIAhIzV`^ZsyCagoORq`yviJcbAJKuuiE}c{WeoI_mjcjLQtfwgGIYzYGsTE@i@IrvgUj[U[DzmS|bH?DDeDldazEsXBLlqf[uUeYPtq`tLUvkIs~a`HiXFac~WV@t[[eAnLWcpvASBOYiRLCdyCLwpBQXwXGJorQcyNTQkBQQ][rYy~p^RCj~ELPkV`aka}aNSLpyDydUGrC@zG?wSlIuvQjaZH}~tIgYYvrfXIaMHvMg}@~xgr[NKsgUpGcGBwVcRmjw@@NFaGY[|WyQkF_n^~rGpcDr?fqBEq~ZoagW[wCMirZB[l}~hSX^XzCyabfiLXPkbDplwGdIzJPNPQb@BtN^Wmh[?]dMeCkwa@VQSeQCkEQwKBpuZ_ClD}E_sEr?B`_rupxp?ckRsn~Cfoxji^Tucc@}nKCFrW@gHe?Cxd@}SlS@iX^aTzMY_CK@o|nr}{y@qXsgRJ`ItgUP?yvnaIxTr{AfplV}cvEVUeUFPtFD?g_imZ^tw]vHcFclKsqvOYdgJl@hlOrNN|zniXkJMqiSvtnn~AUyuOheTwX_tLz|_cfikR{IEyRw~OuCf[]IAT[PPKIOnc|IAsec^cFwcoeIHFFUQAyRIUAEDzngxosbFd@NEJzFGQCGwWKJNmBwZ_F}OA}MKzIE@LAfAXcp}fNBNCTpGgmV[BaoDIvOd}h~@^N@WD?w|s[i[B@Pv_ZMCzk^qBbNuVzjYWscbJfQVPn|mCKrrazm]QAVS?mfw^vGf]b@N?xA@~b{fily@]f_F@FW|DdLsFng?rdE`PftgWBH^rYn@f`zAZanDdBXkAplT}mpcokSIVfmHbvKNmYblbBu^OYJQqKFHgRwuYfOnvvaSuXBUWS?^Bzkto^gbv?YlP@lnWGEayDQsaqu_fm{WcoCleS@axo~[FqMaUfIikX~vssKAzyevpoHmLGKFfus|tfroqyXJMJ|{`MNrg}Rf`T]weSQIPnD~L?mRfT^ciedQ~BK]?`OcBE~B@j]`D?OF]GPfIwnlX|jgopQQNgqMZkqAjz}ZYDnsBPlyYigZEy[Gfdi@{afvogVO}du{f}j]Eto@si]yf?dVr[yaSIXBrxWiSRxa_BG_pADKsF]|`mLGUHdE_Z}moOXKMbwpzi[XfYTQ_QrdN[pyowYJue|{xLgVdI}{?njX`^MwWV@LWAanGO|u`V?`Da{JAT?HvoL|sDTeeZxSf@hIqwRLrlQGONq?lOCeoAIF?I?AOdg`MxyfyKyyXEjsv[r^Uq?Wj~CoRvTjjxausxHB`CwauprXOle`IpYdsOg]F?iDz]hTSp[_FhmUkRGy]f^dS?fJYFYYgaYSi_DUbNWMSYJfdheVFdw[I}WjP_GMD^LMn~pGQytBn~Qe}aT^VeM_E{M`mNA^{orkcdMy?DToGNLtF[oPbBCd|BmXn|ynz@noy~b}|mGEOQ[f_Dx`JxhL]?DZuvdEpd[f]z|b{xCkFirFxdK|ZAOofbKYngwAEKeaPsFEg?Q`vgkb}`rmuz^f`hvVpOjtjqtcXmhq^W@uRPNnqcmVhp`HJ@WuUIOmpc?`CE??ewy}gAEcMUjY^MqrtQrfoQhqbx]lrHn`cAG|cI`rHF?_?g]HXG][~BcjDigTFkgkW[geovnUFARvz[i?]EV{rIAJ}Rna@_L[vdrd{QlbHs[FlJKpRXlyPp`zeNYoT_am]YOkJiWZBBhb~tvANUcsy|mmj]X|cUdkwIW|vGFUselsg?QFjk?lI[XUr|je@~`NWwJhFHG`ek}TX?UcezDgU]TcMdRy{rq}r[||oBIAXjFtKx_?rXhiVN|dwuVFbfVMsBzfpq|Z|bKRifQ_Bp@mY_]dt{lMB`vDGs~aBKNS@DQ{trAl^^nO_BSb{nZ]AuCZGN@cDPYL{ZJpPvR[PUgoLncXbMpgucJjgETBi[hhmpzbw@TjvZOP]EhFcH{g]HWOmSOBkEjXCkvO`gZSL?NW}PBGqaObGE]Qw[UZtEv~xLk@^~oSXWBaOmjnNQYh^H~KQbhox?X{uNa}aJJf}Qc~`}_MtvjXcNr@?VafbhkRFJqCSFe``I{yqFMjmUVB^fau~}ieSUcEOe`l?VWThanHwXPU`fGHFruFQm`h~`{|GVHv~_Wbz_v]`_TLuGYp_RZvFtTn@@PUTSMWXRNnoEaYKNT{sqQIHt_UUvA|ziPqvbQi~t@s]QmrQaYxpIFHqdYxsRSrUb^GhDk`@wYE^JFABqmjKtkWwWkWfMM}Yj~bvgd`WQYefZg}YqJ'",...']charCodeAtUinyxp',"for(;e<13590;c[e++]=x-128)for(x=1;x<128;n=p.map((i,y)=>(t=r[i]*2+1,t=Math.log(t/(h-t)),A-=a[y]*t,t/750)),A=~-h/(1+Math.exp(A))|1,U=o%h<A,o=o%h+(U?A:h-A)*(o>>13)-!U*A,p.map((i,y)=>(t=r[i]+=(U*h/2-r[i]<<17)/((C[i]+=C[i]<5)+.1)>>17,a[y]+=n[y]*(U-A/h))),x=x*2+U)for(p='010202103203210431053105410642065206541'.split(A=0).map((i,y)=>(t=0,[...i].map((i,y)=>(t=t*997+(c[e-i]|0)|0)),h*512-1&t*997+x)*12+y);o<h*512;o=o*64|M.charCodeAt(d++)&63);for(C=String.fromCharCode(...c);r=/[\0-]/.exec(C);)with(C.split(r))C=join(shift());return C")([],[],1<<13,[0,0,0,0,0,0,0,0,0,0,0,0],new Uint16Array(51e6).fill(1<<11),new Uint8Array(51e6),0,0,0))</script>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "LittleJSGame",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A minimal Electron application",
|
|
5
|
+
"main": "electron.js",
|
|
6
|
+
"scripts": {},
|
|
7
|
+
"repository": "https://github.com/electron/electron-quick-start",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"Electron",
|
|
10
|
+
"LittleJS",
|
|
11
|
+
"Game"
|
|
12
|
+
],
|
|
13
|
+
"author": "GitHub",
|
|
14
|
+
"license": "CC0-1.0",
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"electron": "~25.2.0",
|
|
17
|
+
"electron-packager": "~17.1.1"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {}
|
|
20
|
+
}
|
package/examples/empty/game.js
CHANGED
|
@@ -7,27 +7,37 @@
|
|
|
7
7
|
///////////////////////////////////////////////////////////////////////////////
|
|
8
8
|
function gameInit()
|
|
9
9
|
{
|
|
10
|
+
// called once after the engine starts up
|
|
11
|
+
// setup the game
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
///////////////////////////////////////////////////////////////////////////////
|
|
13
15
|
function gameUpdate()
|
|
14
16
|
{
|
|
17
|
+
// called every frame at 60 frames per second
|
|
18
|
+
// handle input and update the game state
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
///////////////////////////////////////////////////////////////////////////////
|
|
18
22
|
function gameUpdatePost()
|
|
19
23
|
{
|
|
24
|
+
// called after physics and objects are updated
|
|
25
|
+
// setup camera and prepare for render
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
///////////////////////////////////////////////////////////////////////////////
|
|
23
29
|
function gameRender()
|
|
24
30
|
{
|
|
31
|
+
// called before objects are rendered
|
|
32
|
+
// draw any background effects that appear behind objects
|
|
25
33
|
}
|
|
26
34
|
|
|
27
35
|
///////////////////////////////////////////////////////////////////////////////
|
|
28
36
|
function gameRenderPost()
|
|
29
37
|
{
|
|
30
|
-
|
|
38
|
+
// called after objects are rendered
|
|
39
|
+
// draw effects or hud that appear above all objects
|
|
40
|
+
drawTextScreen('Hello World!', mainCanvasSize.scale(.5), 80);
|
|
31
41
|
}
|
|
32
42
|
|
|
33
43
|
///////////////////////////////////////////////////////////////////////////////
|
package/examples/module/game.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
<html><head>
|
|
2
|
+
<title>Little JS Module Demo</title>
|
|
2
3
|
<meta name=viewport content=width=device-width,height=device-height,initial-scale=1,maximum-scale=1>
|
|
3
4
|
<meta name=apple-mobile-web-app-capable content=yes>
|
|
4
5
|
<meta name=mobile-web-app-capable content=yes>
|
|
5
|
-
<link rel=icon type=image/png href
|
|
6
|
+
<link rel=icon type=image/png href=../favicon.png>
|
|
6
7
|
</head><body>
|
|
7
8
|
|
|
8
9
|
<!-- Add your game scripts here -->
|
|
9
|
-
<script src=game.js?
|
|
10
|
+
<script src=game.js?126 type=module></script>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<html><head>
|
|
2
|
+
<title>Little JS Particle System Designer</title>
|
|
2
3
|
<meta name=viewport content=width=device-width,height=device-height,initial-scale=1,maximum-scale=1>
|
|
3
4
|
<meta name=apple-mobile-web-app-capable content=yes>
|
|
4
5
|
<meta name=mobile-web-app-capable content=yes>
|
|
5
|
-
<link rel=icon type=image/png href
|
|
6
|
+
<link rel=icon type=image/png href=../favicon.png>
|
|
6
7
|
<style>
|
|
7
8
|
input
|
|
8
9
|
{
|
|
@@ -15,7 +16,7 @@ button
|
|
|
15
16
|
</style>
|
|
16
17
|
</head><body>
|
|
17
18
|
|
|
18
|
-
<script src=../../
|
|
19
|
+
<script src=../../build/littlejs.js?126></script>
|
|
19
20
|
<script>
|
|
20
21
|
|
|
21
22
|
'use strict';
|
|
@@ -192,7 +192,7 @@ function makeTileLayers()
|
|
|
192
192
|
|
|
193
193
|
function buildLevel()
|
|
194
194
|
{
|
|
195
|
-
levelSize = vec2(
|
|
195
|
+
levelSize = vec2(128);
|
|
196
196
|
levelColor = randColor(new Color(.2,.2,.2), new Color(.8,.8,.8));
|
|
197
197
|
levelGroundColor = levelColor.mutate().add(new Color(.4,.4,.4)).clamp();
|
|
198
198
|
|
|
@@ -298,7 +298,7 @@ class Player extends Character
|
|
|
298
298
|
{
|
|
299
299
|
// player controls
|
|
300
300
|
this.holdingJump = keyIsDown(38) || gamepadIsDown(0);
|
|
301
|
-
this.holdingShoot = mouseIsDown(0) || keyIsDown(90) || gamepadIsDown(2);
|
|
301
|
+
this.holdingShoot = !isUsingGamepad && mouseIsDown(0) || keyIsDown(90) || gamepadIsDown(2);
|
|
302
302
|
this.pressingThrow = mouseIsDown(1) || keyIsDown(67) || gamepadIsDown(1);
|
|
303
303
|
this.pressedDodge = mouseIsDown(2) || keyIsDown(88) || gamepadIsDown(3);
|
|
304
304
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
<html><head>
|
|
2
|
+
<title>Little JS Platforming Game Demo</title>
|
|
2
3
|
<meta name=viewport content=width=device-width,height=device-height,initial-scale=1,maximum-scale=1>
|
|
3
4
|
<meta name=apple-mobile-web-app-capable content=yes>
|
|
4
5
|
<meta name=mobile-web-app-capable content=yes>
|
|
5
|
-
<link rel=icon type=image/png href
|
|
6
|
+
<link rel=icon type=image/png href=../favicon.png>
|
|
6
7
|
</head><body>
|
|
7
8
|
|
|
8
|
-
<script src=../../
|
|
9
|
-
<script src=gameObjects.js?
|
|
10
|
-
<script src=gamePlayer.js?
|
|
11
|
-
<script src=gameEffects.js?
|
|
12
|
-
<script src=gameLevel.js?
|
|
13
|
-
<script src=game.js?
|
|
9
|
+
<script src=../../build/littlejs.js?126></script>
|
|
10
|
+
<script src=gameObjects.js?126></script>
|
|
11
|
+
<script src=gamePlayer.js?126></script>
|
|
12
|
+
<script src=gameEffects.js?126></script>
|
|
13
|
+
<script src=gameLevel.js?126></script>
|
|
14
|
+
<script src=game.js?126></script>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
<html><head>
|
|
2
|
+
<title>Little Puzzle Game Demo</title>
|
|
2
3
|
<meta name=viewport content=width=device-width,height=device-height,initial-scale=1,maximum-scale=1>
|
|
3
4
|
<meta name=apple-mobile-web-app-capable content=yes>
|
|
4
5
|
<meta name=mobile-web-app-capable content=yes>
|
|
5
|
-
<link rel=icon type=image/png href
|
|
6
|
+
<link rel=icon type=image/png href=../favicon.png>
|
|
6
7
|
</head><body>
|
|
7
8
|
|
|
8
|
-
<script src=../../
|
|
9
|
-
<script src=game.js?
|
|
9
|
+
<script src=../../build/littlejs.js?126></script>
|
|
10
|
+
<script src=game.js?126></script>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
rem Simple build script for LittleJS by Frank Force
|
|
2
2
|
rem Minfies and combines index.html and index.js and zips the result
|
|
3
|
-
rem Run buildSetup.bat to install required dependencies.
|
|
4
3
|
|
|
5
4
|
set NAME=game
|
|
6
5
|
set BUILD_FOLDER=build
|
|
@@ -9,22 +8,24 @@ set BUILD_FILENAME=index.js
|
|
|
9
8
|
rem install dev packages
|
|
10
9
|
rem call npm install
|
|
11
10
|
|
|
12
|
-
rem rebuild engine first
|
|
13
|
-
cd engine
|
|
14
|
-
call engineBuild.bat
|
|
15
|
-
if %ERRORLEVEL% NEQ 0 (
|
|
16
|
-
exit /b %ERRORLEVEL%
|
|
17
|
-
)
|
|
18
|
-
cd ..
|
|
19
|
-
|
|
20
11
|
rem remove old files
|
|
21
12
|
del %NAME%.zip
|
|
22
13
|
rmdir /s /q %BUILD_FOLDER%
|
|
23
14
|
|
|
24
15
|
rem copy engine release build
|
|
25
16
|
mkdir %BUILD_FOLDER%
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
pushd %BUILD_FOLDER%
|
|
18
|
+
|
|
19
|
+
rem rebuild engine first
|
|
20
|
+
pushd ..\..\..\src
|
|
21
|
+
call engineBuild.bat
|
|
22
|
+
if %ERRORLEVEL% NEQ 0 (
|
|
23
|
+
pause
|
|
24
|
+
exit /b %ERRORLEVEL%
|
|
25
|
+
)
|
|
26
|
+
popd
|
|
27
|
+
|
|
28
|
+
type ..\..\..\build\littlejs.release.js >> %BUILD_FILENAME%
|
|
28
29
|
echo. >> %BUILD_FILENAME%
|
|
29
30
|
|
|
30
31
|
rem add your game's files to include here
|
|
@@ -57,22 +58,21 @@ if %ERRORLEVEL% NEQ 0 (
|
|
|
57
58
|
exit /b %ERRORLEVEL%
|
|
58
59
|
)
|
|
59
60
|
|
|
60
|
-
rem build the html, you can add html header and
|
|
61
|
+
rem build the html, you can add an html header and footer here
|
|
61
62
|
rem type ..\header.html >> index.html
|
|
62
|
-
echo ^<
|
|
63
|
+
echo ^<script^> >> index.html
|
|
63
64
|
type %BUILD_FILENAME% >> index.html
|
|
64
65
|
echo ^</script^> >> index.html
|
|
66
|
+
rem type ..\footer.html >> index.html
|
|
65
67
|
|
|
66
68
|
rem delete intermediate files
|
|
67
69
|
del %BUILD_FILENAME%
|
|
68
70
|
|
|
69
71
|
rem zip the result, ect is recommended
|
|
70
|
-
call
|
|
72
|
+
call ..\..\..\node_modules\ect-bin\vendor\win32\ect.exe -9 -strip -zip ..\%NAME%.zip index.html tiles.png
|
|
71
73
|
if %ERRORLEVEL% NEQ 0 (
|
|
72
74
|
pause
|
|
73
75
|
exit /b %ERRORLEVEL%
|
|
74
76
|
)
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
rem pause to see result
|
|
78
|
+
popd
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/*
|
|
2
|
+
LittleJS Hello World Starter Game
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
// sound effects
|
|
8
|
+
const sound_click = new Sound([1,.5]);
|
|
9
|
+
|
|
10
|
+
// medals
|
|
11
|
+
const medal_example = new Medal(0, 'Example Medal', 'Welcome to LittleJS!');
|
|
12
|
+
medalsInit('Hello World');
|
|
13
|
+
|
|
14
|
+
// game variables
|
|
15
|
+
let particleEmitter;
|
|
16
|
+
|
|
17
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
18
|
+
function gameInit()
|
|
19
|
+
{
|
|
20
|
+
// create tile collision and visible tile layer
|
|
21
|
+
initTileCollision(vec2(32, 16));
|
|
22
|
+
const pos = vec2();
|
|
23
|
+
const tileLayer = new TileLayer(pos, tileCollisionSize);
|
|
24
|
+
|
|
25
|
+
// get level data from the tiles image
|
|
26
|
+
const imageLevelDataRow = 1;
|
|
27
|
+
mainContext.drawImage(tileImage, 0, 0);
|
|
28
|
+
for (pos.x = tileCollisionSize.x; pos.x--;)
|
|
29
|
+
for (pos.y = tileCollisionSize.y; pos.y--;)
|
|
30
|
+
{
|
|
31
|
+
const imageData = mainContext.getImageData(pos.x, 16*(imageLevelDataRow+1)-pos.y-1, 1, 1).data;
|
|
32
|
+
if (imageData[0])
|
|
33
|
+
{
|
|
34
|
+
const tileIndex = 1;
|
|
35
|
+
const direction = randInt(4)
|
|
36
|
+
const mirror = randInt(2);
|
|
37
|
+
const color = randColor();
|
|
38
|
+
const data = new TileLayerData(tileIndex, direction, mirror, color);
|
|
39
|
+
tileLayer.setData(pos, data);
|
|
40
|
+
setTileCollisionData(pos, 1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
tileLayer.redraw();
|
|
44
|
+
|
|
45
|
+
// move camera to center of collision
|
|
46
|
+
cameraPos = tileCollisionSize.scale(.5);
|
|
47
|
+
|
|
48
|
+
// enable gravity
|
|
49
|
+
gravity = -.01;
|
|
50
|
+
|
|
51
|
+
// create particle emitter
|
|
52
|
+
particleEmitter = new ParticleEmitter(
|
|
53
|
+
vec2(16), 0, // emitPos, emitAngle
|
|
54
|
+
1, 0, 500, PI, // emitSize, emitTime, emitRate, emiteCone
|
|
55
|
+
0, vec2(16), // tileIndex, tileSize
|
|
56
|
+
new Color(1,1,1), new Color(0,0,0), // colorStartA, colorStartB
|
|
57
|
+
new Color(1,1,1,0), new Color(0,0,0,0), // colorEndA, colorEndB
|
|
58
|
+
2, .2, .2, .1, .05, // time, sizeStart, sizeEnd, speed, angleSpeed
|
|
59
|
+
.99, 1, 1, PI, // damping, angleDamping, gravityScale, cone
|
|
60
|
+
.05, .5, 1, 1 // fadeRate, randomness, collide, additive
|
|
61
|
+
);
|
|
62
|
+
particleEmitter.elasticity = .3; // bounce when it collides
|
|
63
|
+
particleEmitter.trailScale = 2; // stretch in direction of motion
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
67
|
+
function gameUpdate()
|
|
68
|
+
{
|
|
69
|
+
if (mouseWasPressed(0))
|
|
70
|
+
{
|
|
71
|
+
// play sound when mouse is pressed
|
|
72
|
+
sound_click.play(mousePos);
|
|
73
|
+
|
|
74
|
+
// change particle color and set to fade out
|
|
75
|
+
particleEmitter.colorStartA = new Color;
|
|
76
|
+
particleEmitter.colorStartB = randColor();
|
|
77
|
+
particleEmitter.colorEndA = particleEmitter.colorStartA.scale(1,0);
|
|
78
|
+
particleEmitter.colorEndB = particleEmitter.colorStartB.scale(1,0);
|
|
79
|
+
|
|
80
|
+
// unlock medals
|
|
81
|
+
medal_example.unlock();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// move particles to mouse location if on screen
|
|
85
|
+
if (mousePosScreen.x)
|
|
86
|
+
particleEmitter.pos = mousePos;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
90
|
+
function gameUpdatePost()
|
|
91
|
+
{
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
96
|
+
function gameRender()
|
|
97
|
+
{
|
|
98
|
+
// draw a grey square in the background without using webgl
|
|
99
|
+
drawRect(cameraPos, tileCollisionSize.add(vec2(5)), new Color(.2,.2,.2), 0, 0);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
103
|
+
function gameRenderPost()
|
|
104
|
+
{
|
|
105
|
+
// draw to overlay canvas for hud rendering
|
|
106
|
+
drawTextScreen('LittleJS Engine Demo', vec2(mainCanvasSize.x/2, 80), 80);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
110
|
+
// Startup LittleJS Engine
|
|
111
|
+
engineInit(gameInit, gameUpdate, gameUpdatePost, gameRender, gameRenderPost, 'tiles.png');
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<html><head>
|
|
2
|
+
<title>Little JS Starter Project</title>
|
|
3
|
+
<meta name=viewport content=width=device-width,height=device-height,initial-scale=1,maximum-scale=1>
|
|
4
|
+
<meta name=apple-mobile-web-app-capable content=yes>
|
|
5
|
+
<meta name=mobile-web-app-capable content=yes>
|
|
6
|
+
<link rel=icon type=image/png href=../favicon.png>
|
|
7
|
+
</head><body>
|
|
8
|
+
|
|
9
|
+
<!-- LittleJS engine scripts -->
|
|
10
|
+
<script src=../../src/engineDebug.js?126></script>
|
|
11
|
+
<script src=../../src/engineUtilities.js?126></script>
|
|
12
|
+
<script src=../../src/engineSettings.js?126></script>
|
|
13
|
+
<script src=../../src/engineObject.js?126></script>
|
|
14
|
+
<script src=../../src/engineDraw.js?126></script>
|
|
15
|
+
<script src=../../src/engineInput.js?126></script>
|
|
16
|
+
<script src=../../src/engineAudio.js?126></script>
|
|
17
|
+
<script src=../../src/engineTileLayer.js?126></script>
|
|
18
|
+
<script src=../../src/engineParticles.js?126></script>
|
|
19
|
+
<script src=../../src/engineMedals.js?126></script>
|
|
20
|
+
<script src=../../src/engineWebGL.js?126></script>
|
|
21
|
+
<script src=../../src/engine.js?126></script>
|
|
22
|
+
|
|
23
|
+
<!-- You can also include all engine scripts like this... -->
|
|
24
|
+
<!-- <script src=engine/engine.all.js></script> -->
|
|
25
|
+
|
|
26
|
+
<!-- Add your game scripts here -->
|
|
27
|
+
<script src=game.js?126></script>
|
|
Binary file
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<html><head>
|
|
2
|
+
<title>Little JS Stress Test</title>
|
|
2
3
|
<meta name=viewport content=width=device-width,height=device-height,initial-scale=1,maximum-scale=1>
|
|
3
4
|
<meta name=apple-mobile-web-app-capable content=yes>
|
|
4
5
|
<meta name=mobile-web-app-capable content=yes>
|
|
5
|
-
<link rel=icon type=image/png href
|
|
6
|
+
<link rel=icon type=image/png href=../favicon.png>
|
|
6
7
|
</head><body>
|
|
7
8
|
|
|
8
|
-
<script src=../../
|
|
9
|
+
<script src=../../build/littlejs.min.js?126></script>
|
|
9
10
|
<script>
|
|
10
11
|
|
|
11
12
|
/*
|