Ticket #2984: garrison.diff

File garrison.diff, 3.5 KB (added by mimo, 9 years ago)
  • binaries/data/mods/public/simulation/components/GarrisonHolder.js

     
    296296 */
    297297GarrisonHolder.prototype.Eject = function(entity, forced)
    298298{
    299 
    300299    var entityIndex = this.entities.indexOf(entity);
    301300    // Error: invalid entity ID, usually it's already been ejected
    302301    if (entityIndex == -1)
     
    632631        this.Eject(msg.entity);
    633632        this.Garrison(msg.newentity);
    634633    }
     634
     635    if (!this.initGarrison)
     636        return;
     637
     638    // update the pre-game garrison because of SkirmishReplacement
     639    if (msg.entity == this.entity)
     640    {
     641        let cmpGarrisonHolder = Engine.QueryInterface(msg.newentity, IID_GarrisonHolder);
     642        if (cmpGarrisonHolder)
     643            cmpGarrisonHolder.initGarrison = this.initGarrison;
     644    }
     645    else
     646    {
     647        let entityIndex = this.initGarrison.indexOf(msg.entity);
     648        if (entityIndex != -1)
     649            this.initGarrison[entityIndex] = msg.newentity;
     650    }
    635651};
    636652
    637653
     
    697713    return false;
    698714};
    699715
     716/**
     717 * Initialise the garrisoned units
     718 */
     719GarrisonHolder.prototype.OnGlobalInitGame = function(msg)
     720{
     721    if (!this.initGarrison)
     722        return;
     723
     724    for (let ent of this.initGarrison)
     725    {
     726        var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
     727        if (!cmpUnitAI || !cmpUnitAI.CanGarrison(this.entity))
     728            continue;
     729        this.Garrison(ent);
     730    }
     731    this.initGarrison = undefined;
     732};
     733
    700734Engine.RegisterComponentType(IID_GarrisonHolder, "GarrisonHolder", GarrisonHolder);
    701735
  • binaries/data/mods/public/simulation/components/interfaces/GarrisonHolder.js

     
    77// Message of the form { "holder": this.entity, "unit" : unit } sent to the AlertRaiser
    88// which ordered the unit "unit" to garrison.
    99Engine.RegisterMessageType("UnitGarrisonedAfterAlert");
     10
     11// Message sent by InitGame for component map-dependent initialization
     12Engine.RegisterMessageType("InitGame");
  • binaries/data/mods/public/simulation/helpers/InitGame.js

     
    1818
    1919function InitGame(settings)
    2020{
     21    // Map dependent initialisations of components (i.e. garrisoned units)
     22    Engine.BroadcastMessage(MT_InitGame, {});
     23
    2124    // No settings when loading a map in Atlas, so do nothing
    2225    if (!settings)
    2326        return;
  • binaries/data/mods/public/simulation/templates/skirmish/units/default_ship_trireme.xml

     
     1<?xml version="1.0" encoding="utf-8"?>
     2<Entity parent="template_unit_mechanical_ship_trireme">
     3  <Identity>
     4    <Civ>skirm</Civ>
     5  </Identity>
     6  <SkirmishReplacer>
     7    <general>units/{civ}_ship_trireme</general>
     8  </SkirmishReplacer>
     9  <VisualActor>
     10    <Actor>structures/athenians/trireme.xml</Actor>
     11  </VisualActor>
     12</Entity>