37#import "MyOpenGLView.h"
43#if OOJSENGINE_MONITOR_SUPPORT
45@interface OOJavaScriptEngine (OOMonitorSupportInternal)
47- (void)sendMonitorLogMessage:(NSString *)message
48 withMessageClass:(NSString *)messageClass
49 inContext:(JSContext *)context;
59static JSBool
GlobalGetProperty(JSContext *context, JSObject *
this, jsid propID, jsval *value);
61static JSBool
GlobalSetProperty(JSContext *context, JSObject *
this, jsid propID, JSBool strict, jsval *value);
64static JSBool
GlobalLog(JSContext *context, uintN argc, jsval *vp);
76static JSBool
GlobalPauseGame(JSContext *context, uintN argc, jsval *vp);
77static JSBool
GlobalQuitGame(JSContext *context, uintN argc, jsval *vp);
100 JS_StrictPropertyStub,
164 assert(outGlobal != NULL);
166 *outGlobal = JS_NewCompartmentAndGlobalObject(context, &
sGlobalClass, NULL);
168 JS_SetGlobalObject(context, *outGlobal);
169 JS_DefineProperty(context, *outGlobal,
"global", OBJECT_TO_JSVAL(*outGlobal), NULL, NULL,
OOJS_PROP_READONLY);
182 if (!JSID_IS_INT(propID))
return YES;
188 switch (JSID_TO_INT(propID))
191 *value = INT_TO_JSVAL([player currentGalaxyID]);
200 return JS_NewNumberValue(context, [
UNIVERSE timeAccelerationFactor], value);
213static JSBool
GlobalSetProperty(JSContext *context, JSObject *
this, jsid propID, JSBool strict, jsval *value)
215 if (!JSID_IS_INT(propID))
return YES;
221 switch (JSID_TO_INT(propID))
224 if (JS_ValueToNumber(context, *value, &fValue))
226 [UNIVERSE setTimeAccelerationFactor:fValue];
246static JSBool
GlobalLog(JSContext *context, uintN argc, jsval *vp)
250 NSString *message =
nil;
251 NSString *messageClass =
nil;
271 message = [NSString concatenationOfStringsFromJavaScriptValues:OOJS_ARGV + 1 count:argc - 1 separator:@", " inContext:context];
275 OOLog(messageClass,
@"%@", message);
277#if OOJSENGINE_MONITOR_SUPPORT
295 NSString *
string =
nil;
296 NSDictionary *overrides =
nil;
322 NSString *
string =
nil;
347 NSString *
string =
nil;
348 NSDictionary *overrides =
nil;
361 string = [[UNIVERSE missiontext] oo_stringForKey:string];
375 NSString *
string =
nil;
416 NSString *
string =
nil;
418 JSBool isPlural = YES;
420 if (argc > 0 && !JS_ValueToBoolean(context,
OOJS_ARGV[0], &isPlural))
427 string = [UNIVERSE getSystemInhabitants:Ranrot()%OO_SYSTEMS_PER_GALAXY plural:isPlural];
474 jsval callback = JSVAL_NULL;
475 JSObject *callbackThis = NULL;
476 jsval value = JSVAL_NULL;
479 NSDictionary *keydefs = NULL;
480 JSObject *params = NULL;
491 if (argc < 2 || !JS_ValueToObject(context,
OOJS_ARGV[1], ¶ms))
497 if (JS_GetProperty(context, params,
"guiScreen", &value) == JS_FALSE || JSVAL_IS_VOID(value))
505 if (gui == 0 || gui == GUI_SCREEN_LOAD || gui == GUI_SCREEN_SAVE || gui == GUI_SCREEN_STICKMAPPER || gui == GUI_SCREEN_OXZMANAGER ||
506 gui == GUI_SCREEN_NEWGAME || gui == GUI_SCREEN_SAVE_OVERWRITE || gui == GUI_SCREEN_KEYBOARD || gui == GUI_SCREEN_STICKPROFILE || gui == GUI_SCREEN_KEYBOARD_CONFIRMCLEAR ||
507 gui == GUI_SCREEN_KEYBOARD_CONFIG || gui == GUI_SCREEN_KEYBOARD_ENTRY || gui == GUI_SCREEN_KEYBOARD_LAYOUT)
509 OOJSReportBadArguments(context,
@"global",
@"setExtraGuiScreenKeys", 2, &
OOJS_ARGV[1],
nil,
@"key, definition: 'guiScreen' property must be a permitted and valid GUI_SCREEN idenfifier.");
513 if (JS_GetProperty(context, params,
"registerKeys", &value) == JS_FALSE || JSVAL_IS_VOID(value))
518 if (!JSVAL_IS_NULL(value))
520 if (JSVAL_IS_OBJECT(value))
531 if (JS_GetProperty(context, params,
"callback", &callback) == JS_FALSE || JSVAL_IS_VOID(callback))
538 OOJSReportBadArguments(context,
@"global",
@"setExtraGuiScreenKeys", 2, &
OOJS_ARGV[1], NULL,
@"key, definition; 'callback' property must be a function.");
548 if (JS_GetProperty(context, params,
"cbThis", &value) == JS_TRUE && !JSVAL_IS_VOID(value))
550 JS_ValueToObject(context, value, &callbackThis);
556 [definition release];
570 jsval value = (argc > 0) ?
OOJS_ARGV[0] : JSVAL_NULL;
574 OOJSReportWarning(context,
@"Usage error: %@() called with no arguments. Treating as %@(null). This call may fail in a future version of Oolite.",
@"setScreenBackground",
@"setScreenBackground");
582 if ([
UNIVERSE viewDirection] == VIEW_GUI_DISPLAY)
590 if (result && [
PLAYER guiScreen] == GUI_SCREEN_EQUIP_SHIP) [PLAYER setEquipScreenBackgroundDescriptor:descriptor];
614 NSDictionary *descriptor = [UNIVERSE screenTextureDescriptorForKey:key];
645 [UNIVERSE setScreenTextureDescriptorForKey:key descriptor:descriptor];
660 jsval value = (argc > 0) ?
OOJS_ARGV[0] : JSVAL_NULL;
664 OOJSReportWarning(context,
@"Usage error: %@() called with no arguments. Treating as %@(null). This call may fail in a future version of Oolite.",
@"setScreenOverlay",
@"setScreenOverlay");
672 if ([
UNIVERSE viewDirection] == VIEW_GUI_DISPLAY)
701 if ([key rangeOfString:
@"color"].location == NSNotFound)
737 if ([key rangeOfString:
@"color"].location == NSNotFound)
743 if (!JSVAL_IS_NULL(value))
769 NSString *value =
nil;
770 NSMutableCharacterSet *allowedChars = (NSMutableCharacterSet *)[NSMutableCharacterSet alphanumericCharacterSet];
773 [allowedChars addCharactersInString:@"_-"];
778 if (
EXPECT_NOT(value ==
nil || [value rangeOfCharacterFromSet:[allowedChars invertedSet]].location != NSNotFound))
785 NSString *playerFileDirectory = [[NSFileManager defaultManager] defaultCommanderPath];
786 NSDictionary *attr = [[NSFileManager defaultManager] oo_fileSystemAttributesAtPath:playerFileDirectory];
790 double freeSpace = [attr oo_doubleForKey:NSFileSystemFreeSize];
791 if (freeSpace < 1073741824)
793 OOJSReportWarning(context,
@"takeSnapShot: function disabled when free disk space is less than 1GB.");
800 result = [[UNIVERSE gameView] snapShot:value];
814 NSString *
string =
nil;
824 NSString *autoAI = [autoAIMap oo_stringForKey:string];
843 if (guiScreen != GUI_SCREEN_LONG_RANGE_CHART &&
844 guiScreen != GUI_SCREEN_MISSION &&
845 guiScreen != GUI_SCREEN_REPORT &&
846 guiScreen != GUI_SCREEN_KEYBOARD_ENTRY &&
847 guiScreen != GUI_SCREEN_SAVE)
849 [UNIVERSE pauseGame];
864 OOLog(
@"script.debug.quit",
@"%@",
@"Quit requested via JavaScript global.quitGame()");
OOINLINE OOGUIScreenID OOGUIScreenIDFromJSValue(JSContext *context, jsval value)
OOINLINE jsval OOJSValueFromGUIScreenID(JSContext *context, OOGUIScreenID value)
NSString * CommodityDisplayNameForSymbolicName(NSString *symbolicName)
#define OOJS_END_FULL_NATIVE
#define OOJS_BEGIN_FULL_NATIVE(context)
#define OOJS_NATIVE_ENTER(cx)
void CreateOOJSGlobal(JSContext *context, JSObject **outGlobal)
void SetUpOOJSGlobal(JSContext *context, JSObject *global)
static JSBool GlobalSetScreenBackground(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalExpandDescription(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalPauseGame(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalSetScreenOverlay(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalGetScreenBackgroundForKey(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalLog(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalGetGuiColorSettingForKey(JSContext *context, uintN argc, jsval *vp)
@ kGlobal_timeAccelerationFactor
static JSBool GlobalGetProperty(JSContext *context, JSObject *this, jsid propID, jsval *value)
static JSFunctionSpec sGlobalMethods[]
static JSPropertySpec sGlobalProperties[]
static JSBool GlobalExpandMissionText(JSContext *context, uintN argc, jsval *vp)
static JSClass sGlobalClass
static JSBool GlobalSetScreenBackgroundForKey(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalKeyBindingDescription(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalSetExtraGuiScreenKeys(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalDisplayNameForCommodity(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalSetProperty(JSContext *context, JSObject *this, jsid propID, JSBool strict, jsval *value)
static JSBool GlobalRandomInhabitantsDescription(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalTakeSnapShot(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalClearExtraGuiScreenKeys(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalQuitGame(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalSetGuiColorSettingForKey(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalAutoAIForRole(JSContext *context, uintN argc, jsval *vp)
static JSBool GlobalRandomName(JSContext *context, uintN argc, jsval *vp)
PlayerEntity * OOPlayerForScripting(void)
void OOJSReportWarning(JSContext *context, NSString *format,...)
#define OOJS_PROP_READWRITE_CB
id OOJSNativeObjectFromJSObject(JSContext *context, JSObject *object)
#define OOJS_RETURN_OBJECT(o)
void OOJSReportBadPropertySelector(JSContext *context, JSObject *thisObj, jsid propID, JSPropertySpec *propertySpec)
#define OOJS_RETURN_BOOL(v)
NSString * OOStringFromJSValue(JSContext *context, jsval value)
#define OOJS_PROP_READONLY
OOINLINE BOOL OOJSValueIsFunction(JSContext *context, jsval value)
NSString * OOStringFromJSValueEvenIfNull(JSContext *context, jsval value)
void OOJSReportBadPropertyValue(JSContext *context, JSObject *thisObj, jsid propID, JSPropertySpec *propertySpec, jsval value)
void OOJSReportBadArguments(JSContext *context, NSString *scriptClass, NSString *function, uintN argc, jsval *argv, NSString *message, NSString *expectedArgsDescription)
#define OOJS_PROP_READONLY_CB
NSDictionary * OOJSDictionaryFromStringTable(JSContext *context, jsval value)
BOOL OOLogWillDisplayMessagesInClass(NSString *inMessageClass)
#define OOLog(class, format,...)
@ kOOExpandForJavaScript
Report warnings through JavaScript runtime system instead of normal logging.
@ kOOExpandBackslashN
Convert literal "\\n"s to line breaks (used for missiontext.plist for historical reasons).
@ kOOExpandGoodRNG
Use RANDROT for selecting from description arrays and for N expansion.
NSString * OOExpandDescriptionString(Random_Seed seed, NSString *string, NSDictionary *overrides, NSDictionary *legacyLocals, NSString *systemName, OOExpandOptions options)
#define OOExpand(string,...)
static NSString *const kOOLogDebugMessage
OOColor * colorFromSetting:defaultValue:(NSString *setting,[defaultValue] OOColor *def)
BOOL setForegroundTextureDescriptor:(NSDictionary *descriptor)
void setGuiColorSettingFromKey:color:(NSString *key,[color] OOColor *col)
NSDictionary * textureDescriptorFromJSValue:inContext:callerDescription:(jsval value,[inContext] JSContext *context,[callerDescription] NSString *callerDescription)
BOOL setBackgroundTextureDescriptor:(NSDictionary *descriptor)
OOColor * colorWithDescription:(id description)
void setRegisterKeys:(NSDictionary *registerKeys)
void setCallbackThis:(JSObject *callbackthis)
void setCallback:(jsval callback)
void setName:(NSString *name)
OOJavaScriptEngine * sharedEngine()
BOOL setExtraGuiScreenKeys:definition:(OOGUIScreenID gui,[definition] OOJSGuiScreenKeyDefinition *definition)
NSString * keyBindingDescription2:(NSString *binding)
void clearExtraGuiScreenKeys:key:(OOGUIScreenID gui,[key] NSString *key)
OOGUIScreenID guiScreen()
NSDictionary * dictionaryFromFilesNamed:inFolder:andMerge:(NSString *fileName,[inFolder] NSString *folderName,[andMerge] BOOL mergeFiles)
const Random_Seed kNilRandomSeed
void make_pseudo_random_seed(Random_Seed *seed_ptr)
void setRandomSeed(RNG_Seed a_seed)
RNG_Seed currentRandomSeed(void)