Index: ps/trunk/binaries/data/mods/public/simulation/ai/petra/_petrabot.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/ai/petra/_petrabot.js (revision 19709) +++ ps/trunk/binaries/data/mods/public/simulation/ai/petra/_petrabot.js (revision 19710) @@ -1,176 +1,170 @@ Engine.IncludeModule("common-api"); var PETRA = (function() { var m = {}; -/** - * "local" global variables for stuffs that will need a unique ID - * Note that since order of loading is alphabetic, this means this file must go before any other file using them. - */ -m.playerGlobals = []; - m.PetraBot = function PetraBot(settings) { API3.BaseAI.call(this, settings); this.playedTurn = 0; this.elapsedTime = 0; this.uniqueIDs = { "armies": 0, "bases": 1, // base manager ID starts at one because "0" means "no base" on the map "plans": 0, // training/building/research plans "transports": 1 // transport plans start at 1 because 0 might be used as none }; this.Config = new m.Config(settings.difficulty); this.savedEvents = {}; }; m.PetraBot.prototype = new API3.BaseAI(); m.PetraBot.prototype.CustomInit = function(gameState, sharedScript) { if (this.isDeserialized) { // WARNING: the deserializations should not modify the metadatas infos inside their init functions this.turn = this.data.turn; this.playedTurn = this.data.playedTurn; this.elapsedTime = this.data.elapsedTime; this.savedEvents = this.data.savedEvents; for (let key in this.savedEvents) { for (let i in this.savedEvents[key]) { if (!this.savedEvents[key][i].entityObj) continue; let evt = this.savedEvents[key][i]; let evtmod = {}; for (let keyevt in evt) { evtmod[keyevt] = evt[keyevt]; evtmod.entityObj = new API3.Entity(gameState.sharedScript, evt.entityObj); this.savedEvents[key][i] = evtmod; } } } this.Config.Deserialize(this.data.config); this.queueManager = new m.QueueManager(this.Config, {}); this.queueManager.Deserialize(gameState, this.data.queueManager); this.queues = this.queueManager.queues; this.HQ = new m.HQ(this.Config); this.HQ.init(gameState, this.queues); this.HQ.Deserialize(gameState, this.data.HQ); this.uniqueIDs = this.data.uniqueIDs; this.isDeserialized = false; this.data = undefined; // initialisation needed after the completion of the deserialization this.HQ.postinit(gameState); } else { this.Config.setConfig(gameState); // this.queues can only be modified by the queue manager or things will go awry. this.queues = {}; for (let i in this.Config.priorities) this.queues[i] = new m.Queue(); this.queueManager = new m.QueueManager(this.Config, this.queues); this.HQ = new m.HQ(this.Config); this.HQ.init(gameState, this.queues); // Analyze our starting position and set a strategy this.HQ.gameAnalysis(gameState); } }; m.PetraBot.prototype.OnUpdate = function(sharedScript) { if (this.gameFinished) return; for (let i in this.events) { if (i == "AIMetadata") // not used inside petra continue; if(this.savedEvents[i] !== undefined) this.savedEvents[i] = this.savedEvents[i].concat(this.events[i]); else this.savedEvents[i] = this.events[i]; } // Run the update every n turns, offset depending on player ID to balance the load this.elapsedTime = this.gameState.getTimeElapsed() / 1000; if (!this.playedTurn || (this.turn + this.player) % 8 == 5) { Engine.ProfileStart("PetraBot bot (player " + this.player +")"); this.playedTurn++; if (this.gameState.getOwnEntities().length === 0) { Engine.ProfileStop(); return; // With no entities to control the AI cannot do anything } this.HQ.update(this.gameState, this.queues, this.savedEvents); this.queueManager.update(this.gameState); for (let i in this.savedEvents) this.savedEvents[i] = []; Engine.ProfileStop(); } this.turn++; }; m.PetraBot.prototype.Serialize = function() { let savedEvents = {}; for (let key in this.savedEvents) { savedEvents[key] = this.savedEvents[key].slice(); for (let i in savedEvents[key]) { if (!savedEvents[key][i].entityObj) continue; let evt = savedEvents[key][i]; let evtmod = {}; for (let keyevt in evt) evtmod[keyevt] = evt[keyevt]; evtmod.entityObj = evt.entityObj._entity; savedEvents[key][i] = evtmod; } } return { "uniqueIDs": this.uniqueIDs, "turn": this.turn, "playedTurn": this.playedTurn, "elapsedTime": this.elapsedTime, "savedEvents": savedEvents, "config": this.Config.Serialize(), "queueManager": this.queueManager.Serialize(), "HQ": this.HQ.Serialize() }; }; m.PetraBot.prototype.Deserialize = function(data, sharedScript) { this.isDeserialized = true; this.data = data; }; return m; }());