- mission.setInstructionsKey fix (the global prefix implementation would not be able to tell which oxp it was called from)

- yet another windows DEP fix. There's something inside OOJSScript that windows doesn't like.

git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@2770 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
Marc 2009-11-20 15:27:11 +00:00
parent f8cba46d16
commit bf23119d18
2 changed files with 19 additions and 13 deletions

View File

@ -51,6 +51,7 @@ this.global = (function () { return this; } ).call();
/**** Utilities, not intended to be retired ****/ /**** Utilities, not intended to be retired ****/
// Ship.spawnOne(): like spawn(role, 1), but returns the ship rather than an array. // Ship.spawnOne(): like spawn(role, 1), but returns the ship rather than an array.
Ship.__proto__.spawnOne = function (role) Ship.__proto__.spawnOne = function (role)
{ {
@ -59,14 +60,6 @@ Ship.__proto__.spawnOne = function (role)
}; };
// mission.setInstructionsKey(): load mission text from mission.plist and use it as mission instructions.
mission.setInstructionsKey = function(textKey, missionKey)
{
mission.setInstructions((textKey ? expandMissionText(textKey) : null), missionKey);
}
// mission.addMessageTextKey(): load mission text from mission.plist and append to mission screen or info screen. // mission.addMessageTextKey(): load mission text from mission.plist and append to mission screen or info screen.
mission.addMessageTextKey = function(textKey) mission.addMessageTextKey = function(textKey)
{ {

View File

@ -45,6 +45,7 @@ static JSBool MissionSetBackgroundImage(JSContext *context, JSObject *this, uint
static JSBool MissionSetMusic(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult); static JSBool MissionSetMusic(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
static JSBool MissionSetChoicesKey(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult); static JSBool MissionSetChoicesKey(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
static JSBool MissionSetInstructions(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult); static JSBool MissionSetInstructions(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
static JSBool MissionSetInstructionsKey(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
static JSBool MissionClearMissionScreen(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult); static JSBool MissionClearMissionScreen(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
static JSBool MissionRunScreen(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult); static JSBool MissionRunScreen(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult);
@ -99,6 +100,7 @@ static JSFunctionSpec sMissionMethods[] =
{ "setMusic", MissionSetMusic, 1 }, { "setMusic", MissionSetMusic, 1 },
{ "setChoicesKey", MissionSetChoicesKey, 1 }, { "setChoicesKey", MissionSetChoicesKey, 1 },
{ "setInstructions", MissionSetInstructions, 1 }, { "setInstructions", MissionSetInstructions, 1 },
{ "setInstructionsKey", MissionSetInstructionsKey, 1 },
{ "clearMissionScreen", MissionClearMissionScreen, 0 }, { "clearMissionScreen", MissionClearMissionScreen, 0 },
{ "runScreen", MissionRunScreen, 2 }, { "runScreen", MissionRunScreen, 2 },
{ 0 } { 0 }
@ -131,13 +133,14 @@ void MissionRunCallback()
// now reset the mission choice silently, before calling the callback script. // now reset the mission choice silently, before calling the callback script.
[player setMissionChoice:nil withEvent:NO]; [player setMissionChoice:nil withEvent:NO];
[OOJSScript pushScript:callbackScript]; // windows DEP fix: use the underlying object!
[OOJSScript pushScript:[callbackScript weakRefUnderlyingObject]];
[engine callJSFunction:function [engine callJSFunction:function
forObject:JSVAL_TO_OBJECT([callbackScript javaScriptValueInContext:context]) forObject:JSVAL_TO_OBJECT([[callbackScript weakRefUnderlyingObject] javaScriptValueInContext:context])
argc:1 argc:1
argv:&argval argv:&argval
result:&rval]; result:&rval];
[OOJSScript popScript:callbackScript]; [OOJSScript popScript:[callbackScript weakRefUnderlyingObject]];
[engine releaseContext:context]; [engine releaseContext:context];
} }
@ -326,7 +329,13 @@ static JSBool MissionSetChoicesKey(JSContext *context, JSObject *this, uintN arg
} }
// setInstructionsKey is now a convenience alias inside oolite-global-prefix.js static JSBool MissionSetInstructionsKey(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
{
*outResult = [@"textKey" javaScriptValueInContext:context];
MissionSetInstructions(context, this, argc, argv, outResult);
}
// setInstructions(instructions: String [, missionKey : String]) // setInstructions(instructions: String [, missionKey : String])
static JSBool MissionSetInstructions(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult) static JSBool MissionSetInstructions(JSContext *context, JSObject *this, uintN argc, jsval *argv, jsval *outResult)
{ {
@ -348,6 +357,9 @@ static JSBool MissionSetInstructions(JSContext *context, JSObject *this, uintN a
if (text != nil) if (text != nil)
{ {
if ([@"textKey" isEqualTo:JSValToNSString(context,*outResult)])
[player setMissionDescription:text forMission:missionKey];
else
[player setMissionInstructions:text forMission:missionKey]; [player setMissionInstructions:text forMission:missionKey];
} }
else else
@ -355,6 +367,7 @@ static JSBool MissionSetInstructions(JSContext *context, JSObject *this, uintN a
[player clearMissionDescriptionForMission:missionKey]; [player clearMissionDescriptionForMission:missionKey];
} }
*outResult = JSVAL_VOID;
return YES; return YES;
} }