Oolite 1.91.0.7699-250829-cea269d
Loading...
Searching...
No Matches
OOJSOolite.m File Reference
import "OOJSOolite.h"
import "OOJavaScriptEngine.h"
import "OOStringParsing.h"
import "OOJSPlayer.h"
import "ResourceManager.h"
import "MyOpenGLView.h"
import "OOConstToString.h"
Include dependency graph for OOJSOolite.m:

Go to the source code of this file.

Enumerations

enum  {
  kOolite_version , kOolite_versionString , kOolite_jsVersion , kOolite_jsVersionString ,
  kOolite_gameSettings , kOolite_resourcePaths , kOolite_colorSaturation , kOolite_postFX ,
  kOolite_hdrToneMapper , kOolite_sdrToneMapper , kOolite_timeAccelerationFactor
}

Functions

static JSBool OoliteGetProperty (JSContext *context, JSObject *this, jsid propID, jsval *value)
static JSBool OoliteSetProperty (JSContext *context, JSObject *this, jsid propID, JSBool strict, jsval *value)
static NSString * VersionString (void)
static NSArray * VersionComponents (void)
static JSBool OoliteCompareVersion (JSContext *context, uintN argc, jsval *vp)
void InitOOJSOolite (JSContext *context, JSObject *global)

Variables

static JSClass sOoliteClass
static JSPropertySpec sOoliteProperties []
static JSFunctionSpec sOoliteMethods []

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
kOolite_version 
kOolite_versionString 
kOolite_jsVersion 
kOolite_jsVersionString 
kOolite_gameSettings 
kOolite_resourcePaths 
kOolite_colorSaturation 
kOolite_postFX 
kOolite_hdrToneMapper 
kOolite_sdrToneMapper 
kOolite_timeAccelerationFactor 

Definition at line 63 of file OOJSOolite.m.

64{
65 // Property IDs
66 kOolite_version, // version number components, array, read-only
67 kOolite_versionString, // version number as string, string, read-only
68 kOolite_jsVersion, // JavaScript version, integer, read-only
69 kOolite_jsVersionString, // JavaScript version as string, string, read-only
70 kOolite_gameSettings, // Various game settings, object, read-only
71 kOolite_resourcePaths, // Paths containing resources, built-in plus oxp/oxz, read-only
72 kOolite_colorSaturation, // Color saturation, integer, read/write
73 kOolite_postFX, // current post processing effect, integer, read/write
74 kOolite_hdrToneMapper, // currently active HDR tone mapper, string, read/write
75 kOolite_sdrToneMapper, // currently active SDR tone mapper, string, read/write
76#ifndef NDEBUG
77 kOolite_timeAccelerationFactor, // time acceleration, float, read/write
78#endif
79};
@ kOolite_version
Definition OOJSOolite.m:66
@ kOolite_sdrToneMapper
Definition OOJSOolite.m:75
@ kOolite_timeAccelerationFactor
Definition OOJSOolite.m:77
@ kOolite_colorSaturation
Definition OOJSOolite.m:72
@ kOolite_jsVersionString
Definition OOJSOolite.m:69
@ kOolite_jsVersion
Definition OOJSOolite.m:68
@ kOolite_hdrToneMapper
Definition OOJSOolite.m:74
@ kOolite_gameSettings
Definition OOJSOolite.m:70
@ kOolite_resourcePaths
Definition OOJSOolite.m:71
@ kOolite_versionString
Definition OOJSOolite.m:67
@ kOolite_postFX
Definition OOJSOolite.m:73

Function Documentation

◆ InitOOJSOolite()

void InitOOJSOolite ( JSContext * context,
JSObject * global )

Definition at line 110 of file OOJSOolite.m.

111{
112 JSObject *oolitePrototype = JS_InitClass(context, global, NULL, &sOoliteClass, OOJSUnconstructableConstruct, 0, sOoliteProperties, sOoliteMethods, NULL, NULL);
113 JS_DefineObject(context, global, "oolite", &sOoliteClass, oolitePrototype, OOJS_PROP_READONLY);
114}
static JSFunctionSpec sOoliteMethods[]
Definition OOJSOolite.m:102
static JSPropertySpec sOoliteProperties[]
Definition OOJSOolite.m:82
static JSClass sOoliteClass
Definition OOJSOolite.m:46
JSBool OOJSUnconstructableConstruct(JSContext *context, uintN argc, jsval *vp)
#define OOJS_PROP_READONLY

References OOJS_PROP_READONLY, OOJSUnconstructableConstruct(), sOoliteClass, sOoliteMethods, and sOoliteProperties.

Referenced by OOJavaScriptEngine(Private)::createMainThreadContext.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OoliteCompareVersion()

JSBool OoliteCompareVersion ( JSContext * context,
uintN argc,
jsval * vp )
static

Definition at line 296 of file OOJSOolite.m.

297{
298 OOJS_NATIVE_ENTER(context)
299
300 id components = nil;
301 NSEnumerator *componentEnum = nil;
302 id component = nil;
303
304 if (argc == 0) OOJS_RETURN_VOID; // Backwards-compatibility: be overly lenient.
305
306 components = OOJSNativeObjectFromJSValue(context, OOJS_ARGV[0]);
307 if ([components isKindOfClass:[NSArray class]])
308 {
309 // Require each element to be a number
310 for (componentEnum = [components objectEnumerator]; (component = [componentEnum nextObject]); )
311 {
312 if (![component isKindOfClass:[NSNumber class]])
313 {
314 components = nil;
315 break;
316 }
317 }
318 }
319 else if ([components isKindOfClass:[NSString class]])
320 {
321 components = ComponentsFromVersionString(components);
322 }
323 else components = nil;
324
325 if (components != nil)
326 {
327 OOJS_RETURN_INT((int32_t)CompareVersions(components, VersionComponents()));
328 }
329 else
330 {
332 }
333
335}
#define OOJS_NATIVE_ENTER(cx)
#define OOJS_NATIVE_EXIT
static NSArray * VersionComponents(void)
Definition OOJSOolite.m:283
id OOJSNativeObjectFromJSValue(JSContext *context, jsval value)
#define OOJS_ARGV
#define OOJS_RETURN_VOID
#define OOJS_RETURN_INT(v)
return nil
NSArray * ComponentsFromVersionString(NSString *string)
NSComparisonResult CompareVersions(NSArray *version1, NSArray *version2)

References CompareVersions(), ComponentsFromVersionString(), nil, OOJS_ARGV, OOJS_NATIVE_ENTER, OOJS_NATIVE_EXIT, OOJS_RETURN_INT, OOJS_RETURN_VOID, OOJSNativeObjectFromJSValue(), and VersionComponents().

Here is the call graph for this function:

◆ OoliteGetProperty()

JSBool OoliteGetProperty ( JSContext * context,
JSObject * this,
jsid propID,
jsval * value )
static

Definition at line 117 of file OOJSOolite.m.

118{
119 if (!JSID_IS_INT(propID)) return YES;
120
121 OOJS_NATIVE_ENTER(context)
122
123 id result = nil;
124 MyOpenGLView *gameView = [UNIVERSE gameView];
125
126 switch (JSID_TO_INT(propID))
127 {
128 case kOolite_version:
129 result = VersionComponents();
130 break;
131
133 result = VersionString();
134 break;
135
137 *value = INT_TO_JSVAL(JS_GetVersion(context));
138 return YES;
139
141 *value = STRING_TO_JSVAL(JS_NewStringCopyZ(context, JS_VersionToString(JS_GetVersion(context))));
142 return YES;
143
145 result = [UNIVERSE gameSettings];
146 break;
147
149 result = [ResourceManager paths];
150 break;
151
153 return JS_NewNumberValue(context, [gameView colorSaturation], value);
154
155 case kOolite_postFX:
156 *value = INT_TO_JSVAL([UNIVERSE currentPostFX]);
157 return YES;
158
160 {
161 NSString *toneMapperStr = @"OOHDR_TONEMAPPER_UNDEFINED";
162#if OOLITE_WINDOWS
163 if ([gameView hdrOutput])
164 {
165 toneMapperStr = OOStringFromHDRToneMapper([gameView hdrToneMapper]);
166 }
167#endif
168 result = toneMapperStr;
169 break;
170 }
171
173 {
174 NSString *toneMapperStr = @"OOSDR_TONEMAPPER_UNDEFINED";
175 if (![gameView hdrOutput])
176 {
177 toneMapperStr = OOStringFromSDRToneMapper([gameView sdrToneMapper]);
178 }
179 result = toneMapperStr;
180 break;
181 }
182
183#ifndef NDEBUG
185 return JS_NewNumberValue(context, [UNIVERSE timeAccelerationFactor], value);
186#endif
187
188 default:
189 OOJSReportBadPropertySelector(context, this, propID, sOoliteProperties);
190 return NO;
191 }
192
193 *value = OOJSValueFromNativeObject(context, result);
194 return YES;
195
197}
NSString * OOStringFromHDRToneMapper(OOHDRToneMapper toneMapper)
NSString * OOStringFromSDRToneMapper(OOSDRToneMapper toneMapper)
static NSString * VersionString(void)
Definition OOJSOolite.m:277
OOINLINE jsval OOJSValueFromNativeObject(JSContext *context, id object)
void OOJSReportBadPropertySelector(JSContext *context, JSObject *thisObj, jsid propID, JSPropertySpec *propertySpec)
#define UNIVERSE
Definition Universe.h:840

References kOolite_colorSaturation, kOolite_gameSettings, kOolite_hdrToneMapper, kOolite_jsVersion, kOolite_jsVersionString, kOolite_postFX, kOolite_resourcePaths, kOolite_sdrToneMapper, kOolite_timeAccelerationFactor, kOolite_version, kOolite_versionString, nil, OOJS_NATIVE_ENTER, OOJS_NATIVE_EXIT, OOJSReportBadPropertySelector(), OOJSValueFromNativeObject(), OOStringFromHDRToneMapper(), OOStringFromSDRToneMapper(), ResourceManager::paths, sOoliteProperties, UNIVERSE, VersionComponents(), and VersionString().

Here is the call graph for this function:

◆ OoliteSetProperty()

JSBool OoliteSetProperty ( JSContext * context,
JSObject * this,
jsid propID,
JSBool strict,
jsval * value )
static

Definition at line 200 of file OOJSOolite.m.

201{
202 if (!JSID_IS_INT(propID)) return YES;
203
204 OOJS_NATIVE_ENTER(context)
205
206 jsdouble fValue;
207 int32 iValue;
208 NSString *sValue = nil;
209 MyOpenGLView *gameView = [UNIVERSE gameView];
210
211 switch (JSID_TO_INT(propID))
212 {
214 if (JS_ValueToNumber(context, *value, &fValue))
215 {
216 float currentColorSaturation = [gameView colorSaturation];
217 [gameView adjustColorSaturation:fValue - currentColorSaturation];
218 return YES;
219 }
220 break;
221
222 case kOolite_postFX:
223 if (JS_ValueToInt32(context, *value, &iValue))
224 {
225 iValue = MAX(iValue, 0);
226 [UNIVERSE setCurrentPostFX:iValue];
227 return YES;
228 }
229 break;
230
232 if (!JSVAL_IS_STRING(*value)) break; // non-string is not allowed
233 sValue = OOStringFromJSValue(context,*value);
234 if (sValue != nil)
235 {
236#if OOLITE_WINDOWS
237 if ([gameView hdrOutput]) [gameView setHDRToneMapper:OOHDRToneMapperFromString(sValue)];
238 else OOJSReportWarning(context, @"hdrToneMapper cannot be set if not running in HDR mode");
239#endif
240 return YES;
241 }
242 break;
243
245 if (!JSVAL_IS_STRING(*value)) break; // non-string is not allowed
246 sValue = OOStringFromJSValue(context,*value);
247 if (sValue != nil)
248 {
249 if (![gameView hdrOutput]) [gameView setSDRToneMapper:OOSDRToneMapperFromString(sValue)];
250 else OOJSReportWarning(context, @"sdrToneMapper cannot be set if not running in SDR mode");
251 return YES;
252 }
253 break;
254
255#ifndef NDEBUG
257 if (JS_ValueToNumber(context, *value, &fValue))
258 {
259 [UNIVERSE setTimeAccelerationFactor:fValue];
260 return YES;
261 }
262 break;
263#endif
264
265 default:
266 OOJSReportBadPropertySelector(context, this, propID, sOoliteProperties);
267 return NO;
268 }
269
270 OOJSReportBadPropertyValue(context, this, propID, sOoliteProperties, *value);
271 return NO;
272
274}
void OOJSReportWarning(JSContext *context, NSString *format,...)
NSString * OOStringFromJSValue(JSContext *context, jsval value)
void OOJSReportBadPropertyValue(JSContext *context, JSObject *thisObj, jsid propID, JSPropertySpec *propertySpec, jsval value)
#define MAX(A, B)
Definition OOMaths.h:114
void adjustColorSaturation:(float colorSaturationAdjustment)
float colorSaturation()
void setSDRToneMapper:(OOSDRToneMapper newToneMapper)

References MyOpenGLView::adjustColorSaturation:, MyOpenGLView::colorSaturation, kOolite_colorSaturation, kOolite_hdrToneMapper, kOolite_postFX, kOolite_sdrToneMapper, kOolite_timeAccelerationFactor, MAX, nil, OOJS_NATIVE_ENTER, OOJS_NATIVE_EXIT, OOJSReportBadPropertySelector(), OOJSReportBadPropertyValue(), OOJSReportWarning(), OOStringFromJSValue(), MyOpenGLView::setSDRToneMapper:, and sOoliteProperties.

Here is the call graph for this function:

◆ VersionComponents()

NSArray * VersionComponents ( void )
static

Definition at line 283 of file OOJSOolite.m.

284{
286}

References ComponentsFromVersionString(), and VersionString().

Referenced by OoliteCompareVersion(), and OoliteGetProperty().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ VersionString()

NSString * VersionString ( void )
static

Definition at line 277 of file OOJSOolite.m.

278{
279 return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
280}

Referenced by OoliteGetProperty(), and VersionComponents().

Here is the caller graph for this function:

Variable Documentation

◆ sOoliteClass

JSClass sOoliteClass
static
Initial value:
=
{
"Oolite",
0,
JS_PropertyStub,
JS_PropertyStub,
JS_EnumerateStub,
JS_ResolveStub,
JS_ConvertStub,
JS_FinalizeStub
}
static JSBool OoliteGetProperty(JSContext *context, JSObject *this, jsid propID, jsval *value)
Definition OOJSOolite.m:117
static JSBool OoliteSetProperty(JSContext *context, JSObject *this, jsid propID, JSBool strict, jsval *value)
Definition OOJSOolite.m:200

Definition at line 46 of file OOJSOolite.m.

47{
48 "Oolite",
49 0,
50
51 JS_PropertyStub,
52 JS_PropertyStub,
55 //JS_StrictPropertyStub,
56 JS_EnumerateStub,
57 JS_ResolveStub,
58 JS_ConvertStub,
59 JS_FinalizeStub
60};

Referenced by InitOOJSOolite().

◆ sOoliteMethods

JSFunctionSpec sOoliteMethods[]
static
Initial value:
=
{
{ "compareVersion", OoliteCompareVersion, 1 },
{ 0 }
}
static JSBool OoliteCompareVersion(JSContext *context, uintN argc, jsval *vp)
Definition OOJSOolite.m:296

Definition at line 102 of file OOJSOolite.m.

103{
104 // JS name Function min args
105 { "compareVersion", OoliteCompareVersion, 1 },
106 { 0 }
107};

Referenced by InitOOJSOolite().

◆ sOoliteProperties

JSPropertySpec sOoliteProperties[]
static
Initial value:

Definition at line 82 of file OOJSOolite.m.

83{
84 // JS name ID flags
87 { "jsVersionString", kOolite_jsVersionString, OOJS_PROP_READONLY_CB },
89 { "versionString", kOolite_versionString, OOJS_PROP_READONLY_CB },
90 { "resourcePaths", kOolite_resourcePaths, OOJS_PROP_READONLY_CB },
91 { "colorSaturation", kOolite_colorSaturation, OOJS_PROP_READWRITE_CB },
95#ifndef NDEBUG
96 { "timeAccelerationFactor", kOolite_timeAccelerationFactor, OOJS_PROP_READWRITE_CB },
97#endif
98 { 0 }
99};

Referenced by InitOOJSOolite(), OoliteGetProperty(), and OoliteSetProperty().