More work on JavaScript error checking. More rigourous! More informative! More not buggy! And, conversely, probably also more buggy. I've almost certainly broken something silly. Also moved JS nova-related functionality into Sun.
git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@1648 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
parent
c21fc50127
commit
b148cfd85d
@ -1020,7 +1020,7 @@
|
||||
083325DC09DDBCDE00F5B8E4 /* OOColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOColor.m; sourceTree = "<group>"; };
|
||||
083DB4D30A70E51E00B419B2 /* OOBrain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OOBrain.h; sourceTree = "<group>"; };
|
||||
083DB4D40A70E51E00B419B2 /* OOBrain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OOBrain.m; sourceTree = "<group>"; };
|
||||
0865432206B8447D000CA0AB /* OoliteDev.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OoliteDev.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
0865432206B8447D000CA0AB /* Oolite.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Oolite.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
0878FD2F086EF845004CB752 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||
1A020E0A0D020AFB00C3F51E /* changedScriptHandlers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = changedScriptHandlers.plist; sourceTree = "<group>"; };
|
||||
@ -1688,7 +1688,7 @@
|
||||
19C28FACFE9D520D11CA2CBB /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0865432206B8447D000CA0AB /* OoliteDev.app */,
|
||||
0865432206B8447D000CA0AB /* Oolite.app */,
|
||||
1A71E6F30BCE340C00CD5C13 /* libpng.a */,
|
||||
);
|
||||
name = Products;
|
||||
@ -2912,7 +2912,7 @@
|
||||
name = Oolite;
|
||||
productInstallPath = "$(HOME)/Applications";
|
||||
productName = Oolite;
|
||||
productReference = 0865432206B8447D000CA0AB /* OoliteDev.app */;
|
||||
productReference = 0865432206B8447D000CA0AB /* Oolite.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
1A71E6F20BCE340C00CD5C13 /* libpng-custom */ = {
|
||||
|
@ -147,3 +147,10 @@ system.legacy_spawn = function()
|
||||
{
|
||||
special.jsWarning("system.legacy_spawn() is deprecated (and never worked), use Ship.spawn() instead.");
|
||||
}
|
||||
|
||||
|
||||
system.setSunNova = function(delay)
|
||||
{
|
||||
special.jsWarning("system.setSunNova() is deprecated, use system.sun.goNova() instead.");
|
||||
if (this.sun) this.sun.goNova(delay);
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ this.choiceEvaluation = function()
|
||||
missionVariables.nova = "NOVA_ESCAPE_HERO";
|
||||
player.launch();
|
||||
this.blowUpAllStations();
|
||||
system.setSunNova(30);
|
||||
system.sun.goNova(30);
|
||||
missionVariables.novacount = null;
|
||||
}
|
||||
else
|
||||
@ -93,7 +93,7 @@ this.choiceEvaluation = function()
|
||||
// mission.choice = "NO", or null when player launched without a choice.
|
||||
missionVariables.nova = "NOVA_ESCAPE_COWARD";
|
||||
player.commsMessage(expandDescription("[oolite-nova-coward]"), 4.5);
|
||||
system.setSunNova(3);
|
||||
system.sun.goNova(3);
|
||||
missionVariables.novacount = null;
|
||||
}
|
||||
|
||||
@ -185,7 +185,7 @@ this.shipWillExitWitchspace = function () // call this as soon as possible so o
|
||||
{
|
||||
missionVariables.nova = "TWO_HRS_TO_ZERO";
|
||||
player.fuelLeakRate = 25;
|
||||
system.setSunNova(7200);
|
||||
system.sun.goNova(7200);
|
||||
player.consoleMessage(expandDescription("[danger-fuel-leak]"), 4.5);
|
||||
player.call("setPlanetinfo:", "market = none");
|
||||
player.call("setPlanetinfo:", "sun_gone_nova = YES");
|
||||
|
@ -40,15 +40,15 @@ _JS_InitClass
|
||||
_JS_NewObject
|
||||
_JS_PropertyStub
|
||||
_JS_ResolveStub
|
||||
_OOReportJavaScriptBadPropertySelector
|
||||
_OOReportJavaScriptError
|
||||
_OOReportJSBadPropertySelector
|
||||
_OOReportJSError
|
||||
_JS_InternString
|
||||
_JS_AddNamedRoot
|
||||
_JS_RemoveRoot
|
||||
_JSValueToObject
|
||||
_JS_ValueToNumber
|
||||
_JS_SetProperty
|
||||
_OOReportJavaScriptWarning
|
||||
_OOReportJSWarning
|
||||
_OOBooleanFromObject
|
||||
_ScanClassToString
|
||||
_EntityStatusToString
|
||||
|
@ -195,7 +195,7 @@ static JSBool ConsoleGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Console", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Console", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -219,7 +219,7 @@ static JSBool ConsoleSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Console", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Console", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -246,7 +246,7 @@ static JSBool ConsoleSettingsDeleteProperty(JSContext *context, JSObject *this,
|
||||
monitor = JSObjectToObject(context, this);
|
||||
if (![monitor isKindOfClass:[OODebugMonitor class]])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
OOReportJSError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -268,8 +268,8 @@ static JSBool ConsoleSettingsGetProperty(JSContext *context, JSObject *this, jsv
|
||||
monitor = JSObjectToObject(context, this);
|
||||
if (![monitor isKindOfClass:[OODebugMonitor class]])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
return YES;
|
||||
OOReportJSError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
return NO;
|
||||
}
|
||||
|
||||
value = [monitor configurationValueForKey:key];
|
||||
@ -291,8 +291,8 @@ static JSBool ConsoleSettingsSetProperty(JSContext *context, JSObject *this, jsv
|
||||
monitor = JSObjectToObject(context, this);
|
||||
if (![monitor isKindOfClass:[OODebugMonitor class]])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
return YES;
|
||||
OOReportJSError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (JSVAL_IS_NULL(*inValue) || JSVAL_IS_VOID(*inValue))
|
||||
@ -308,7 +308,7 @@ static JSBool ConsoleSettingsSetProperty(JSContext *context, JSObject *this, jsv
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"debugConsole.settings: could not convert %@ to native object.", [NSString stringWithJavaScriptValue:*inValue inContext:context]);
|
||||
OOReportJSWarning(context, @"debugConsole.settings: could not convert %@ to native object.", [NSString stringWithJavaScriptValue:*inValue inContext:context]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -328,7 +328,7 @@ static JSBool ConsoleConsoleMessage(JSContext *context, JSObject *this, uintN ar
|
||||
monitor = JSObjectToObject(context, this);
|
||||
if (![monitor isKindOfClass:[OODebugMonitor class]])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
OOReportJSError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -349,7 +349,7 @@ static JSBool ConsoleConsoleMessage(JSContext *context, JSObject *this, uintN ar
|
||||
{
|
||||
if (colorKey == nil)
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Console.consoleMessage() called with no parameters.");
|
||||
OOReportJSWarning(context, @"Console.consoleMessage() called with no parameters.");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -376,8 +376,8 @@ static JSBool ConsoleClearConsole(JSContext *context, JSObject *this, uintN argc
|
||||
monitor = JSObjectToObject(context, this);
|
||||
if (![monitor isKindOfClass:[OODebugMonitor class]])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
return YES;
|
||||
OOReportJSError(context, @"Expected OODebugMonitor, got %@ in %s. This is an internal error, please report it.", [monitor class], __PRETTY_FUNCTION__);
|
||||
return NO;
|
||||
}
|
||||
|
||||
[monitor clearJSConsole];
|
||||
@ -418,8 +418,8 @@ static JSBool ConsoleCallObjCMethod(JSContext *context, JSObject *this, uintN ar
|
||||
object = JSObjectToObject(context, this);
|
||||
if (object == nil)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Attempt to call __callObjCMethod() for non-Objective-C object %@.", JSValToNSString(context, OBJECT_TO_JSVAL(this)));
|
||||
return YES;
|
||||
OOReportJSError(context, @"Attempt to call __callObjCMethod() for non-Objective-C object %@.", JSValToNSString(context, OBJECT_TO_JSVAL(this)));
|
||||
return NO;
|
||||
}
|
||||
|
||||
return OOJSCallObjCObjectMethod(context, object, [object jsClassName], argc, argv, outResult);
|
||||
|
@ -2110,15 +2110,19 @@ double longitudeFromVector(Vector v)
|
||||
|
||||
- (BOOL) goneNova
|
||||
{
|
||||
return throw_sparks&&(velocity.x <= 0);
|
||||
return throw_sparks && velocity.x <= 0;
|
||||
}
|
||||
|
||||
|
||||
- (void) setGoingNova:(BOOL) yesno inTime:(double)interval
|
||||
{
|
||||
throw_sparks = yesno;
|
||||
if ((throw_sparks)&&(interval >= 0.0))
|
||||
velocity.x = interval;
|
||||
if (throw_sparks)
|
||||
{
|
||||
OOLog(@"script.debug.setSunNovaIn", @"NOVA activated! time until Nova : %.1f s", interval);
|
||||
velocity.x = fmax(interval, 0.0);
|
||||
}
|
||||
|
||||
velocity.y = 0;
|
||||
velocity.z = 10000;
|
||||
}
|
||||
|
@ -98,7 +98,6 @@ static NSString * const kOOLogDebugProcessSceneStringAddModel = @"script.debug.p
|
||||
static NSString * const kOOLogDebugProcessSceneStringAddLocalPlanet = @"script.debug.processSceneString.addLocalPlanet";
|
||||
static NSString * const kOOLogDebugProcessSceneStringAddTargetPlanet = @"script.debug.processSceneString.addTargetPlanet";
|
||||
static NSString * const kOOLogDebugProcessSceneStringAddBillboard = @"script.debug.processSceneString.addBillboard";
|
||||
static NSString * const kOOLogDebugSetSunNovaIn = @"script.debug.setSunNovaIn";
|
||||
|
||||
static NSString * const kOOLogTraceScriptAction = @"script.debug.trace.scriptAction";
|
||||
static NSString * const kOOLogTraceTestCondition = @"script.debug.trace.testCondition";
|
||||
@ -2128,7 +2127,6 @@ static int scriptRandomSeed = -1; // ensure proper random function
|
||||
{
|
||||
double time_until_nova = [time_value doubleValue];
|
||||
[[UNIVERSE sun] setGoingNova:YES inTime: time_until_nova];
|
||||
OOLog(kOOLogDebugSetSunNovaIn, @"NOVA activated! time until Nova : %.1f s", time_until_nova);
|
||||
}
|
||||
|
||||
|
||||
|
@ -859,12 +859,10 @@ static NSString * const kOOLogEntityBehaviourChanged = @"entity.behaviour.change
|
||||
ex_pos.z += dd * 6.0 * (randf() - 0.5);
|
||||
|
||||
[escorter setPosition:ex_pos];
|
||||
|
||||
[escorter setStatus:STATUS_IN_FLIGHT];
|
||||
|
||||
[escorter setPrimaryRole:defaultRole]; //for mothership
|
||||
|
||||
[escorter setScanClass:scanClass]; // you are the same as I
|
||||
if ([self bounty] == 0) [escorter setBounty:0]; // Avoid dirty escorts for clean mothers
|
||||
|
||||
[UNIVERSE addEntity:escorter];
|
||||
|
||||
|
@ -64,7 +64,7 @@ static NSString * const kCacheKeyCaches = @"_caches";
|
||||
enum
|
||||
{
|
||||
kEndianTagValue = 0x12345678UL,
|
||||
kFormatVersionValue = 17
|
||||
kFormatVersionValue = 18
|
||||
};
|
||||
|
||||
|
||||
|
@ -78,11 +78,11 @@ BOOL OOJSCallObjCObjectMethod(JSContext *context, id object, NSString *jsClassNa
|
||||
|
||||
if (type == kMethodTypeInvalid)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"%@.call(): method %@ cannot be called from JavaScript.", jsClassName, selectorString);
|
||||
OOReportJSError(context, @"%@.call(): method %@ cannot be called from JavaScript.", jsClassName, selectorString);
|
||||
}
|
||||
else if (MethodExpectsParameter(type) && !haveParameter)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"%@.call(): method %@ requires a parameter.", jsClassName, selectorString);
|
||||
OOReportJSError(context, @"%@.call(): method %@ requires a parameter.", jsClassName, selectorString);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -116,7 +116,7 @@ BOOL OOJSCallObjCObjectMethod(JSContext *context, id object, NSString *jsClassNa
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptError(context, @"%@.call(): %@ does not respond to method %@.", jsClassName, object, selectorString);
|
||||
OOReportJSError(context, @"%@.call(): %@ does not respond to method %@.", jsClassName, object, selectorString);
|
||||
}
|
||||
|
||||
return success;
|
||||
|
@ -112,6 +112,7 @@ void InitOOJSClock(JSContext *context, JSObject *global)
|
||||
|
||||
static JSBool ClockGetProperty(JSContext *context, JSObject *this, jsval name, jsval *outValue)
|
||||
{
|
||||
BOOL OK = NO;
|
||||
PlayerEntity *player = nil;
|
||||
double clockTime;
|
||||
|
||||
@ -122,55 +123,63 @@ static JSBool ClockGetProperty(JSContext *context, JSObject *this, jsval name, j
|
||||
switch (JSVAL_TO_INT(name))
|
||||
{
|
||||
case kClock_absoluteSeconds:
|
||||
JS_NewDoubleValue(context, [UNIVERSE getTime], outValue);
|
||||
OK = JS_NewDoubleValue(context, [UNIVERSE getTime], outValue);
|
||||
break;
|
||||
|
||||
case kClock_seconds:
|
||||
JS_NewDoubleValue(context, clockTime, outValue);
|
||||
OK = JS_NewDoubleValue(context, clockTime, outValue);
|
||||
break;
|
||||
|
||||
case kClock_minutes:
|
||||
JS_NewDoubleValue(context, floor(clockTime / 60.0), outValue);
|
||||
OK = JS_NewDoubleValue(context, floor(clockTime / 60.0), outValue);
|
||||
break;
|
||||
|
||||
case kClock_hours:
|
||||
JS_NewDoubleValue(context, floor(clockTime / 3600.0), outValue);
|
||||
OK = JS_NewDoubleValue(context, floor(clockTime / 3600.0), outValue);
|
||||
break;
|
||||
|
||||
case kClock_secondsComponent:
|
||||
*outValue = INT_TO_JSVAL(fmod(clockTime, 60.0));
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
case kClock_minutesComponent:
|
||||
*outValue = INT_TO_JSVAL(fmod(floor(clockTime / 60.0), 60.0));
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
case kClock_hoursComponent:
|
||||
*outValue = INT_TO_JSVAL(fmod(floor(clockTime / 3600.0), 24.0));
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
case kClock_days:
|
||||
case kClock_daysComponent:
|
||||
*outValue = INT_TO_JSVAL(floor(clockTime / 86400.0));
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
case kClock_clockString:
|
||||
*outValue = [[player dial_clock] javaScriptValueInContext:context];
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
case kClock_isAdjusting:
|
||||
*outValue = BOOLToJSVal([player clockAdjusting]);
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Clock", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
OOReportJSBadPropertySelector(context, @"Clock", JSVAL_TO_INT(name));
|
||||
}
|
||||
|
||||
return YES;
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
// *** Methods ***
|
||||
|
||||
// toString() : String
|
||||
static JSBool JSClockToString(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
*outResult = [[OOPlayerForScripting() dial_clock] javaScriptValueInContext:context];
|
||||
@ -178,13 +187,13 @@ static JSBool JSClockToString(JSContext *context, JSObject *this, uintN argc, js
|
||||
}
|
||||
|
||||
|
||||
// clockStringForTime(time : Number) : String
|
||||
static JSBool ClockClockStringForTime(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
double time;
|
||||
|
||||
if (JS_ValueToNumber(context, argv[0], &time))
|
||||
{
|
||||
if (EXPECT_NOT(!JS_ValueToNumber(context, argv[0], &time))) return NO;
|
||||
|
||||
*outResult = [ClockToString(time, NO) javaScriptValueInContext:context];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ BOOL EntityFromArgumentList(JSContext *context, NSString *scriptClass, NSString
|
||||
// Failed; report bad parameters, if given a class and function.
|
||||
if (scriptClass != nil && function != nil)
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"%@.%@(): expected entity or universal ID, got %@.", scriptClass, function, [NSString stringWithJavaScriptParameters:argv count:1 inContext:context]);
|
||||
OOReportJSWarning(context, @"%@.%@(): expected entity or universal ID, got %@.", scriptClass, function, [NSString stringWithJavaScriptParameters:argv count:1 inContext:context]);
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
@ -310,7 +310,7 @@ static JSBool EntityGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Entity", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Entity", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -338,7 +338,7 @@ static JSBool EntitySetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Entity", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Entity", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
@ -135,7 +135,7 @@ static JSBool GlobalGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Global", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Global", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -144,6 +144,9 @@ static JSBool GlobalGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
}
|
||||
|
||||
|
||||
// *** Methods ***
|
||||
|
||||
// log([messageClass : String,] message : string, ...)
|
||||
static JSBool GlobalLog(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
NSString *message = nil;
|
||||
@ -214,14 +217,11 @@ static JSBool GlobalRandomInhabitantsDescription(JSContext *context, JSObject *t
|
||||
{
|
||||
NSString *string = nil;
|
||||
Random_Seed aSeed;
|
||||
JSBool isPlural;
|
||||
JSBool isPlural = YES;
|
||||
|
||||
if (!JS_ValueToBoolean(context, argv[0], &isPlural))
|
||||
{
|
||||
isPlural = NO;
|
||||
}
|
||||
if (!JS_ValueToBoolean(context, argv[0], &isPlural)) isPlural = NO;
|
||||
|
||||
make_pseudo_random_seed( &aSeed);
|
||||
make_pseudo_random_seed(&aSeed);
|
||||
string = [UNIVERSE generateSystemInhabitants:aSeed plural:isPlural];
|
||||
*outResult = [string javaScriptValueInContext:context];
|
||||
|
||||
|
@ -119,7 +119,7 @@ static JSBool MissionGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Mission", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Mission", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -144,7 +144,7 @@ static JSBool MissionSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Mission", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Mission", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -152,6 +152,9 @@ static JSBool MissionSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
}
|
||||
|
||||
|
||||
// *** Methods ***
|
||||
|
||||
// showMissionScreen()
|
||||
static JSBool MissionShowMissionScreen(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -162,6 +165,7 @@ static JSBool MissionShowMissionScreen(JSContext *context, JSObject *obj, uintN
|
||||
}
|
||||
|
||||
|
||||
// showShipModel(modelName : String)
|
||||
static JSBool MissionShowShipModel(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -173,6 +177,7 @@ static JSBool MissionShowShipModel(JSContext *context, JSObject *obj, uintN argc
|
||||
}
|
||||
|
||||
|
||||
// markSystem(systemCoords : String)
|
||||
static JSBool MissionMarkSystem(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -185,6 +190,7 @@ static JSBool MissionMarkSystem(JSContext *context, JSObject *obj, uintN argc, j
|
||||
}
|
||||
|
||||
|
||||
// unmarkSystem(systemCoords : String)
|
||||
static JSBool MissionUnmarkSystem(JSContext *context, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -197,6 +203,7 @@ static JSBool MissionUnmarkSystem(JSContext *context, JSObject *obj, uintN argc,
|
||||
}
|
||||
|
||||
|
||||
// addMessageTextKey(textKey : String)
|
||||
static JSBool MissionAddMessageTextKey(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -209,6 +216,7 @@ static JSBool MissionAddMessageTextKey(JSContext *context, JSObject *this, uintN
|
||||
}
|
||||
|
||||
|
||||
// addMessageText(text : String)
|
||||
static JSBool MissionAddMessageText(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -221,6 +229,7 @@ static JSBool MissionAddMessageText(JSContext *context, JSObject *this, uintN ar
|
||||
}
|
||||
|
||||
|
||||
// setBackgroundImage(imageName : String)
|
||||
static JSBool MissionSetBackgroundImage(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -233,6 +242,7 @@ static JSBool MissionSetBackgroundImage(JSContext *context, JSObject *this, uint
|
||||
}
|
||||
|
||||
|
||||
// setMusic(musicName : String)
|
||||
static JSBool MissionSetMusic(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -245,6 +255,7 @@ static JSBool MissionSetMusic(JSContext *context, JSObject *this, uintN argc, js
|
||||
}
|
||||
|
||||
|
||||
// setChoicesKey(choicesKey : String)
|
||||
static JSBool MissionSetChoicesKey(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -288,6 +299,7 @@ static JSBool MissionSetInstructionsKey(JSContext *context, JSObject *this, uint
|
||||
}
|
||||
|
||||
|
||||
// clearMissionScreen()
|
||||
static JSBool MissionClearMissionScreen(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
|
@ -100,8 +100,8 @@ static JSBool MissionVariablesGetProperty(JSContext *context, JSObject *this, js
|
||||
}
|
||||
if (isNumber)
|
||||
{
|
||||
JSBool ok = JS_NewDoubleValue(context, [value doubleValue], outValue);
|
||||
if (!ok) *outValue = JSVAL_VOID;
|
||||
BOOL OK = JS_NewDoubleValue(context, [value doubleValue], outValue);
|
||||
if (!OK) *outValue = JSVAL_VOID;
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,7 +120,7 @@ static JSBool MissionVariablesGetProperty(JSContext *context, JSObject *this, js
|
||||
*outValue = JSVAL_NULL;
|
||||
}
|
||||
}
|
||||
return JS_TRUE;
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
@ -135,5 +135,5 @@ static JSBool MissionVariablesSetProperty(JSContext *context, JSObject *this, js
|
||||
|
||||
[player setMissionVariable:objValue forKey:key];
|
||||
}
|
||||
return JS_TRUE;
|
||||
return YES;
|
||||
}
|
||||
|
@ -119,7 +119,7 @@ static JSBool OoliteGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Oolite", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Oolite", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -144,7 +144,7 @@ static NSArray *VersionComponents(void)
|
||||
returns -1 if the current version of Oolite is less than versionSpec, 0 if
|
||||
they are equal, and 1 if the current version is newer. versionSpec may be
|
||||
a string or an array. Example:
|
||||
if (0 < oolite.compareVersion("1.70")) Log("Old version of Oolite!")
|
||||
if (0 < oolite.compareVersion("1.70")) log("Old version of Oolite!")
|
||||
else this.doStuffThatRequires170()
|
||||
*/
|
||||
static JSBool OoliteCompareVersion(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
|
@ -169,7 +169,7 @@ static JSBool PlanetGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Planet", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Planet", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
@ -187,7 +187,7 @@ static JSBool PlanetSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
{
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Planet", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Planet", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -206,19 +206,19 @@ static JSBool PlanetSetTexture(JSContext *context, JSObject *this, uintN argc, j
|
||||
name = [NSString stringWithJavaScriptValue:*argv inContext:context];
|
||||
if([player status] != STATUS_LAUNCHING && [player status] != STATUS_EXITING_WITCHSPACE)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Planet.%@ must be called only during shipWillLaunchFromStation or shipWillExitWitchspace.", @"setTexture");
|
||||
OOReportJSError(context, @"Planet.%@ must be called only during shipWillLaunchFromStation or shipWillExitWitchspace.", @"setTexture");
|
||||
return YES;
|
||||
}
|
||||
if (name != nil)
|
||||
{
|
||||
if (![thisEnt setUpPlanetFromTexture:name])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Planet.%@(\"%@\"): cannot set texture for planet.", @"setTexture", name);
|
||||
OOReportJSError(context, @"Planet.%@(\"%@\"): cannot set texture for planet.", @"setTexture", name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Planet.%@(): no texture name specified.", @"setTexture");
|
||||
OOReportJSError(context, @"Planet.%@(): no texture name specified.", @"setTexture");
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
@ -285,7 +285,7 @@ static JSBool PlayerGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Player", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Player", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -327,7 +327,7 @@ static JSBool PlayerSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Player", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Player", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -367,7 +367,7 @@ static JSBool PlayerSetEquipmentStatus(JSContext *context, JSObject *this, uintN
|
||||
|
||||
if ([UNIVERSE strict])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Cannot set equipment status while in strict mode.");
|
||||
OOReportJSError(context, @"Cannot set equipment status while in strict mode.");
|
||||
*outResult = BOOLToJSVal(NO);
|
||||
return YES;
|
||||
}
|
||||
@ -388,7 +388,7 @@ static JSBool PlayerSetEquipmentStatus(JSContext *context, JSObject *this, uintN
|
||||
statusSet = [OOPlayerForScripting() hasEquipmentItem:name] || [OOPlayerForScripting() hasEquipmentItem:damagedName];
|
||||
}
|
||||
else
|
||||
OOReportJavaScriptError(context, @"Second parameter for setEquipmentStatus must be either \"EQUIPMENT_OK\" or \"EQUIPMENT_DAMAGED\".");
|
||||
OOReportJSError(context, @"Second parameter for setEquipmentStatus must be either \"EQUIPMENT_OK\" or \"EQUIPMENT_DAMAGED\".");
|
||||
|
||||
*outResult = BOOLToJSVal(statusSet);
|
||||
|
||||
@ -429,26 +429,26 @@ static JSBool PlayerAwardCargo(JSContext *context, JSObject *this, uintN argc, j
|
||||
type = [UNIVERSE commodityForName:typeString];
|
||||
if (type == NSNotFound)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Unknown cargo type \"%@\".", typeString);
|
||||
OOReportJSError(context, @"Unknown cargo type \"%@\".", typeString);
|
||||
return YES;
|
||||
}
|
||||
|
||||
if (!JS_ValueToInt32(context, argv[1], &amount))
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Expected cargo quantity (integer), got \"%@\".", JSValToNSString(context, argv[1]));
|
||||
OOReportJSError(context, @"Expected cargo quantity (integer), got \"%@\".", JSValToNSString(context, argv[1]));
|
||||
return YES;
|
||||
}
|
||||
|
||||
if (amount < 0)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Cargo quantity (%i) is negative.", amount);
|
||||
OOReportJSError(context, @"Cargo quantity (%i) is negative.", amount);
|
||||
return YES;
|
||||
}
|
||||
|
||||
unit = [UNIVERSE unitsForCommodity:type];
|
||||
if ([OOPlayerForScripting() specialCargo] != nil && unit == UNITS_TONS)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Cargo hold full with special cargo, cannot award \"%@\".", typeString);
|
||||
OOReportJSError(context, @"Cargo hold full with special cargo, cannot award \"%@\".", typeString);
|
||||
return YES;
|
||||
}
|
||||
|
||||
@ -468,7 +468,7 @@ static JSBool PlayerRemoveAllCargo(JSContext *context, JSObject *this, uintN arg
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Player.removeAllCargo() may only be called when the player is docked.");
|
||||
OOReportJSError(context, @"Player.removeAllCargo() may only be called when the player is docked.");
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
@ -261,7 +261,7 @@ BOOL QuaternionFromArgumentList(JSContext *context, NSString *scriptClass, NSStr
|
||||
if (QuaternionFromArgumentListNoError(context, argc, argv, outQuaternion, outConsumed)) return YES;
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptBadArguments(context, scriptClass, function, argc, argv,
|
||||
OOReportJSBadArguments(context, scriptClass, function, argc, argv,
|
||||
@"Could not construct quaternion from parameters",
|
||||
@"Quaternion, Entity or four numbers");
|
||||
return NO;
|
||||
@ -336,7 +336,7 @@ static JSBool QuaternionGetProperty(JSContext *context, JSObject *this, jsval na
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Quaternion", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Quaternion", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -372,7 +372,7 @@ static JSBool QuaternionSetProperty(JSContext *context, JSObject *this, jsval na
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Quaternion", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Quaternion", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
@ -329,7 +329,7 @@ static JSFunctionSpec sScriptMethods[] =
|
||||
if (![notedChanges containsObject:key])
|
||||
{
|
||||
[notedChanges addObject:key];
|
||||
OOReportJavaScriptWarning(context, @"The event handler %@ has been renamed to %@. The script %@ must be updated. The old form will not be supported in future versions of Oolite!", oldName, eventName, self->name);
|
||||
OOReportJSWarning(context, @"The event handler %@ has been renamed to %@. The script %@ must be updated. The old form will not be supported in future versions of Oolite!", oldName, eventName, self->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -418,7 +418,7 @@ static JSBool ShipGetProperty(JSContext *context, JSObject *this, jsval name, js
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Ship", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Ship", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -445,7 +445,7 @@ static JSBool ShipSetProperty(JSContext *context, JSObject *this, jsval name, js
|
||||
case kShip_shipDescription:
|
||||
if ([entity isPlayer])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"name", @"name");
|
||||
OOReportJSError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"name", @"name");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -457,7 +457,7 @@ static JSBool ShipSetProperty(JSContext *context, JSObject *this, jsval name, js
|
||||
case kShip_shipDisplayName:
|
||||
if ([entity isPlayer])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"displayName", @"displayName");
|
||||
OOReportJSError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"displayName", @"displayName");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -469,7 +469,7 @@ static JSBool ShipSetProperty(JSContext *context, JSObject *this, jsval name, js
|
||||
case kShip_primaryRole:
|
||||
if ([entity isPlayer])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"primaryRole", @"primary role");
|
||||
OOReportJSError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"primaryRole", @"primary role");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -481,7 +481,7 @@ static JSBool ShipSetProperty(JSContext *context, JSObject *this, jsval name, js
|
||||
case kShip_AIState:
|
||||
if ([entity isPlayer])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"AIState", @"AI state");
|
||||
OOReportJSError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"AIState", @"AI state");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -553,7 +553,7 @@ static JSBool ShipSetProperty(JSContext *context, JSObject *this, jsval name, js
|
||||
case kShip_desiredSpeed:
|
||||
if ([entity isPlayer])
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"desiredSpeed", @"desired speed");
|
||||
OOReportJSError(context, @"Ship.%@ [setter]: cannot set %@ for player.", @"desiredSpeed", @"desired speed");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -565,7 +565,7 @@ static JSBool ShipSetProperty(JSContext *context, JSObject *this, jsval name, js
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Ship", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Ship", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -588,12 +588,12 @@ static JSBool ShipSetScript(JSContext *context, JSObject *this, uintN argc, jsva
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@(\"%@\"): cannot set script for player.", @"setScript", name);
|
||||
OOReportJSError(context, @"Ship.%@(\"%@\"): cannot set script for player.", @"setScript", name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@(): no script name specified.", @"setScript");
|
||||
OOReportJSError(context, @"Ship.%@(): no script name specified.", @"setScript");
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
@ -614,12 +614,12 @@ static JSBool ShipSetAI(JSContext *context, JSObject *this, uintN argc, jsval *a
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@(\"%@\"): cannot modify AI for player.", @"setAI", name);
|
||||
OOReportJSError(context, @"Ship.%@(\"%@\"): cannot modify AI for player.", @"setAI", name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Ship.%@(): no AI state machine specified.", @"setAI");
|
||||
OOReportJSError(context, @"Ship.%@(): no AI state machine specified.", @"setAI");
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
@ -641,12 +641,12 @@ static JSBool ShipSwitchAI(JSContext *context, JSObject *this, uintN argc, jsval
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Ship.%@(\"%@\"): cannot modify AI for player.", @"switchAI", name);
|
||||
OOReportJSWarning(context, @"Ship.%@(\"%@\"): cannot modify AI for player.", @"switchAI", name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Ship.%@(): no AI state machine specified.", @"switchAI");
|
||||
OOReportJSWarning(context, @"Ship.%@(): no AI state machine specified.", @"switchAI");
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
@ -668,12 +668,12 @@ static JSBool ShipExitAI(JSContext *context, JSObject *this, uintN argc, jsval *
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Ship.exitAI(): cannot cannot exit current AI state machine because there are no suspended state machines.");
|
||||
OOReportJSWarning(context, @"Ship.exitAI(): cannot cannot exit current AI state machine because there are no suspended state machines.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Ship.exitAI(): cannot modify AI for player.");
|
||||
OOReportJSWarning(context, @"Ship.exitAI(): cannot modify AI for player.");
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
@ -695,12 +695,12 @@ static JSBool ShipReactToAIMessage(JSContext *context, JSObject *this, uintN arg
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Ship.%@(\"%@\"): cannot modify AI for player.", @"reactToAIMessage", message);
|
||||
OOReportJSWarning(context, @"Ship.%@(\"%@\"): cannot modify AI for player.", @"reactToAIMessage", message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Ship.%@(): no message specified.", @"reactToAIMessage");
|
||||
OOReportJSWarning(context, @"Ship.%@(): no message specified.", @"reactToAIMessage");
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
@ -783,7 +783,7 @@ static JSBool ShipDumpCargo(JSContext *context, JSObject *this, uintN argc, jsva
|
||||
|
||||
if ([thisEnt isPlayer] && [(PlayerEntity *)thisEnt isDocked])
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Player.dumpCargo(): can't dump cargo while docked, ignoring.");
|
||||
OOReportJSWarning(context, @"Player.dumpCargo(): can't dump cargo while docked, ignoring.");
|
||||
return YES;
|
||||
}
|
||||
|
||||
@ -806,7 +806,7 @@ static JSBool ShipSpawn(JSContext *context, JSObject *this, uintN argc, jsval *a
|
||||
role = [NSString stringWithJavaScriptValue:*argv inContext:context];
|
||||
if (role == nil)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Expected role (string), got \"%@\".", JSValToNSString(context, argv[0]));
|
||||
OOReportJSError(context, @"Expected role (string), got \"%@\".", JSValToNSString(context, argv[0]));
|
||||
return YES;
|
||||
}
|
||||
|
||||
@ -814,7 +814,7 @@ static JSBool ShipSpawn(JSContext *context, JSObject *this, uintN argc, jsval *a
|
||||
{
|
||||
if (!JS_ValueToInt32(context, argv[1], &count) || count < 1)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Expected spawn count (positive integer), got \"%@\".", JSValToNSString(context, argv[1]));
|
||||
OOReportJSError(context, @"Expected spawn count (positive integer), got \"%@\".", JSValToNSString(context, argv[1]));
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
@ -872,14 +872,14 @@ static JSBool ShipRunLegacyScriptActions(JSContext *context, JSObject *this, uin
|
||||
target = JSValueToObject(context, argv[0]);
|
||||
if (![target isKindOfClass:[ShipEntity class]])
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"First argument of runLegacyScriptActions must be a Ship.");
|
||||
OOReportJSWarning(context, @"First argument of runLegacyScriptActions must be a Ship.");
|
||||
return YES;
|
||||
}
|
||||
|
||||
actions = JSValueToObject(context, argv[1]);
|
||||
if (![actions isKindOfClass:[NSArray class]])
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Second argument of runLegacyScriptActions must be an Array.");
|
||||
OOReportJSWarning(context, @"Second argument of runLegacyScriptActions must be an Array.");
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
@ -146,7 +146,7 @@ static JSBool SoundGetProperty(JSContext *context, JSObject *this, jsval name, j
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Sound", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Sound", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
@ -154,7 +154,7 @@ static JSBool SoundSourceGetProperty(JSContext *context, JSObject *this, jsval n
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"SoundSource", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"SoundSource", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -194,7 +194,7 @@ static JSBool SoundSourceSetProperty(JSContext *context, JSObject *this, jsval n
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"SoundSource", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"SoundSource", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
@ -64,7 +64,7 @@ OOJSValue *JSSpecialFunctionsObjectWrapper(JSContext *context)
|
||||
static JSBool SpecialJsWarning(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
OOSetJSWarningOrErrorStackSkip(1);
|
||||
OOReportJavaScriptWarning(context, @"%@", [NSString stringWithJavaScriptValue:argv[0] inContext:context]);
|
||||
OOReportJSWarning(context, @"%@", [NSString stringWithJavaScriptValue:argv[0] inContext:context]);
|
||||
OOSetJSWarningOrErrorStackSkip(0);
|
||||
return YES;
|
||||
}
|
||||
|
@ -150,7 +150,7 @@ static JSBool StationGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Station", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Station", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
@ -184,7 +184,7 @@ static JSBool StationSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Station", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Station", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,8 @@ static BOOL JSSunGetPlanetEntity(JSContext *context, JSObject *SunObj, PlanetEnt
|
||||
|
||||
|
||||
static JSBool SunGetProperty(JSContext *context, JSObject *this, jsval name, jsval *outValue);
|
||||
static JSBool SunGoNova(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
static JSBool SunCancelNova(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
|
||||
|
||||
static JSExtendedClass sSunClass =
|
||||
@ -64,7 +66,9 @@ static JSExtendedClass sSunClass =
|
||||
enum
|
||||
{
|
||||
// Property IDs
|
||||
kSun_radius, // Radius of sun in metres.
|
||||
kSun_radius, // Radius of sun in metres, number, read-only
|
||||
kSun_hasGoneNova, // Has sun gone nova, boolean, read-only
|
||||
kSun_isGoingNova // Will sun go nova, boolean, read-only
|
||||
};
|
||||
|
||||
|
||||
@ -72,6 +76,8 @@ static JSPropertySpec sSunProperties[] =
|
||||
{
|
||||
// JS name ID flags
|
||||
{ "radius", kSun_radius, JSPROP_PERMANENT | JSPROP_ENUMERATE | JSPROP_READONLY },
|
||||
{ "hasGoneNova", kSun_hasGoneNova, JSPROP_PERMANENT | JSPROP_ENUMERATE | JSPROP_READONLY },
|
||||
{ "isGoingNova", kSun_isGoingNova, JSPROP_PERMANENT | JSPROP_ENUMERATE | JSPROP_READONLY },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
@ -79,6 +85,8 @@ static JSPropertySpec sSunProperties[] =
|
||||
static JSFunctionSpec sSunMethods[] =
|
||||
{
|
||||
// JS name Function min args
|
||||
{ "goNova", SunGoNova, 1 },
|
||||
{ "cancelNova", SunCancelNova, 0 },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
@ -116,21 +124,62 @@ static BOOL JSSunGetPlanetEntity(JSContext *context, JSObject *stationObj, Plane
|
||||
|
||||
static JSBool SunGetProperty(JSContext *context, JSObject *this, jsval name, jsval *outValue)
|
||||
{
|
||||
BOOL OK = NO;
|
||||
PlanetEntity *sun = nil;
|
||||
|
||||
if (!JSVAL_IS_INT(name)) return YES;
|
||||
if (!JSSunGetPlanetEntity(context, this, &sun)) return NO;
|
||||
if (EXPECT_NOT(!JSSunGetPlanetEntity(context, this, &sun))) return NO;
|
||||
|
||||
switch (JSVAL_TO_INT(name))
|
||||
{
|
||||
|
||||
case kSun_radius:
|
||||
JS_NewDoubleValue(context, [sun radius], outValue);
|
||||
OK = JS_NewDoubleValue(context, [sun radius], outValue);
|
||||
break;
|
||||
|
||||
case kSun_hasGoneNova:
|
||||
*outValue = BOOLToJSVal([sun goneNova]);
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
case kSun_isGoingNova:
|
||||
*outValue = BOOLToJSVal([sun willGoNova] && ![sun goneNova]);
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Sun", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
OOReportJSBadPropertySelector(context, @"Sun", JSVAL_TO_INT(name));
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
// *** Methods ***
|
||||
|
||||
// goNova([delay : Number])
|
||||
static JSBool SunGoNova(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlanetEntity *sun = nil;
|
||||
jsdouble delay = 0;
|
||||
|
||||
if (EXPECT_NOT(!JSSunGetPlanetEntity(context, this, &sun))) return NO;
|
||||
if (argc > 0 && EXPECT_NOT(!JS_ValueToNumber(context, argv[0], &delay))) return NO;
|
||||
|
||||
[sun setGoingNova:YES inTime:delay];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// cancelNova()
|
||||
static JSBool SunCancelNova(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlanetEntity *sun = nil;
|
||||
|
||||
if (EXPECT_NOT(!JSSunGetPlanetEntity(context, this, &sun))) return NO;
|
||||
|
||||
if ([sun willGoNova] && ![sun goneNova])
|
||||
{
|
||||
[sun setGoingNova:NO inTime:0];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
@ -62,7 +62,6 @@ static JSBool SystemToString(JSContext *context, JSObject *this, uintN argc, jsv
|
||||
static JSBool SystemAddPlanet(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
static JSBool SystemAddMoon(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
static JSBool SystemSendAllShipsAway(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
static JSBool SystemSetSunNova(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
static JSBool SystemCountShipsWithRole(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
static JSBool SystemShipsWithPrimaryRole(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
static JSBool SystemShipsWithRole(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
|
||||
@ -158,7 +157,6 @@ static JSFunctionSpec sSystemMethods[] =
|
||||
{ "addPlanet", SystemAddPlanet, 1 },
|
||||
{ "addMoon", SystemAddMoon, 1 },
|
||||
{ "sendAllShipsAway", SystemSendAllShipsAway, 1 },
|
||||
{ "setSunNova", SystemSetSunNova, 1 },
|
||||
{ "countShipsWithRole", SystemCountShipsWithRole, 1 },
|
||||
{ "shipsWithPrimaryRole", SystemShipsWithPrimaryRole, 1 },
|
||||
{ "shipsWithRole", SystemShipsWithRole, 1 },
|
||||
@ -306,7 +304,7 @@ static JSBool SystemGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"System", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"System", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -317,6 +315,7 @@ static JSBool SystemGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
|
||||
static JSBool SystemSetProperty(JSContext *context, JSObject *this, jsval name, jsval *value)
|
||||
{
|
||||
BOOL OK = NO;
|
||||
PlayerEntity *player = nil;
|
||||
OOGalaxyID galaxy;
|
||||
OOSystemID system;
|
||||
@ -342,17 +341,29 @@ static JSBool SystemSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
{
|
||||
case kSystem_name:
|
||||
stringValue = JSValToNSString(context, *value);
|
||||
if (stringValue != nil) [UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_NAME value:stringValue];
|
||||
if (stringValue != nil)
|
||||
{
|
||||
[UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_NAME value:stringValue];
|
||||
OK = YES;
|
||||
}
|
||||
break;
|
||||
|
||||
case kSystem_description:
|
||||
stringValue = JSValToNSString(context, *value);
|
||||
if (stringValue != nil) [UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_DESCRIPTION value:stringValue];
|
||||
if (stringValue != nil)
|
||||
{
|
||||
[UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_DESCRIPTION value:stringValue];
|
||||
OK = YES;
|
||||
}
|
||||
break;
|
||||
|
||||
case kSystem_inhabitantsDescription:
|
||||
stringValue = JSValToNSString(context, *value);
|
||||
if (stringValue != nil) [UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_INHABITANTS value:stringValue];
|
||||
if (stringValue != nil)
|
||||
{
|
||||
[UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_INHABITANTS value:stringValue];
|
||||
OK = YES;
|
||||
}
|
||||
break;
|
||||
|
||||
case kSystem_government:
|
||||
@ -361,6 +372,7 @@ static JSBool SystemSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
if (iValue < 0) iValue = 0;
|
||||
if (7 < iValue) iValue = 7;
|
||||
[UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_GOVERNMENT value:[NSNumber numberWithInt:iValue]];
|
||||
OK = YES;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -370,6 +382,7 @@ static JSBool SystemSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
if (iValue < 0) iValue = 0;
|
||||
if (7 < iValue) iValue = 7;
|
||||
[UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_ECONOMY value:[NSNumber numberWithInt:iValue]];
|
||||
OK = YES;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -379,6 +392,7 @@ static JSBool SystemSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
if (iValue < 0) iValue = 0;
|
||||
if (15 < iValue) iValue = 15;
|
||||
[UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_TECHLEVEL value:[NSNumber numberWithInt:iValue]];
|
||||
OK = YES;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -386,6 +400,7 @@ static JSBool SystemSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
if (JS_ValueToInt32(context, *value, &iValue))
|
||||
{
|
||||
[UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_POPULATION value:[NSNumber numberWithInt:iValue]];
|
||||
OK = YES;
|
||||
}
|
||||
break;
|
||||
|
||||
@ -393,94 +408,99 @@ static JSBool SystemSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
if (JS_ValueToInt32(context, *value, &iValue))
|
||||
{
|
||||
[UNIVERSE setSystemDataForGalaxy:galaxy planet:system key:KEY_PRODUCTIVITY value:[NSNumber numberWithInt:iValue]];
|
||||
OK = YES;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"System", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
OOReportJSBadPropertySelector(context, @"System", JSVAL_TO_INT(name));
|
||||
}
|
||||
|
||||
// Hmm, what are these for? Who put them here? -- Ahruman 20080523
|
||||
[UNIVERSE generateSystemData:kNilRandomSeed];
|
||||
[UNIVERSE generateSystemData:sCurrentSystem];
|
||||
return YES;
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
// *** Methods ***
|
||||
|
||||
// toString() : String
|
||||
static JSBool SystemToString(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
NSString *systemDesc = nil;
|
||||
PlayerEntity *player = nil;
|
||||
|
||||
player = [PlayerEntity sharedPlayer];
|
||||
systemDesc = [NSString stringWithFormat:@"[System %u:%u \"%@\"]", [player currentGalaxyID], [player currentSystemID], [[UNIVERSE currentSystemData] objectForKey:KEY_NAME]];
|
||||
*outResult = [systemDesc javaScriptValueInContext:context];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// addPlanet(key : String)
|
||||
static JSBool SystemAddPlanet(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
NSString *key = nil;
|
||||
|
||||
if (argc > 0 && JSVAL_IS_STRING(argv[0]))
|
||||
key = JSValToNSString(context, argv[0]);
|
||||
if (EXPECT_NOT(key == nil))
|
||||
{
|
||||
NSString *key = JSValToNSString(context, argv[0]);
|
||||
[player addPlanet:key];
|
||||
OOReportJSBadArguments(context, @"System", @"addPlanet", argc, argv, @"Expected planet key, got", nil);
|
||||
return NO;
|
||||
}
|
||||
|
||||
[player addPlanet:key];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// addMoon(key : String)
|
||||
static JSBool SystemAddMoon(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
NSString *key = nil;
|
||||
|
||||
if (argc > 0 && JSVAL_IS_STRING(argv[0]))
|
||||
key = JSValToNSString(context, argv[0]);
|
||||
if (EXPECT_NOT(key == nil))
|
||||
{
|
||||
NSString *key = JSValToNSString(context, argv[0]);
|
||||
[player addMoon:key];
|
||||
OOReportJSBadArguments(context, @"System", @"addMoon", argc, argv, @"Expected planet key, got", nil);
|
||||
return NO;
|
||||
}
|
||||
|
||||
[player addMoon:key];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// sendAllShipsAway()
|
||||
static JSBool SystemSendAllShipsAway(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
|
||||
[player sendAllShipsAway];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
static JSBool SystemSetSunNova(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
|
||||
NSString *key = JSValToNSString(context, argv[0]);
|
||||
[player setSunNovaIn:key];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// countShipsWithRole(role : String) : Number
|
||||
static JSBool SystemCountShipsWithRole(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
NSString *role = nil;
|
||||
int count;
|
||||
|
||||
role = JSValToNSString(context, argv[0]);
|
||||
count = [UNIVERSE countShipsWithRole:role];
|
||||
*outResult = INT_TO_JSVAL(count);
|
||||
if (EXPECT_NOT(role == nil))
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"countShipsWithRole", argc, argv, @"Invalid arguments", @"role");
|
||||
return NO;
|
||||
}
|
||||
|
||||
*outResult = INT_TO_JSVAL([UNIVERSE countShipsWithRole:role]);
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// function shipsWithPrimaryRole(role : String [, relativeTo : Entity [, range : Number]]) : Array (Entity)
|
||||
// shipsWithPrimaryRole(role : String [, relativeTo : Entity [, range : Number]]) : Array (Entity)
|
||||
static JSBool SystemShipsWithPrimaryRole(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
NSString *role = nil;
|
||||
@ -488,25 +508,31 @@ static JSBool SystemShipsWithPrimaryRole(JSContext *context, JSObject *this, uin
|
||||
double range = -1;
|
||||
NSArray *result = nil;
|
||||
|
||||
// Get role argument
|
||||
if (argc >= 1)
|
||||
{
|
||||
role = JSValToNSString(context, *argv);
|
||||
argv++; argc--;
|
||||
if (EXPECT_NOT(role == nil))
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"shipsWithPrimaryRole", argc, argv, @"Invalid arguments", @"role and optional reference entity and range");
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Get optional arguments
|
||||
if (role != nil && !GetRelativeToAndRange(context, &argc, &argv, &relativeTo, &range)) role = nil;
|
||||
if (!GetRelativeToAndRange(context, &argc, &argv, &relativeTo, &range)) return NO;
|
||||
|
||||
// Search for entities
|
||||
if (role != nil) result = FindShips(HasPrimaryRolePredicate, role, relativeTo, range);
|
||||
|
||||
if (result != nil) *outResult = [result javaScriptValueInContext:context];
|
||||
result = FindShips(HasPrimaryRolePredicate, role, relativeTo, range);
|
||||
if (result != nil)
|
||||
{
|
||||
*outResult = [result javaScriptValueInContext:context];
|
||||
return YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// function shipsWithRole(role : String [, relativeTo : Entity [, range : Number]]) : Array (Entity)
|
||||
// shipsWithRole(role : String [, relativeTo : Entity [, range : Number]]) : Array (Entity)
|
||||
static JSBool SystemShipsWithRole(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
NSString *role = nil;
|
||||
@ -514,25 +540,31 @@ static JSBool SystemShipsWithRole(JSContext *context, JSObject *this, uintN argc
|
||||
double range = -1;
|
||||
NSArray *result = nil;
|
||||
|
||||
// Get role argument
|
||||
if (argc >= 1)
|
||||
{
|
||||
role = JSValToNSString(context, *argv);
|
||||
argv++; argc--;
|
||||
if (EXPECT_NOT(role == nil))
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"shipsWithRole", argc, argv, @"Invalid arguments", @"role and optional reference entity and range");
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Get optional arguments
|
||||
if (role != nil && !GetRelativeToAndRange(context, &argc, &argv, &relativeTo, &range)) role = nil;
|
||||
if (EXPECT_NOT(!GetRelativeToAndRange(context, &argc, &argv, &relativeTo, &range))) return NO;
|
||||
|
||||
// Search for entities
|
||||
if (role != nil) result = FindShips(HasRolePredicate, role, relativeTo, range);
|
||||
|
||||
if (result != nil) *outResult = [result javaScriptValueInContext:context];
|
||||
result = FindShips(HasRolePredicate, role, relativeTo, range);
|
||||
if (result != nil)
|
||||
{
|
||||
*outResult = [result javaScriptValueInContext:context];
|
||||
return YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// function entitiesWithScanClass(scanClass : String [, relativeTo : Entity [, range : Number]]) : Array (Entity)
|
||||
// entitiesWithScanClass(scanClass : String [, relativeTo : Entity [, range : Number]]) : Array (Entity)
|
||||
static JSBool SystemEntitiesWithScanClass(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
NSString *scString = nil;
|
||||
@ -541,35 +573,38 @@ static JSBool SystemEntitiesWithScanClass(JSContext *context, JSObject *this, ui
|
||||
double range = -1;
|
||||
NSArray *result = nil;
|
||||
|
||||
// Get scan class argument
|
||||
if (argc >= 1)
|
||||
{
|
||||
scString = JSValToNSString(context, *argv);
|
||||
argv++; argc--;
|
||||
if (scString == nil)
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"entitiesWithScanClass", argc, argv, @"Invalid arguments", @"scan class and optional reference entity and range");
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (scString != nil)
|
||||
{
|
||||
scanClass = StringToScanClass(scString);
|
||||
if (scanClass == CLASS_NOT_SET)
|
||||
if (EXPECT_NOT(scanClass == CLASS_NOT_SET))
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Invalid scan class specifier \"%@\"", scString);
|
||||
return YES;
|
||||
}
|
||||
OOReportJSErrorForCaller(context, @"System", @"entitiesWithScanClass", @"Invalid scan class specifier \"%@\"", scString);
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Get optional arguments
|
||||
if (scanClass != CLASS_NOT_SET && !GetRelativeToAndRange(context, &argc, &argv, &relativeTo, &range)) scanClass = CLASS_NOT_SET;
|
||||
if (EXPECT_NOT(!GetRelativeToAndRange(context, &argc, &argv, &relativeTo, &range))) return NO;
|
||||
|
||||
// Search for entities
|
||||
if (scanClass != CLASS_NOT_SET) result = FindJSVisibleEntities(HasScanClassPredicate, [NSNumber numberWithInt:scanClass], relativeTo, range);
|
||||
|
||||
if (result != nil) *outResult = [result javaScriptValueInContext:context];
|
||||
result = FindJSVisibleEntities(HasScanClassPredicate, [NSNumber numberWithInt:scanClass], relativeTo, range);
|
||||
if (result != nil)
|
||||
{
|
||||
*outResult = [result javaScriptValueInContext:context];
|
||||
return YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// function filteredEntities(this : Object, predicate : Function [, relativeTo : Entity [, range : Number]]) : Array (Entity)
|
||||
// filteredEntities(this : Object, predicate : Function [, relativeTo : Entity [, range : Number]]) : Array (Entity)
|
||||
static JSBool SystemFilteredEntities(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
JSObject *jsThis = NULL;
|
||||
@ -579,26 +614,30 @@ static JSBool SystemFilteredEntities(JSContext *context, JSObject *this, uintN a
|
||||
NSArray *result = nil;
|
||||
|
||||
// Get this and predicate arguments
|
||||
if (argc >= 2)
|
||||
{
|
||||
function = JS_ValueToFunction(context, argv[1]);
|
||||
if (function != NULL && !JS_ValueToObject(context, argv[0], &jsThis)) function = NULL;
|
||||
argv += 2; argc -= 2;
|
||||
if (EXPECT_NOT(function == NULL || !JS_ValueToObject(context, argv[0], &jsThis)))
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"filteredEntities", argc, argv, @"Invalid arguments", @"this, predicate function, and optional reference entity and range");
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Get optional arguments
|
||||
if (function != NULL && !GetRelativeToAndRange(context, &argc, &argv, &relativeTo, &range)) function = NULL;
|
||||
if (EXPECT_NOT(!GetRelativeToAndRange(context, &argc, &argv, &relativeTo, &range))) return NO;
|
||||
|
||||
// Search for entities
|
||||
if (function != NULL)
|
||||
{
|
||||
JSFunctionPredicateParameter param = { context, function, jsThis, NO };
|
||||
result = FindJSVisibleEntities(JSFunctionPredicate, ¶m, relativeTo, range);
|
||||
if (param.errorFlag) result = nil; // Exception in predicate
|
||||
}
|
||||
if (EXPECT_NOT(param.errorFlag)) return NO;
|
||||
|
||||
if (result != nil) *outResult = [result javaScriptValueInContext:context];
|
||||
if (result != nil)
|
||||
{
|
||||
*outResult = [result javaScriptValueInContext:context];
|
||||
return YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -616,7 +655,7 @@ static JSBool SystemAddShips(JSContext *context, JSObject *this, uintN argc, jsv
|
||||
role = JSValToNSString(context, argv[0]);
|
||||
if (!JS_ValueToInt32(context, argv[1], &count) || count < 1 || 64 < count)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"System.%@(): expected positive count, got %@.", @"addShips", JSValToNSString(context, argv[1]));
|
||||
OOReportJSError(context, @"System.%@(): expected positive count, got %@.", @"addShips", JSValToNSString(context, argv[1]));
|
||||
return YES;
|
||||
}
|
||||
|
||||
@ -630,23 +669,25 @@ static JSBool SystemAddShips(JSContext *context, JSObject *this, uintN argc, jsv
|
||||
}
|
||||
|
||||
// Note: need a way to specify the use of witchspace-in effects (as in legacy_addShips).
|
||||
OOReportJavaScriptError(context, @"System.addShips(): not implemented.");
|
||||
OOReportJSError(context, @"System.addShips(): not implemented.");
|
||||
|
||||
return YES;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// legacy_addShips(role : String, count : Number)
|
||||
static JSBool SystemLegacyAddShips(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
NSString *role = nil;
|
||||
int32 count;
|
||||
|
||||
role = JSValToNSString(context, argv[0]);
|
||||
if (!JS_ValueToInt32(context, argv[1], &count) || count < 1 || 64 < count)
|
||||
if (EXPECT_NOT(role == nil ||
|
||||
!JS_ValueToInt32(context, argv[1], &count) ||
|
||||
count < 1 || 64 < count))
|
||||
{
|
||||
OOReportJavaScriptError(context, @"System.%@(): expected positive count, got %@.", @"legacy_addShips", JSValToNSString(context, argv[1]));
|
||||
return YES;
|
||||
OOReportJSBadArguments(context, @"System", @"legacy_addShips", argc, argv, @"Invalid arguments", @"role and positive count no greater than 64");
|
||||
return NO;
|
||||
}
|
||||
|
||||
while (count--) [UNIVERSE witchspaceShipWithPrimaryRole:role];
|
||||
@ -655,6 +696,7 @@ static JSBool SystemLegacyAddShips(JSContext *context, JSObject *this, uintN arg
|
||||
}
|
||||
|
||||
|
||||
// legacy_addSystemShips(role : String, count : Number, location : Number)
|
||||
static JSBool SystemLegacyAddSystemShips(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
jsdouble position;
|
||||
@ -662,19 +704,22 @@ static JSBool SystemLegacyAddSystemShips(JSContext *context, JSObject *this, uin
|
||||
int32 count;
|
||||
|
||||
role = JSValToNSString(context, argv[0]);
|
||||
if (!JS_ValueToInt32(context, argv[1], &count) || count < 1 || 64 < count)
|
||||
if (EXPECT_NOT(role == nil ||
|
||||
!JS_ValueToInt32(context, argv[1], &count) ||
|
||||
count < 1 || 64 < count ||
|
||||
!JS_ValueToNumber(context, argv[2], &position)))
|
||||
{
|
||||
OOReportJavaScriptError(context, @"System.%@(): expected positive count, got %@.", @"legacy_addSystemShips", JSValToNSString(context, argv[1]));
|
||||
return YES;
|
||||
OOReportJSBadArguments(context, @"System", @"legacy_addSystemShips", argc, argv, @"Invalid arguments", @"role, positive count no greater than 64, and position along route");
|
||||
return NO;
|
||||
}
|
||||
|
||||
JS_ValueToNumber(context, argv[2], &position);
|
||||
while (count--) [UNIVERSE addShipWithRole:role nearRouteOneAt:position];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// legacy_addShipsAt(role : String, count : Number, coordScheme : Number, coords : vectorExpression)
|
||||
static JSBool SystemLegacyAddShipsAt(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -685,15 +730,16 @@ static JSBool SystemLegacyAddShipsAt(JSContext *context, JSObject *this, uintN a
|
||||
NSString *arg = nil;
|
||||
|
||||
role = JSValToNSString(context, argv[0]);
|
||||
if (!JS_ValueToInt32(context, argv[1], &count) || count < 1 || 64 < count)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"System.%@(): expected positive count, got %@.", @"legacy_addShipsAt", JSValToNSString(context, argv[1]));
|
||||
return YES;
|
||||
}
|
||||
|
||||
coordScheme = JSValToNSString(context, argv[2]);
|
||||
|
||||
if (!VectorFromArgumentList(context, @"System", @"legacy_addShipsAt", argc - 3, argv + 3, &where, NULL)) return YES;
|
||||
if (EXPECT_NOT(role == nil ||
|
||||
!JS_ValueToInt32(context, argv[1], &count) ||
|
||||
count < 1 || 64 < count ||
|
||||
coordScheme == nil ||
|
||||
!VectorFromArgumentListNoError(context, argc - 3, argv + 3, &where, NULL)))
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"legacy_addShipsAt", argc, argv, @"Invalid arguments", @"role, positive count no greater than 64, coordinate scheme and coordinates");
|
||||
return NO;
|
||||
}
|
||||
|
||||
arg = [NSString stringWithFormat:@"%@ %d %@ %f %f %f", role, count, coordScheme, where.x, where.y, where.z];
|
||||
[player addShipsAt:arg];
|
||||
@ -702,6 +748,7 @@ static JSBool SystemLegacyAddShipsAt(JSContext *context, JSObject *this, uintN a
|
||||
}
|
||||
|
||||
|
||||
// legacy_addShipsAtPrecisely(role : String, count : Number, coordScheme : Number, coords : vectorExpression)
|
||||
static JSBool SystemLegacyAddShipsAtPrecisely(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -712,15 +759,16 @@ static JSBool SystemLegacyAddShipsAtPrecisely(JSContext *context, JSObject *this
|
||||
NSString *arg = nil;
|
||||
|
||||
role = JSValToNSString(context, argv[0]);
|
||||
if (!JS_ValueToInt32(context, argv[1], &count) || count < 1 || 64 < count)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"System.%@(): expected positive count, got %@.", @"legacy_addShipsAtPrecisely", JSValToNSString(context, argv[1]));
|
||||
return YES;
|
||||
}
|
||||
|
||||
coordScheme = JSValToNSString(context, argv[2]);
|
||||
|
||||
if (!VectorFromArgumentList(context, @"System", @"legacy_addShipsAtPrecisely", argc - 3, argv + 3, &where, NULL)) return YES;
|
||||
if (EXPECT_NOT(role == nil ||
|
||||
!JS_ValueToInt32(context, argv[1], &count) ||
|
||||
count < 1 || 64 < count ||
|
||||
coordScheme == nil ||
|
||||
!VectorFromArgumentListNoError(context, argc - 3, argv + 3, &where, NULL)))
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"legacy_addShipsAtPrecisely", argc, argv, @"Invalid arguments", @"role, positive count no greater than 64, coordinate scheme and coordinates");
|
||||
return NO;
|
||||
}
|
||||
|
||||
arg = [NSString stringWithFormat:@"%@ %d %@ %f %f %f", role, count, coordScheme, where.x, where.y, where.z];
|
||||
[player addShipsAtPrecisely:arg];
|
||||
@ -729,6 +777,7 @@ static JSBool SystemLegacyAddShipsAtPrecisely(JSContext *context, JSObject *this
|
||||
}
|
||||
|
||||
|
||||
// legacy_addShipsWithinRadius(role : String, count : Number, coordScheme : Number, coords : vectorExpression, radius : Number)
|
||||
static JSBool SystemLegacyAddShipsWithinRadius(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
@ -741,18 +790,17 @@ static JSBool SystemLegacyAddShipsWithinRadius(JSContext *context, JSObject *thi
|
||||
uintN consumed = 0;
|
||||
|
||||
role = JSValToNSString(context, argv[0]);
|
||||
if (!JS_ValueToInt32(context, argv[1], &count) || count < 1 || 64 < count)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"System.%@(): expected positive count, got %@.", @"legacy_addShipWithinRadius", JSValToNSString(context, argv[1]));
|
||||
return YES;
|
||||
}
|
||||
|
||||
coordScheme = JSValToNSString(context, argv[2]);
|
||||
|
||||
if (!VectorFromArgumentList(context, @"System", @"legacy_addShipWithinRadius", argc - 3, argv + 3, &where, &consumed)) return YES;
|
||||
argc += consumed;
|
||||
argv += consumed;
|
||||
JS_ValueToNumber(context, argv[3], &radius);
|
||||
if (EXPECT_NOT(role == nil ||
|
||||
!JS_ValueToInt32(context, argv[1], &count) ||
|
||||
count < 1 || 64 < count ||
|
||||
coordScheme == nil ||
|
||||
!VectorFromArgumentListNoError(context, argc - 3, argv + 3, &where, &consumed) ||
|
||||
!JS_ValueToNumber(context, argv[3 + consumed], &radius)))
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"legacy_addShipWithinRadius", argc, argv, @"Invalid arguments", @"role, positive count no greater than 64, coordinate scheme, coordinates and radius");
|
||||
return NO;
|
||||
}
|
||||
|
||||
arg = [NSString stringWithFormat:@"%@ %d %@ %f %f %f %f", role, count, coordScheme, where.x, where.y, where.z, radius];
|
||||
[player addShipsWithinRadius:arg];
|
||||
@ -761,15 +809,26 @@ static JSBool SystemLegacyAddShipsWithinRadius(JSContext *context, JSObject *thi
|
||||
}
|
||||
|
||||
|
||||
// legacy_spawnShip(key : string)
|
||||
static JSBool SystemLegacySpawnShip(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
PlayerEntity *player = OOPlayerForScripting();
|
||||
NSString *key = nil;
|
||||
OOPlayerForScripting(); // For backwards-compatibility
|
||||
|
||||
[player spawnShip:JSValToNSString(context, argv[0])];
|
||||
key = JSValToNSString(context, argv[0]);
|
||||
if (key == nil)
|
||||
{
|
||||
OOReportJSBadArguments(context, @"System", @"legacy_addShipWithinRadius", argc, argv, @"Invalid arguments", @"ship key");
|
||||
return NO;
|
||||
}
|
||||
|
||||
[UNIVERSE spawnShip:key];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// *** Helper functions ***
|
||||
|
||||
static BOOL GetRelativeToAndRange(JSContext *context, uintN *ioArgc, jsval **ioArgv, Entity **outRelativeTo, double *outRange)
|
||||
{
|
||||
// No NULL arguments accepted.
|
||||
@ -850,7 +909,7 @@ static JSBool SystemStaticSystemNameForID(JSContext *context, JSObject *this, ui
|
||||
|
||||
if (!JS_ValueToInt32(context, argv[0], &systemID) || systemID < 0 || 255 < systemID)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"%@(): expected system ID from 0 to 255, got %@.", @"systemNameForID", JSValToNSString(context, argv[0]));
|
||||
OOReportJSError(context, @"%@(): expected system ID from 0 to 255, got %@.", @"systemNameForID", JSValToNSString(context, argv[0]));
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
@ -249,54 +249,56 @@ static BOOL JSTimerGetTimer(JSContext *context, JSObject *entityObj, OOJSTimer *
|
||||
static JSBool TimerGetProperty(JSContext *context, JSObject *this, jsval name, jsval *outValue)
|
||||
{
|
||||
OOJSTimer *timer = nil;
|
||||
BOOL OK = NO;
|
||||
|
||||
if (!JSVAL_IS_INT(name)) return YES;
|
||||
if (!JSTimerGetTimer(context, this, &timer)) return NO;
|
||||
if (EXPECT_NOT(!JSTimerGetTimer(context, this, &timer))) return NO;
|
||||
|
||||
switch (JSVAL_TO_INT(name))
|
||||
{
|
||||
case kTimer_nextTime:
|
||||
JS_NewDoubleValue(context, [timer nextTime], outValue);
|
||||
break;
|
||||
OK = JS_NewDoubleValue(context, [timer nextTime], outValue);
|
||||
|
||||
case kTimer_interval:
|
||||
JS_NewDoubleValue(context, [timer interval], outValue);
|
||||
break;
|
||||
OK = JS_NewDoubleValue(context, [timer interval], outValue);
|
||||
|
||||
case kTimer_isPersistent:
|
||||
*outValue = BOOLToJSVal([timer isPersistent]);
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
case kTimer_isRunning:
|
||||
*outValue = BOOLToJSVal([timer isScheduled]);
|
||||
OK = YES;
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Timer", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
OOReportJSBadPropertySelector(context, @"Timer", JSVAL_TO_INT(name));
|
||||
}
|
||||
|
||||
return YES;
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
static JSBool TimerSetProperty(JSContext *context, JSObject *this, jsval name, jsval *value)
|
||||
{
|
||||
BOOL OK = YES;
|
||||
OOJSTimer *timer = nil;
|
||||
double fValue;
|
||||
JSBool bValue;
|
||||
|
||||
if (!JSVAL_IS_INT(name)) return YES;
|
||||
if (!JSTimerGetTimer(context, this, &timer)) return NO;
|
||||
if (EXPECT_NOT(!JSTimerGetTimer(context, this, &timer))) return NO;
|
||||
|
||||
switch (JSVAL_TO_INT(name))
|
||||
{
|
||||
case kTimer_nextTime:
|
||||
if (JS_ValueToNumber(context, *value, &fValue))
|
||||
{
|
||||
OK = YES;
|
||||
if (![timer setNextTime:fValue])
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Ignoring attempt to change next fire time for running timer %@.", timer);
|
||||
OOReportJSWarning(context, @"Ignoring attempt to change next fire time for running timer %@.", timer);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -304,6 +306,7 @@ static JSBool TimerSetProperty(JSContext *context, JSObject *this, jsval name, j
|
||||
case kTimer_interval:
|
||||
if (JS_ValueToNumber(context, *value, &fValue))
|
||||
{
|
||||
OK = YES;
|
||||
[timer setInterval:fValue];
|
||||
}
|
||||
break;
|
||||
@ -311,16 +314,16 @@ static JSBool TimerSetProperty(JSContext *context, JSObject *this, jsval name, j
|
||||
case kTimer_isPersistent:
|
||||
if (JS_ValueToBoolean(context, *value, &bValue))
|
||||
{
|
||||
OK = YES;
|
||||
[timer setPersistent:bValue];
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Timer", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
OOReportJSBadPropertySelector(context, @"Timer", JSVAL_TO_INT(name));
|
||||
}
|
||||
|
||||
return YES;
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
||||
@ -332,7 +335,7 @@ static void TimerFinalize(JSContext *context, JSObject *this)
|
||||
{
|
||||
if ([timer isScheduled])
|
||||
{
|
||||
OOReportJavaScriptWarning(context, @"Timer %@ is being garbage-collected while still running. You must keep a reference to all running timers, or they will stop unpredictably!", timer);
|
||||
OOReportJSWarning(context, @"Timer %@ is being garbage-collected while still running. You must keep a reference to all running timers, or they will stop unpredictably!", timer);
|
||||
}
|
||||
[timer release];
|
||||
JS_SetPrivate(context, this, NULL);
|
||||
@ -353,25 +356,22 @@ static JSBool TimerConstruct(JSContext *context, JSObject *inThis, uintN argc, j
|
||||
{
|
||||
if (!JS_ValueToObject(context, argv[0], &this))
|
||||
{
|
||||
// Should be TypeException, but SpiderMonkey doesn't seem to have a sane way to throw exceptions at the moment.
|
||||
OOReportJavaScriptError(context, @"Could not construct Timer because %@ argument ('%@') is not %@.", "first", "this", "an object");
|
||||
return YES;
|
||||
OOReportJSError(context, @"Could not construct Timer because %@ argument ('%@') is not %@.", "first", "this", "an object");
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
function = JS_ValueToFunction(context, argv[1]);
|
||||
if (function == NULL)
|
||||
{
|
||||
// Should be TypeException, but SpiderMonkey doesn't seem to have a sane way to throw exceptions at the moment.
|
||||
OOReportJavaScriptError(context, @"Could not construct Timer because %@ argument ('%@') is not %@.", "second", "function", "a function");
|
||||
return YES;
|
||||
OOReportJSError(context, @"Could not construct Timer because %@ argument ('%@') is not %@.", "second", "function", "a function");
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (!JS_ValueToNumber(context, argv[2], &delay))
|
||||
{
|
||||
// Should be TypeException, but SpiderMonkey doesn't seem to have a sane way to throw exceptions at the moment.
|
||||
OOReportJavaScriptError(context, @"Could not construct Timer because %@ argument ('%@') is not %@.", "third", "delay", "a number");
|
||||
return YES;
|
||||
OOReportJSError(context, @"Could not construct Timer because %@ argument ('%@') is not %@.", "third", "delay", "a number");
|
||||
return NO;
|
||||
}
|
||||
|
||||
// Fourth argument is optional.
|
||||
@ -395,23 +395,27 @@ static JSBool TimerConstruct(JSContext *context, JSObject *inThis, uintN argc, j
|
||||
}
|
||||
|
||||
|
||||
// Methods
|
||||
// *** Methods ***
|
||||
|
||||
// start() : Boolean
|
||||
static JSBool TimerStart(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
OOJSTimer *thisTimer = nil;
|
||||
|
||||
if (JSTimerGetTimer(context, this, &thisTimer)) *outResult = BOOLToJSVal([thisTimer scheduleTimer]);
|
||||
else *outResult = JSVAL_TRUE;
|
||||
if (EXPECT_NOT(!JSTimerGetTimer(context, this, &thisTimer))) return NO;
|
||||
|
||||
*outResult = BOOLToJSVal([thisTimer scheduleTimer]);
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// stop()
|
||||
static JSBool TimerStop(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
|
||||
{
|
||||
OOJSTimer *thisTimer = nil;
|
||||
|
||||
if (JSTimerGetTimer(context, this, &thisTimer)) [thisTimer unscheduleTimer];
|
||||
if (EXPECT_NOT(!JSTimerGetTimer(context, this, &thisTimer))) return NO;
|
||||
|
||||
[thisTimer unscheduleTimer];
|
||||
return YES;
|
||||
}
|
||||
|
@ -276,7 +276,7 @@ BOOL VectorFromArgumentList(JSContext *context, NSString *scriptClass, NSString
|
||||
if (VectorFromArgumentListNoError(context, argc, argv, outVector, outConsumed)) return YES;
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptBadArguments(context, scriptClass, function, argc, argv,
|
||||
OOReportJSBadArguments(context, scriptClass, function, argc, argv,
|
||||
@"Could not construct vector from parameters",
|
||||
@"Vector, Entity or three numbers");
|
||||
return NO;
|
||||
@ -346,7 +346,7 @@ static JSBool VectorGetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Vector", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Vector", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -378,7 +378,7 @@ static JSBool VectorSetProperty(JSContext *context, JSObject *this, jsval name,
|
||||
break;
|
||||
|
||||
default:
|
||||
OOReportJavaScriptBadPropertySelector(context, @"Vector", JSVAL_TO_INT(name));
|
||||
OOReportJSBadPropertySelector(context, @"Vector", JSVAL_TO_INT(name));
|
||||
return NO;
|
||||
}
|
||||
|
||||
@ -723,7 +723,7 @@ static JSBool VectorStaticInterpolate(JSContext *context, JSObject *this, uintN
|
||||
return VectorToJSValue(context, result, outResult);
|
||||
|
||||
INSUFFICIENT_ARGUMENTS:
|
||||
OOReportJavaScriptBadArguments(context, @"Vector", @"interpolate", inArgc, inArgv,
|
||||
OOReportJSBadArguments(context, @"Vector", @"interpolate", inArgc, inArgv,
|
||||
@"Insufficient parameters",
|
||||
@"vector expression, vector expression and number");
|
||||
return NO;
|
||||
|
@ -105,7 +105,7 @@ static JSBool WorldScriptsEnumerate(JSContext *context, JSObject *object)
|
||||
|
||||
for (nameEnum = [names objectEnumerator]; (name = [nameEnum nextObject]); )
|
||||
{
|
||||
JS_DefineProperty(context, object, [name UTF8String], JSVAL_NULL, WorldScriptsGetProperty, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT);
|
||||
if (!JS_DefineProperty(context, object, [name UTF8String], JSVAL_NULL, WorldScriptsGetProperty, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT)) return NO;
|
||||
}
|
||||
|
||||
return YES;
|
||||
|
@ -84,16 +84,21 @@ enum
|
||||
@end
|
||||
|
||||
|
||||
void OOReportJavaScriptError(JSContext *context, NSString *format, ...);
|
||||
void OOReportJavaScriptErrorWithArguments(JSContext *context, NSString *format, va_list args);
|
||||
void OOReportJavaScriptErrorForCaller(JSContext *context, NSString *scriptClass, NSString *function, NSString *format, ...);
|
||||
/* Error and warning reporters.
|
||||
|
||||
void OOReportJavaScriptWarning(JSContext *context, NSString *format, ...);
|
||||
void OOReportJavaScriptWarningWithArguments(JSContext *context, NSString *format, va_list args);
|
||||
void OOReportJavaScriptWarningForCaller(JSContext *context, NSString *scriptClass, NSString *function, NSString *format, ...);
|
||||
Note that after reporting an error in a JavaScript callback, the caller
|
||||
must return NO to signal an error.
|
||||
*/
|
||||
void OOReportJSError(JSContext *context, NSString *format, ...);
|
||||
void OOReportJSErrorWithArguments(JSContext *context, NSString *format, va_list args);
|
||||
void OOReportJSErrorForCaller(JSContext *context, NSString *scriptClass, NSString *function, NSString *format, ...);
|
||||
|
||||
void OOReportJavaScriptBadPropertySelector(JSContext *context, NSString *className, jsint selector);
|
||||
void OOReportJavaScriptBadArguments(JSContext *context, NSString *scriptClass, NSString *function, uintN argc, jsval *argv, NSString *message, NSString *expectedArgsDescription);
|
||||
void OOReportJSWarning(JSContext *context, NSString *format, ...);
|
||||
void OOReportJSWarningWithArguments(JSContext *context, NSString *format, va_list args);
|
||||
void OOReportJSWarningForCaller(JSContext *context, NSString *scriptClass, NSString *function, NSString *format, ...);
|
||||
|
||||
void OOReportJSBadPropertySelector(JSContext *context, NSString *className, jsint selector);
|
||||
void OOReportJSBadArguments(JSContext *context, NSString *scriptClass, NSString *function, uintN argc, jsval *argv, NSString *message, NSString *expectedArgsDescription);
|
||||
|
||||
/* OOSetJSWarningOrErrorStackSkip()
|
||||
|
||||
|
@ -444,17 +444,17 @@ static NSString *CallerPrefix(NSString *scriptClass, NSString *function)
|
||||
}
|
||||
|
||||
|
||||
void OOReportJavaScriptError(JSContext *context, NSString *format, ...)
|
||||
void OOReportJSError(JSContext *context, NSString *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, format);
|
||||
OOReportJavaScriptErrorWithArguments(context, format, args);
|
||||
OOReportJSErrorWithArguments(context, format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
|
||||
void OOReportJavaScriptErrorForCaller(JSContext *context, NSString *scriptClass, NSString *function, NSString *format, ...)
|
||||
void OOReportJSErrorForCaller(JSContext *context, NSString *scriptClass, NSString *function, NSString *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
NSString *msg = nil;
|
||||
@ -463,12 +463,12 @@ void OOReportJavaScriptErrorForCaller(JSContext *context, NSString *scriptClass,
|
||||
msg = [[NSString alloc] initWithFormat:format arguments:args];
|
||||
va_end(args);
|
||||
|
||||
OOReportJavaScriptError(context, @"%@%@", CallerPrefix(scriptClass, function), msg);
|
||||
OOReportJSError(context, @"%@%@", CallerPrefix(scriptClass, function), msg);
|
||||
[msg release];
|
||||
}
|
||||
|
||||
|
||||
void OOReportJavaScriptErrorWithArguments(JSContext *context, NSString *format, va_list args)
|
||||
void OOReportJSErrorWithArguments(JSContext *context, NSString *format, va_list args)
|
||||
{
|
||||
NSString *msg = nil;
|
||||
|
||||
@ -478,17 +478,17 @@ void OOReportJavaScriptErrorWithArguments(JSContext *context, NSString *format,
|
||||
}
|
||||
|
||||
|
||||
void OOReportJavaScriptWarning(JSContext *context, NSString *format, ...)
|
||||
void OOReportJSWarning(JSContext *context, NSString *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, format);
|
||||
OOReportJavaScriptWarningWithArguments(context, format, args);
|
||||
OOReportJSWarningWithArguments(context, format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
|
||||
void OOReportJavaScriptWarningForCaller(JSContext *context, NSString *scriptClass, NSString *function, NSString *format, ...)
|
||||
void OOReportJSWarningForCaller(JSContext *context, NSString *scriptClass, NSString *function, NSString *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
NSString *msg = nil;
|
||||
@ -497,12 +497,12 @@ void OOReportJavaScriptWarningForCaller(JSContext *context, NSString *scriptClas
|
||||
msg = [[NSString alloc] initWithFormat:format arguments:args];
|
||||
va_end(args);
|
||||
|
||||
OOReportJavaScriptWarning(context, @"%@%@", CallerPrefix(scriptClass, function), msg);
|
||||
OOReportJSWarning(context, @"%@%@", CallerPrefix(scriptClass, function), msg);
|
||||
[msg release];
|
||||
}
|
||||
|
||||
|
||||
void OOReportJavaScriptWarningWithArguments(JSContext *context, NSString *format, va_list args)
|
||||
void OOReportJSWarningWithArguments(JSContext *context, NSString *format, va_list args)
|
||||
{
|
||||
NSString *msg = nil;
|
||||
|
||||
@ -512,18 +512,18 @@ void OOReportJavaScriptWarningWithArguments(JSContext *context, NSString *format
|
||||
}
|
||||
|
||||
|
||||
void OOReportJavaScriptBadPropertySelector(JSContext *context, NSString *className, jsint selector)
|
||||
void OOReportJSBadPropertySelector(JSContext *context, NSString *className, jsint selector)
|
||||
{
|
||||
OOReportJavaScriptError(context, @"Internal error: bad property identifier %i in property accessor for class %@.", selector, className);
|
||||
OOReportJSError(context, @"Internal error: bad property identifier %i in property accessor for class %@.", selector, className);
|
||||
}
|
||||
|
||||
|
||||
void OOReportJavaScriptBadArguments(JSContext *context, NSString *scriptClass, NSString *function, uintN argc, jsval *argv, NSString *message, NSString *expectedArgsDescription)
|
||||
void OOReportJSBadArguments(JSContext *context, NSString *scriptClass, NSString *function, uintN argc, jsval *argv, NSString *message, NSString *expectedArgsDescription)
|
||||
{
|
||||
message = [NSString stringWithFormat:@"%@ %@", message, [NSString stringWithJavaScriptParameters:argv count:argc inContext:context]];
|
||||
if (expectedArgsDescription != nil) message = [NSString stringWithFormat:@"%@ -- expected %@", message, expectedArgsDescription];
|
||||
|
||||
OOReportJavaScriptErrorForCaller(context, scriptClass, function, @"%@.", message);
|
||||
OOReportJSErrorForCaller(context, scriptClass, function, @"%@.", message);
|
||||
}
|
||||
|
||||
|
||||
@ -538,7 +538,7 @@ BOOL NumberFromArgumentList(JSContext *context, NSString *scriptClass, NSString
|
||||
if (NumberFromArgumentListNoError(context, argc, argv, outNumber, outConsumed)) return YES;
|
||||
else
|
||||
{
|
||||
OOReportJavaScriptBadArguments(context, scriptClass, function, argc, argv,
|
||||
OOReportJSBadArguments(context, scriptClass, function, argc, argv,
|
||||
@"Expected number, got", NULL);
|
||||
return NO;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user