Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
019f88c2bc |
97
meson.build
97
meson.build
@@ -1,7 +1,8 @@
|
|||||||
project('cell', ['c', 'cpp'],
|
project('cell', ['c', 'cpp'],
|
||||||
version: '0.9.3',
|
version: '0.9.3',
|
||||||
meson_version: '>=1.4',
|
meson_version: '>=1.4',
|
||||||
default_options : [ 'cpp_std=c++11'])
|
default_options : [ 'cpp_std=c++11']
|
||||||
|
)
|
||||||
|
|
||||||
libtype = get_option('default_library')
|
libtype = get_option('default_library')
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ if git_commit_cmd.returncode() == 0
|
|||||||
cell_commit = git_commit_cmd.stdout().strip()
|
cell_commit = git_commit_cmd.stdout().strip()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Important: pass the definitions without double-escaping quotes
|
# Pass version/commit defines to C
|
||||||
add_project_arguments(
|
add_project_arguments(
|
||||||
'-DCELL_VERSION="' + cell_version + '"',
|
'-DCELL_VERSION="' + cell_version + '"',
|
||||||
'-DCELL_COMMIT="' + cell_commit + '"',
|
'-DCELL_COMMIT="' + cell_commit + '"',
|
||||||
@@ -67,21 +68,20 @@ endif
|
|||||||
|
|
||||||
cmake = import('cmake')
|
cmake = import('cmake')
|
||||||
|
|
||||||
# Try to find system-installed mbedtls first
|
# mbedtls (either system or subproject)
|
||||||
mbedtls_dep = dependency('mbedtls', static: true, required: false)
|
mbedtls_dep = dependency('mbedtls', static: true, required: false)
|
||||||
mbedx509_dep = dependency('mbedx509', static: true, required: false)
|
mbedx509_dep = dependency('mbedx509', static: true, required: false)
|
||||||
mbedcrypto_dep = dependency('mbedcrypto', static: true, required: false)
|
mbedcrypto_dep = dependency('mbedcrypto', static: true, required: false)
|
||||||
|
|
||||||
if not mbedtls_dep.found() or not mbedx509_dep.found() or not mbedcrypto_dep.found()
|
if not mbedtls_dep.found() or not mbedx509_dep.found() or not mbedcrypto_dep.found()
|
||||||
message('⚙ System mbedtls not found, building subproject...')
|
message('⚙ System mbedtls not found, building subproject...')
|
||||||
mbedtls_opts = cmake.subproject_options()
|
mbedtls_opts = cmake.subproject_options()
|
||||||
mbedtls_opts.add_cmake_defines({
|
mbedtls_opts.add_cmake_defines({
|
||||||
'ENABLE_PROGRAMS': 'OFF', # Disable Mbed TLS programs
|
'ENABLE_PROGRAMS': 'OFF',
|
||||||
'ENABLE_TESTING': 'OFF', # Disable Mbed TLS tests
|
'ENABLE_TESTING': 'OFF',
|
||||||
'CMAKE_BUILD_TYPE': 'Release', # Optimize for release
|
'CMAKE_BUILD_TYPE': 'Release',
|
||||||
'MBEDTLS_FATAL_WARNINGS': 'ON', # Treat warnings as errors
|
'MBEDTLS_FATAL_WARNINGS': 'ON',
|
||||||
'USE_STATIC_MBEDTLS_LIBRARY': 'ON',# Build static libraries
|
'USE_STATIC_MBEDTLS_LIBRARY': 'ON',
|
||||||
'USE_SHARED_MBEDTLS_LIBRARY': 'OFF'# Disable shared libraries
|
'USE_SHARED_MBEDTLS_LIBRARY': 'OFF'
|
||||||
})
|
})
|
||||||
mbedtls_proj = cmake.subproject('mbedtls', options: mbedtls_opts)
|
mbedtls_proj = cmake.subproject('mbedtls', options: mbedtls_opts)
|
||||||
deps += [
|
deps += [
|
||||||
@@ -93,6 +93,7 @@ else
|
|||||||
deps += [mbedtls_dep, mbedx509_dep, mbedcrypto_dep]
|
deps += [mbedtls_dep, mbedx509_dep, mbedcrypto_dep]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# SDL3 (system or subproject)
|
||||||
sdl3_opts = cmake.subproject_options()
|
sdl3_opts = cmake.subproject_options()
|
||||||
sdl3_opts.add_cmake_defines({
|
sdl3_opts.add_cmake_defines({
|
||||||
'SDL_STATIC': 'ON',
|
'SDL_STATIC': 'ON',
|
||||||
@@ -103,46 +104,13 @@ sdl3_opts.add_cmake_defines({
|
|||||||
'SDL_PIPEWIRE': 'ON',
|
'SDL_PIPEWIRE': 'ON',
|
||||||
'SDL_PULSEAUDIO': 'ON',
|
'SDL_PULSEAUDIO': 'ON',
|
||||||
})
|
})
|
||||||
|
|
||||||
cc = meson.get_compiler('c')
|
cc = meson.get_compiler('c')
|
||||||
|
|
||||||
if host_machine.system() == 'darwin'
|
|
||||||
deps += dependency('appleframeworks', modules: 'accelerate')
|
|
||||||
add_project_arguments('-DACCELERATE_NEW_LAPACK=1', language:'c')
|
|
||||||
add_project_arguments('-DACCELERATE_LAPACK_ILP64=1', language:'c')
|
|
||||||
endif
|
|
||||||
|
|
||||||
if host_machine.system() == 'linux'
|
|
||||||
deps += cc.find_library('asound', required:true)
|
|
||||||
deps += [dependency('x11'), dependency('xi'), dependency('xcursor'), dependency('egl'), dependency('gl')]
|
|
||||||
endif
|
|
||||||
|
|
||||||
if host_machine.system() == 'windows'
|
|
||||||
deps += cc.find_library('d3d11')
|
|
||||||
deps += cc.find_library('ws2_32', required:true)
|
|
||||||
deps += cc.find_library('dbghelp')
|
|
||||||
deps += cc.find_library('winmm')
|
|
||||||
deps += cc.find_library('setupapi')
|
|
||||||
deps += cc.find_library('imm32')
|
|
||||||
deps += cc.find_library('version')
|
|
||||||
deps += cc.find_library('cfgmgr32')
|
|
||||||
deps += cc.find_library('bcrypt')
|
|
||||||
sdl3_opts.add_cmake_defines({'HAVE_ISINF': '1'}) # Hack for MSYS2
|
|
||||||
sdl3_opts.add_cmake_defines({'HAVE_ISNAN': '1'})
|
|
||||||
link += '-static'
|
|
||||||
endif
|
|
||||||
|
|
||||||
if host_machine.system() == 'emscripten'
|
if host_machine.system() == 'emscripten'
|
||||||
link += '-sUSE_WEBGPU'
|
link += '-sUSE_WEBGPU'
|
||||||
# Use the pre-installed copy
|
deps += dependency('sdl3', static : true, method : 'pkg-config', required : true)
|
||||||
deps += dependency('sdl3',
|
|
||||||
static : true,
|
|
||||||
method : 'pkg-config', # or 'cmake' if you prefer
|
|
||||||
required : true)
|
|
||||||
else
|
else
|
||||||
# Try to find system-installed SDL3 first
|
|
||||||
sdl3_dep = dependency('sdl3', static: true, required: false)
|
sdl3_dep = dependency('sdl3', static: true, required: false)
|
||||||
|
|
||||||
if not sdl3_dep.found()
|
if not sdl3_dep.found()
|
||||||
message('⚙ System SDL3 not found, building subproject...')
|
message('⚙ System SDL3 not found, building subproject...')
|
||||||
sdl3_proj = cmake.subproject('sdl3', options : sdl3_opts)
|
sdl3_proj = cmake.subproject('sdl3', options : sdl3_opts)
|
||||||
@@ -154,13 +122,9 @@ endif
|
|||||||
|
|
||||||
quickjs_opts = []
|
quickjs_opts = []
|
||||||
quickjs_opts += 'default_library=static'
|
quickjs_opts += 'default_library=static'
|
||||||
|
|
||||||
# Enable leak detection for non-release builds
|
|
||||||
if get_option('buildtype') != 'release'
|
if get_option('buildtype') != 'release'
|
||||||
quickjs_opts += 'leaks=true'
|
quickjs_opts += 'leaks=true'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Try to find system-installed quickjs first
|
|
||||||
quickjs_dep = dependency('quickjs', static: true, required: false)
|
quickjs_dep = dependency('quickjs', static: true, required: false)
|
||||||
if not quickjs_dep.found()
|
if not quickjs_dep.found()
|
||||||
message('⚙ System quickjs not found, building subproject...')
|
message('⚙ System quickjs not found, building subproject...')
|
||||||
@@ -169,7 +133,6 @@ else
|
|||||||
deps += quickjs_dep
|
deps += quickjs_dep
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Try to find system-installed qjs-layout first
|
|
||||||
qjs_layout_dep = dependency('qjs-layout', static: true, required: false)
|
qjs_layout_dep = dependency('qjs-layout', static: true, required: false)
|
||||||
if not qjs_layout_dep.found()
|
if not qjs_layout_dep.found()
|
||||||
message('⚙ System qjs-layout not found, building subproject...')
|
message('⚙ System qjs-layout not found, building subproject...')
|
||||||
@@ -186,7 +149,6 @@ else
|
|||||||
deps += miniz_dep
|
deps += miniz_dep
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Try to find system-installed physfs first
|
|
||||||
physfs_dep = dependency('physfs', static: true, required: false)
|
physfs_dep = dependency('physfs', static: true, required: false)
|
||||||
if not physfs_dep.found()
|
if not physfs_dep.found()
|
||||||
message('⚙ System physfs not found, building subproject...')
|
message('⚙ System physfs not found, building subproject...')
|
||||||
@@ -197,7 +159,6 @@ endif
|
|||||||
|
|
||||||
deps += dependency('threads')
|
deps += dependency('threads')
|
||||||
|
|
||||||
# Try to find system-installed chipmunk first
|
|
||||||
chipmunk_dep = dependency('chipmunk', static: true, required: false)
|
chipmunk_dep = dependency('chipmunk', static: true, required: false)
|
||||||
if not chipmunk_dep.found()
|
if not chipmunk_dep.found()
|
||||||
message('⚙ System chipmunk not found, building subproject...')
|
message('⚙ System chipmunk not found, building subproject...')
|
||||||
@@ -207,7 +168,6 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if host_machine.system() != 'emscripten'
|
if host_machine.system() != 'emscripten'
|
||||||
# Try to find system-installed enet first
|
|
||||||
enet_dep = dependency('enet', static: true, required: false)
|
enet_dep = dependency('enet', static: true, required: false)
|
||||||
if not enet_dep.found()
|
if not enet_dep.found()
|
||||||
message('⚙ System enet not found, building subproject...')
|
message('⚙ System enet not found, building subproject...')
|
||||||
@@ -219,8 +179,6 @@ if host_machine.system() != 'emscripten'
|
|||||||
|
|
||||||
tracy_opts = ['fibers=true', 'no_exit=true', 'libunwind_backtrace=true']
|
tracy_opts = ['fibers=true', 'no_exit=true', 'libunwind_backtrace=true']
|
||||||
add_project_arguments('-DTRACY_ENABLE', language:['c','cpp'])
|
add_project_arguments('-DTRACY_ENABLE', language:['c','cpp'])
|
||||||
|
|
||||||
# Try to find system-installed tracy first
|
|
||||||
tracy_dep = dependency('tracy', static: true, required: false)
|
tracy_dep = dependency('tracy', static: true, required: false)
|
||||||
if not tracy_dep.found()
|
if not tracy_dep.found()
|
||||||
message('⚙ System tracy not found, building subproject...')
|
message('⚙ System tracy not found, building subproject...')
|
||||||
@@ -232,7 +190,6 @@ if host_machine.system() != 'emscripten'
|
|||||||
src += 'qjs_dmon.c'
|
src += 'qjs_dmon.c'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Try to find system-installed soloud first
|
|
||||||
soloud_dep = dependency('soloud', static: true, required: false)
|
soloud_dep = dependency('soloud', static: true, required: false)
|
||||||
if not soloud_dep.found()
|
if not soloud_dep.found()
|
||||||
message('⚙ System soloud not found, building subproject...')
|
message('⚙ System soloud not found, building subproject...')
|
||||||
@@ -241,7 +198,6 @@ else
|
|||||||
deps += soloud_dep
|
deps += soloud_dep
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Try to find system-installed qrencode first
|
|
||||||
qr_dep = dependency('qrencode', static: true, required: false)
|
qr_dep = dependency('qrencode', static: true, required: false)
|
||||||
if not qr_dep.found()
|
if not qr_dep.found()
|
||||||
message('⚙ System qrencode not found, building subproject...')
|
message('⚙ System qrencode not found, building subproject...')
|
||||||
@@ -250,11 +206,9 @@ else
|
|||||||
deps += qr_dep
|
deps += qr_dep
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Storefront SDK support
|
|
||||||
storefront = get_option('storefront')
|
storefront = get_option('storefront')
|
||||||
if storefront == 'steam'
|
if storefront == 'steam'
|
||||||
steam_sdk_path = meson.current_source_dir() / 'sdk'
|
steam_sdk_path = meson.current_source_dir() / 'sdk'
|
||||||
|
|
||||||
if host_machine.system() == 'darwin'
|
if host_machine.system() == 'darwin'
|
||||||
steam_lib_path = steam_sdk_path / 'redistributable_bin' / 'osx' / 'libsteam_api.dylib'
|
steam_lib_path = steam_sdk_path / 'redistributable_bin' / 'osx' / 'libsteam_api.dylib'
|
||||||
elif host_machine.system() == 'linux'
|
elif host_machine.system() == 'linux'
|
||||||
@@ -281,7 +235,10 @@ else
|
|||||||
message('Storefront: ' + storefront)
|
message('Storefront: ' + storefront)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Any extra linker flags
|
||||||
link_args = link
|
link_args = link
|
||||||
|
|
||||||
|
# === COLLECT ALL SOURCE FILES ===
|
||||||
sources = []
|
sources = []
|
||||||
src += [
|
src += [
|
||||||
'anim.c', 'config.c', 'datastream.c','font.c','HandmadeMath.c','jsffi.c','model.c',
|
'anim.c', 'config.c', 'datastream.c','font.c','HandmadeMath.c','jsffi.c','model.c',
|
||||||
@@ -289,7 +246,6 @@ src += [
|
|||||||
'sprite.c', 'rtree.c', 'qjs_nota.c', 'qjs_soloud.c', 'qjs_sdl.c', 'qjs_sdl_video.c', 'qjs_sdl_surface.c', 'qjs_math.c', 'qjs_geometry.c', 'qjs_transform.c', 'qjs_sprite.c', 'qjs_io.c', 'qjs_fd.c', 'qjs_os.c', 'qjs_actor.c',
|
'sprite.c', 'rtree.c', 'qjs_nota.c', 'qjs_soloud.c', 'qjs_sdl.c', 'qjs_sdl_video.c', 'qjs_sdl_surface.c', 'qjs_math.c', 'qjs_geometry.c', 'qjs_transform.c', 'qjs_sprite.c', 'qjs_io.c', 'qjs_fd.c', 'qjs_os.c', 'qjs_actor.c',
|
||||||
'qjs_qr.c', 'qjs_wota.c', 'monocypher.c', 'qjs_blob.c', 'qjs_crypto.c', 'qjs_time.c', 'qjs_http.c', 'qjs_rtree.c', 'qjs_spline.c', 'qjs_js.c', 'qjs_debug.c', 'picohttpparser.c', 'qjs_miniz.c'
|
'qjs_qr.c', 'qjs_wota.c', 'monocypher.c', 'qjs_blob.c', 'qjs_crypto.c', 'qjs_time.c', 'qjs_http.c', 'qjs_rtree.c', 'qjs_spline.c', 'qjs_js.c', 'qjs_debug.c', 'picohttpparser.c', 'qjs_miniz.c'
|
||||||
]
|
]
|
||||||
# quirc src
|
|
||||||
src += [
|
src += [
|
||||||
'thirdparty/quirc/quirc.c', 'thirdparty/quirc/decode.c',
|
'thirdparty/quirc/quirc.c', 'thirdparty/quirc/decode.c',
|
||||||
'thirdparty/quirc/identify.c', 'thirdparty/quirc/version_db.c'
|
'thirdparty/quirc/identify.c', 'thirdparty/quirc/version_db.c'
|
||||||
@@ -326,23 +282,37 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
strip_enabled = ['release', 'minsize'].contains(get_option('buildtype'))
|
strip_enabled = ['release', 'minsize'].contains(get_option('buildtype'))
|
||||||
|
|
||||||
if strip_enabled
|
if strip_enabled
|
||||||
add_project_link_arguments('-s', language: ['c', 'cpp'])
|
add_project_link_arguments('-s', language: ['c', 'cpp'])
|
||||||
endif
|
endif
|
||||||
|
|
||||||
cell = executable('cell', sources,
|
# === NEW: build a STATIC library "cell_core" from exactly the same sources ===
|
||||||
|
cell_core = static_library(
|
||||||
|
'cell_core', # → libcell_core.a
|
||||||
|
sources,
|
||||||
|
dependencies: deps,
|
||||||
|
include_directories: includers
|
||||||
|
)
|
||||||
|
|
||||||
|
# === Now build the "cell" executable by linking against that static lib ===
|
||||||
|
cell = executable('cell',
|
||||||
|
link_with : [ cell_core ],
|
||||||
dependencies : deps,
|
dependencies : deps,
|
||||||
include_directories: includers,
|
include_directories: includers,
|
||||||
link_args: link,
|
link_args : link_args,
|
||||||
build_rpath : '$ORIGIN',
|
build_rpath : '$ORIGIN',
|
||||||
install : true
|
install : true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# === Declare a Meson dependency so that other subprojects can do `dependency('cell')` if needed ===
|
||||||
cell_dep = declare_dependency(
|
cell_dep = declare_dependency(
|
||||||
link_with: cell
|
link_with: [ cell_core ],
|
||||||
|
include_directories: includers
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# === TESTS (unchanged) ===
|
||||||
tests = [
|
tests = [
|
||||||
'spawn_actor',
|
'spawn_actor',
|
||||||
'empty',
|
'empty',
|
||||||
@@ -353,7 +323,6 @@ tests = [
|
|||||||
'send',
|
'send',
|
||||||
'delay'
|
'delay'
|
||||||
]
|
]
|
||||||
|
|
||||||
foreach file : tests
|
foreach file : tests
|
||||||
test(file, cell, args:['tests/' + file])
|
test(file, cell, args:['tests/' + file])
|
||||||
endforeach
|
endforeach
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include "qjs_steam.h"
|
#include "qjs_steam.h"
|
||||||
#include "jsffi.h"
|
#include "cell.h"
|
||||||
|
#include "qjs_macros.h"
|
||||||
|
#include "qjs_blob.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <steam/steam_api.h>
|
#include <steam/steam_api.h>
|
||||||
@@ -60,21 +62,22 @@ JSC_CCALL(steam_run_callbacks,
|
|||||||
)
|
)
|
||||||
|
|
||||||
// USER STATS & ACHIEVEMENTS
|
// USER STATS & ACHIEVEMENTS
|
||||||
JSC_CCALL(stats_request,
|
JSC_CCALL(steam_stats_request,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
bool success = SteamAPI_ISteamUserStats_RequestCurrentStats(steam_stats);
|
SteamAPICall_t call = SteamAPI_ISteamUserStats_RequestUserStats(steam_stats, SteamAPI_ISteamUser_GetSteamID(steam_user));
|
||||||
|
bool success = (call != k_uAPICallInvalid);
|
||||||
return JS_NewBool(js, success);
|
return JS_NewBool(js, success);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(stats_store,
|
JSC_CCALL(steam_stats_store,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
bool success = SteamAPI_ISteamUserStats_StoreStats(steam_stats);
|
bool success = SteamAPI_ISteamUserStats_StoreStats(steam_stats);
|
||||||
return JS_NewBool(js, success);
|
return JS_NewBool(js, success);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(stats_get_int,
|
JSC_CCALL(steam_stats_get_int,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
const char *name = JS_ToCString(js, argv[0]);
|
const char *name = JS_ToCString(js, argv[0]);
|
||||||
@@ -88,7 +91,7 @@ JSC_CCALL(stats_get_int,
|
|||||||
return JS_NewInt32(js, value);
|
return JS_NewInt32(js, value);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(stats_get_float,
|
JSC_CCALL(steam_stats_get_float,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
const char *name = JS_ToCString(js, argv[0]);
|
const char *name = JS_ToCString(js, argv[0]);
|
||||||
@@ -102,7 +105,7 @@ JSC_CCALL(stats_get_float,
|
|||||||
return JS_NewFloat64(js, value);
|
return JS_NewFloat64(js, value);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(stats_set_int,
|
JSC_CCALL(steam_stats_set_int,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
const char *name = JS_ToCString(js, argv[0]);
|
const char *name = JS_ToCString(js, argv[0]);
|
||||||
@@ -117,7 +120,7 @@ JSC_CCALL(stats_set_int,
|
|||||||
return JS_NewBool(js, success);
|
return JS_NewBool(js, success);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(stats_set_float,
|
JSC_CCALL(steam_stats_set_float,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
const char *name = JS_ToCString(js, argv[0]);
|
const char *name = JS_ToCString(js, argv[0]);
|
||||||
@@ -133,7 +136,7 @@ JSC_CCALL(stats_set_float,
|
|||||||
return JS_NewBool(js, success);
|
return JS_NewBool(js, success);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(achievement_get,
|
JSC_CCALL(steam_achievement_get,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
const char *name = JS_ToCString(js, argv[0]);
|
const char *name = JS_ToCString(js, argv[0]);
|
||||||
@@ -147,7 +150,7 @@ JSC_CCALL(achievement_get,
|
|||||||
return JS_NewBool(js, achieved);
|
return JS_NewBool(js, achieved);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(achievement_set,
|
JSC_CCALL(steam_achievement_set,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
const char *name = JS_ToCString(js, argv[0]);
|
const char *name = JS_ToCString(js, argv[0]);
|
||||||
@@ -159,7 +162,7 @@ JSC_CCALL(achievement_set,
|
|||||||
return JS_NewBool(js, success);
|
return JS_NewBool(js, success);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(achievement_clear,
|
JSC_CCALL(steam_achievement_clear,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
const char *name = JS_ToCString(js, argv[0]);
|
const char *name = JS_ToCString(js, argv[0]);
|
||||||
@@ -171,14 +174,14 @@ JSC_CCALL(achievement_clear,
|
|||||||
return JS_NewBool(js, success);
|
return JS_NewBool(js, success);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(achievement_count,
|
JSC_CCALL(steam_achievement_count,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
uint32 count = SteamAPI_ISteamUserStats_GetNumAchievements(steam_stats);
|
uint32 count = SteamAPI_ISteamUserStats_GetNumAchievements(steam_stats);
|
||||||
return JS_NewUint32(js, count);
|
return JS_NewUint32(js, count);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(achievement_name,
|
JSC_CCALL(steam_achievement_name,
|
||||||
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
if (!steam_stats) return JS_ThrowInternalError(js, "Steam stats not initialized");
|
||||||
|
|
||||||
uint32 index;
|
uint32 index;
|
||||||
@@ -191,21 +194,21 @@ JSC_CCALL(achievement_name,
|
|||||||
)
|
)
|
||||||
|
|
||||||
// APPS
|
// APPS
|
||||||
JSC_CCALL(app_id,
|
JSC_CCALL(steam_app_id,
|
||||||
if (!steam_utils) return JS_ThrowInternalError(js, "Steam utils not initialized");
|
if (!steam_utils) return JS_ThrowInternalError(js, "Steam utils not initialized");
|
||||||
|
|
||||||
AppId_t appid = SteamAPI_ISteamUtils_GetAppID(steam_utils);
|
AppId_t appid = SteamAPI_ISteamUtils_GetAppID(steam_utils);
|
||||||
return JS_NewUint32(js, appid);
|
return JS_NewUint32(js, appid);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(app_owner,
|
JSC_CCALL(steam_app_owner,
|
||||||
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
||||||
|
|
||||||
uint64_steamid owner = SteamAPI_ISteamApps_GetAppOwner(steam_apps);
|
uint64_steamid owner = SteamAPI_ISteamApps_GetAppOwner(steam_apps);
|
||||||
return JS_NewBigUint64(js, owner);
|
return JS_NewBigUint64(js, owner);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(app_installed,
|
JSC_CCALL(steam_app_installed,
|
||||||
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
||||||
|
|
||||||
uint32 appid;
|
uint32 appid;
|
||||||
@@ -215,21 +218,21 @@ JSC_CCALL(app_installed,
|
|||||||
return JS_NewBool(js, installed);
|
return JS_NewBool(js, installed);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(app_subscribed,
|
JSC_CCALL(steam_app_subscribed,
|
||||||
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
||||||
|
|
||||||
bool subscribed = SteamAPI_ISteamApps_BIsSubscribed(steam_apps);
|
bool subscribed = SteamAPI_ISteamApps_BIsSubscribed(steam_apps);
|
||||||
return JS_NewBool(js, subscribed);
|
return JS_NewBool(js, subscribed);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(app_language,
|
JSC_CCALL(steam_app_language,
|
||||||
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
||||||
|
|
||||||
const char *lang = SteamAPI_ISteamApps_GetCurrentGameLanguage(steam_apps);
|
const char *lang = SteamAPI_ISteamApps_GetCurrentGameLanguage(steam_apps);
|
||||||
return JS_NewString(js, lang ? lang : "english");
|
return JS_NewString(js, lang ? lang : "english");
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(app_dlc_installed,
|
JSC_CCALL(steam_app_dlc_installed,
|
||||||
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
if (!steam_apps) return JS_ThrowInternalError(js, "Steam apps not initialized");
|
||||||
|
|
||||||
AppId_t dlcid;
|
AppId_t dlcid;
|
||||||
@@ -240,21 +243,21 @@ JSC_CCALL(app_dlc_installed,
|
|||||||
)
|
)
|
||||||
|
|
||||||
// USER
|
// USER
|
||||||
JSC_CCALL(user_logged_on,
|
JSC_CCALL(steam_user_logged_on,
|
||||||
if (!steam_user) return JS_ThrowInternalError(js, "Steam user not initialized");
|
if (!steam_user) return JS_ThrowInternalError(js, "Steam user not initialized");
|
||||||
|
|
||||||
bool logged = SteamAPI_ISteamUser_BLoggedOn(steam_user);
|
bool logged = SteamAPI_ISteamUser_BLoggedOn(steam_user);
|
||||||
return JS_NewBool(js, logged);
|
return JS_NewBool(js, logged);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(user_steam_id,
|
JSC_CCALL(steam_user_steam_id,
|
||||||
if (!steam_user) return JS_ThrowInternalError(js, "Steam user not initialized");
|
if (!steam_user) return JS_ThrowInternalError(js, "Steam user not initialized");
|
||||||
|
|
||||||
uint64_steamid id = SteamAPI_ISteamUser_GetSteamID(steam_user);
|
uint64_steamid id = SteamAPI_ISteamUser_GetSteamID(steam_user);
|
||||||
return JS_NewBigUint64(js, id);
|
return JS_NewBigUint64(js, id);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(user_level,
|
JSC_CCALL(steam_user_level,
|
||||||
if (!steam_user) return JS_ThrowInternalError(js, "Steam user not initialized");
|
if (!steam_user) return JS_ThrowInternalError(js, "Steam user not initialized");
|
||||||
|
|
||||||
int level = SteamAPI_ISteamUser_GetPlayerSteamLevel(steam_user);
|
int level = SteamAPI_ISteamUser_GetPlayerSteamLevel(steam_user);
|
||||||
@@ -262,14 +265,14 @@ JSC_CCALL(user_level,
|
|||||||
)
|
)
|
||||||
|
|
||||||
// FRIENDS
|
// FRIENDS
|
||||||
JSC_CCALL(friends_name,
|
JSC_CCALL(steam_friends_name,
|
||||||
if (!steam_friends) return JS_ThrowInternalError(js, "Steam friends not initialized");
|
if (!steam_friends) return JS_ThrowInternalError(js, "Steam friends not initialized");
|
||||||
|
|
||||||
const char *name = SteamAPI_ISteamFriends_GetPersonaName(steam_friends);
|
const char *name = SteamAPI_ISteamFriends_GetPersonaName(steam_friends);
|
||||||
return JS_NewString(js, name ? name : "");
|
return JS_NewString(js, name ? name : "");
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(friends_state,
|
JSC_CCALL(steam_friends_state,
|
||||||
if (!steam_friends) return JS_ThrowInternalError(js, "Steam friends not initialized");
|
if (!steam_friends) return JS_ThrowInternalError(js, "Steam friends not initialized");
|
||||||
|
|
||||||
EPersonaState state = SteamAPI_ISteamFriends_GetPersonaState(steam_friends);
|
EPersonaState state = SteamAPI_ISteamFriends_GetPersonaState(steam_friends);
|
||||||
@@ -288,21 +291,21 @@ JSC_CCALL(friends_state,
|
|||||||
)
|
)
|
||||||
|
|
||||||
// CLOUD STORAGE
|
// CLOUD STORAGE
|
||||||
JSC_CCALL(cloud_enabled_app,
|
JSC_CCALL(steam_cloud_enabled_app,
|
||||||
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
||||||
|
|
||||||
bool enabled = SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(steam_remote);
|
bool enabled = SteamAPI_ISteamRemoteStorage_IsCloudEnabledForApp(steam_remote);
|
||||||
return JS_NewBool(js, enabled);
|
return JS_NewBool(js, enabled);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(cloud_enabled_account,
|
JSC_CCALL(steam_cloud_enabled_account,
|
||||||
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
||||||
|
|
||||||
bool enabled = SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(steam_remote);
|
bool enabled = SteamAPI_ISteamRemoteStorage_IsCloudEnabledForAccount(steam_remote);
|
||||||
return JS_NewBool(js, enabled);
|
return JS_NewBool(js, enabled);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(cloud_enable,
|
JSC_CCALL(steam_cloud_enable,
|
||||||
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
||||||
|
|
||||||
bool enable = JS_ToBool(js, argv[0]);
|
bool enable = JS_ToBool(js, argv[0]);
|
||||||
@@ -310,7 +313,7 @@ JSC_CCALL(cloud_enable,
|
|||||||
return JS_UNDEFINED;
|
return JS_UNDEFINED;
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(cloud_quota,
|
JSC_CCALL(steam_cloud_quota,
|
||||||
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
||||||
|
|
||||||
uint64 total, available;
|
uint64 total, available;
|
||||||
@@ -324,7 +327,7 @@ JSC_CCALL(cloud_quota,
|
|||||||
return obj;
|
return obj;
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(cloud_write,
|
JSC_CCALL(steam_cloud_write,
|
||||||
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
||||||
|
|
||||||
const char *filename = JS_ToCString(js, argv[0]);
|
const char *filename = JS_ToCString(js, argv[0]);
|
||||||
@@ -341,7 +344,7 @@ JSC_CCALL(cloud_write,
|
|||||||
}
|
}
|
||||||
data = (uint8_t*)str;
|
data = (uint8_t*)str;
|
||||||
} else {
|
} else {
|
||||||
data = js_get_blob_data(js, &data_len, argv[1]);
|
data = (uint8_t*)js_get_blob_data(js, &data_len, argv[1]);
|
||||||
if (!data) {
|
if (!data) {
|
||||||
JS_FreeCString(js, filename);
|
JS_FreeCString(js, filename);
|
||||||
return JS_ThrowTypeError(js, "Second argument must be string or ArrayBuffer");
|
return JS_ThrowTypeError(js, "Second argument must be string or ArrayBuffer");
|
||||||
@@ -358,7 +361,7 @@ JSC_CCALL(cloud_write,
|
|||||||
return JS_NewBool(js, success);
|
return JS_NewBool(js, success);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(cloud_read,
|
JSC_CCALL(steam_cloud_read,
|
||||||
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
||||||
|
|
||||||
const char *filename = JS_ToCString(js, argv[0]);
|
const char *filename = JS_ToCString(js, argv[0]);
|
||||||
@@ -389,7 +392,7 @@ JSC_CCALL(cloud_read,
|
|||||||
return result;
|
return result;
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(cloud_delete,
|
JSC_CCALL(steam_cloud_delete,
|
||||||
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
||||||
|
|
||||||
const char *filename = JS_ToCString(js, argv[0]);
|
const char *filename = JS_ToCString(js, argv[0]);
|
||||||
@@ -401,7 +404,7 @@ JSC_CCALL(cloud_delete,
|
|||||||
return JS_NewBool(js, success);
|
return JS_NewBool(js, success);
|
||||||
)
|
)
|
||||||
|
|
||||||
JSC_CCALL(cloud_exists,
|
JSC_CCALL(steam_cloud_exists,
|
||||||
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
if (!steam_remote) return JS_ThrowInternalError(js, "Steam remote storage not initialized");
|
||||||
|
|
||||||
const char *filename = JS_ToCString(js, argv[0]);
|
const char *filename = JS_ToCString(js, argv[0]);
|
||||||
@@ -464,9 +467,9 @@ static const JSCFunctionListEntry js_steam_cloud_funcs[] = {
|
|||||||
|
|
||||||
// Main Steam API functions
|
// Main Steam API functions
|
||||||
static const JSCFunctionListEntry js_steam_funcs[] = {
|
static const JSCFunctionListEntry js_steam_funcs[] = {
|
||||||
MIST_FUNC_DEF(steam, steam_init, 0),
|
MIST_FUNC_DEF(steam, init, 0),
|
||||||
MIST_FUNC_DEF(steam, steam_shutdown, 0),
|
MIST_FUNC_DEF(steam, shutdown, 0),
|
||||||
MIST_FUNC_DEF(steam, steam_run_callbacks, 0),
|
MIST_FUNC_DEF(steam, run_callbacks, 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C" JSValue js_steam_use(JSContext *js) {
|
extern "C" JSValue js_steam_use(JSContext *js) {
|
||||||
|
|||||||
Reference in New Issue
Block a user