mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 08:50:58 -05:00
Implemented caching and fixed off by one error
This commit is contained in:
parent
dddd617a08
commit
e8d26af985
1 changed files with 40 additions and 3 deletions
|
@ -176,7 +176,41 @@ self.stringifyValue = function(value, depth) {
|
|||
return "" + prefix + brackets[0] + sep + " " + (values.join(sep + ' ')) + sep + brackets[1];
|
||||
};
|
||||
|
||||
var cache = {};
|
||||
|
||||
self.invalidateCache = function () {
|
||||
cache = {};
|
||||
};
|
||||
|
||||
self.retrieveValueFromCache = function (thangID, spellID, variableChain, frame) {
|
||||
var frameCache, thangCache, spellCache;
|
||||
if ((frameCache = cache[frame]) && (thangCache = frameCache[thangID]) && (spellCache = thangCache[spellID]))
|
||||
return spellCache[variableChain.join()];
|
||||
return undefined;
|
||||
};
|
||||
|
||||
|
||||
self.updateCache = function (thangID, spellID, variableChain, frame, value) {
|
||||
var key, keys, currentObject;
|
||||
keys = [frame,thangID, spellID, variableChain.join()];
|
||||
currentObject = cache;
|
||||
|
||||
for (var i = 0, len = keys.length - 1; i < len; i++)
|
||||
{
|
||||
key = keys[i];
|
||||
if (!(key in currentObject))
|
||||
currentObject[key] = {};
|
||||
currentObject = currentObject[key];
|
||||
}
|
||||
currentObject[keys[keys.length - 1]] = value;
|
||||
};
|
||||
|
||||
self.retrieveValueFromFrame = function retrieveValueFromFrame(args) {
|
||||
var cacheValue;
|
||||
if (cacheValue = self.retrieveValueFromCache(args.currentThangID, args.currentSpellID, args.variableChain, args.frame))
|
||||
return self.postMessage({type: 'debug-value-return', serialized: {"key": args.variableChain.join(), "value": cacheValue}});
|
||||
|
||||
|
||||
var retrieveProperty = function retrieveProperty(currentThangID, currentSpellID, variableChain)
|
||||
{
|
||||
var prop;
|
||||
|
@ -226,12 +260,14 @@ self.retrieveValueFromFrame = function retrieveValueFromFrame(args) {
|
|||
"key": keys.join("."),
|
||||
"value": self.stringifyValue(value,0)
|
||||
};
|
||||
self.updateCache(currentThangID,currentSpellID,variableChain, args.frame, serializedProperty.value);
|
||||
self.postMessage({type: 'debug-value-return', serialized: serializedProperty});
|
||||
};
|
||||
self.enableFlowOnThangSpell(args.currentThangID, args.currentSpellID, args.userCodeMap);
|
||||
self.setupWorldToRunUntilFrame(args);
|
||||
//You need to load until the very next frame, as the state is gathered at the next frame, this might be a source of bugs!
|
||||
self.world.loadFramesUntilFrame(
|
||||
args.frame,
|
||||
args.frame + 1,
|
||||
retrieveProperty.bind({},args.currentThangID, args.currentSpellID, args.variableChain),
|
||||
self.onWorldError,
|
||||
self.onWorldLoadProgress
|
||||
|
@ -241,7 +277,7 @@ self.retrieveValueFromFrame = function retrieveValueFromFrame(args) {
|
|||
self.enableFlowOnThangSpell = function enableFlowOnThang(thangID, spellID, userCodeMap) {
|
||||
try {
|
||||
if (userCodeMap[thangID][spellID].originalOptions.includeFlow === true &&
|
||||
userCodeMap[thangID][spellID].originalOptions.noSerializationInFlow)
|
||||
userCodeMap[thangID][spellID].originalOptions.noSerializationInFlow === true)
|
||||
return;
|
||||
else
|
||||
{
|
||||
|
@ -268,7 +304,7 @@ self.setupWorldToRunUntilFrame = function setupWorldToRunUntilFrame(args) {
|
|||
|
||||
var stringifiedUserCodeMap = JSON.stringify(args.userCodeMap);
|
||||
var userCodeMapHasChanged = ! _.isEqual(self.currentUserCodeMapCopy, stringifiedUserCodeMap);
|
||||
|
||||
if (userCodeMapHasChanged) self.invalidateCache();
|
||||
self.currentUserCodeMapCopy = stringifiedUserCodeMap;
|
||||
try {
|
||||
self.world = new World(args.worldName, args.userCodeMap);
|
||||
|
@ -291,6 +327,7 @@ self.setupWorldToRunUntilFrame = function setupWorldToRunUntilFrame(args) {
|
|||
};
|
||||
self.runWorldUntilFrame = function runWorldUntilFrame(args) {
|
||||
self.setupWorldToRunUntilFrame(args);
|
||||
|
||||
self.world.loadFramesUntilFrame(args.frame, self.onWorldLoaded, self.onWorldError, self.onWorldLoadProgress);
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue