Ticket #3811: clean_buildrestrictions_let.diff

File clean_buildrestrictions_let.diff, 8.7 KB (added by bb, 8 years ago)

Partial splitted of cleanup from previous patch (partial in order to prevent mega-patches)

  • binaries/data/mods/public/simulation/components/BuildRestrictions.js

     
    7979 */
    8080BuildRestrictions.prototype.CheckPlacement = function()
    8181{
    82     var cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity);
    83     var name = cmpIdentity ? cmpIdentity.GetGenericName() : "Building";
     82    let cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity);
     83    let name = cmpIdentity ? cmpIdentity.GetGenericName() : "Building";
    8484
    85     var result = {
     85    let result = {
    8686        "success": false,
    8787        "message": markForTranslation("%(name)s cannot be built due to unknown error"),
    8888        "parameters": {
     
    9393    };
    9494
    9595    // TODO: AI has no visibility info
    96     var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
     96    let cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
    9797    if (!cmpPlayer.IsAI())
    9898    {
    9999        // Check whether it's in a visible or fogged region
    100         var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
    101         var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
     100        let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     101        let cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
    102102        if (!cmpRangeManager || !cmpOwnership)
    103103            return result; // Fail
    104104
    105         var explored = (cmpRangeManager.GetLosVisibility(this.entity, cmpOwnership.GetOwner()) != "hidden");
     105        let explored = (cmpRangeManager.GetLosVisibility(this.entity, cmpOwnership.GetOwner()) != "hidden");
    106106        if (!explored)
    107107        {
    108108            result.message = markForTranslation("%(name)s cannot be built in unexplored area");
     
    111111    }
    112112
    113113    // Check obstructions and terrain passability
    114     var passClassName = "";
     114    let passClassName = "";
    115115    switch (this.template.PlacementType)
    116116    {
    117117    case "shore":
     
    129129        passClassName = "building-land";
    130130    }
    131131
    132     var cmpObstruction = Engine.QueryInterface(this.entity, IID_Obstruction);
     132    let cmpObstruction = Engine.QueryInterface(this.entity, IID_Obstruction);
    133133    if (!cmpObstruction)
    134134        return result; // Fail
    135135
     136    let ret = cmpObstruction.CheckFoundation(passClassName, this.template.Category == "Wall")
    136137
    137     if (this.template.Category == "Wall")
    138     {
    139         // for walls, only test the center point
    140         var ret = cmpObstruction.CheckFoundation(passClassName, true);
    141     }
    142     else
    143     {
    144         var ret = cmpObstruction.CheckFoundation(passClassName, false);
    145     }
    146 
    147138    if (ret != "success")
    148139    {
    149140        switch (ret)
     
    163154    }
    164155
    165156    // Check territory restrictions
    166     var cmpTerritoryManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager);
    167     var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
    168     var cmpPosition = Engine.QueryInterface(this.entity, IID_Position);
     157    let cmpTerritoryManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TerritoryManager);
     158    let cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
     159    let cmpPosition = Engine.QueryInterface(this.entity, IID_Position);
    169160    if (!(cmpTerritoryManager && cmpPlayer && cmpPosition && cmpPosition.IsInWorld()))
    170161        return result;  // Fail
    171162
    172     var pos = cmpPosition.GetPosition2D();
    173     var tileOwner = cmpTerritoryManager.GetOwner(pos.x, pos.y);
    174     var isConnected = !cmpTerritoryManager.IsTerritoryBlinking(pos.x, pos.y);
    175     var isOwn = tileOwner == cmpPlayer.GetPlayerID();
    176     var isMutualAlly = cmpPlayer.IsExclusiveMutualAlly(tileOwner);
    177     var isNeutral = tileOwner == 0;
     163    let pos = cmpPosition.GetPosition2D();
     164    let tileOwner = cmpTerritoryManager.GetOwner(pos.x, pos.y);
     165    let isConnected = !cmpTerritoryManager.IsTerritoryBlinking(pos.x, pos.y);
    178166
    179     var invalidTerritory = "";
    180     if (isOwn)
     167    let invalidTerritory = "";
     168    if (tileOwner == cmpPlayer.GetPlayerID())
    181169    {
    182170        if (!this.HasTerritory("own"))
    183171            // Translation: territoryType being displayed in a translated sentence in the form: "House cannot be built in %(territoryType)s territory.".
     
    186174            // Translation: territoryType being displayed in a translated sentence in the form: "House cannot be built in %(territoryType)s territory.".
    187175            invalidTerritory = markForTranslationWithContext("Territory type", "unconnected own");
    188176    }
    189     else if (isMutualAlly)
     177    else if (cmpPlayer.IsExclusiveMutualAlly(tileOwner))
    190178    {
    191179        if (!this.HasTerritory("ally"))
    192180            // Translation: territoryType being displayed in a translated sentence in the form: "House cannot be built in %(territoryType)s territory.".
     
    195183            // Translation: territoryType being displayed in a translated sentence in the form: "House cannot be built in %(territoryType)s territory.".
    196184            invalidTerritory = markForTranslationWithContext("Territory type", "unconnected allied");
    197185    }
    198     else if (isNeutral)
     186    else if (!tileOwner)
    199187    {
    200188        if (!this.HasTerritory("neutral"))
    201189            // Translation: territoryType being displayed in a translated sentence in the form: "House cannot be built in %(territoryType)s territory.".
     
    227215        //      1. ships can be spawned "nearby"
    228216        //      2. builders can pass the terrain where the dock is placed (don't worry about paths)
    229217        //  so it's correct even if the criteria changes for these units
    230         var cmpFootprint = Engine.QueryInterface(this.entity, IID_Footprint);
     218        let cmpFootprint = Engine.QueryInterface(this.entity, IID_Footprint);
    231219        if (!cmpFootprint)
    232220            return result;  // Fail
    233221
    234222        // Get building's footprint
    235         var shape = cmpFootprint.GetShape();
    236         var halfSize = 0;
     223        let shape = cmpFootprint.GetShape();
     224        let halfSize = 0;
    237225        if (shape.type == "square")
    238226            halfSize = shape.depth/2;
    239227        else if (shape.type == "circle")
    240228            halfSize = shape.radius;
    241229
    242         var cmpTerrain = Engine.QueryInterface(SYSTEM_ENTITY, IID_Terrain);
    243         var cmpWaterManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_WaterManager);
     230        let cmpTerrain = Engine.QueryInterface(SYSTEM_ENTITY, IID_Terrain);
     231        let cmpWaterManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_WaterManager);
    244232        if (!cmpTerrain || !cmpWaterManager)
    245233            return result;  // Fail
    246234
    247         var ang = cmpPosition.GetRotation().y;
    248         var sz = halfSize * Math.sin(ang);
    249         var cz = halfSize * Math.cos(ang);
     235        let ang = cmpPosition.GetRotation().y;
     236        let sz = halfSize * Math.sin(ang);
     237        let cz = halfSize * Math.cos(ang);
    250238        if ((cmpWaterManager.GetWaterLevel(pos.x + sz, pos.y + cz) - cmpTerrain.GetGroundLevel(pos.x + sz, pos.y + cz)) < 1.0 // front
    251239            || (cmpWaterManager.GetWaterLevel(pos.x - sz, pos.y - cz) - cmpTerrain.GetGroundLevel(pos.x - sz, pos.y - cz)) > 2.0) // back
    252240        {
     
    258246    // Check distance restriction
    259247    if (this.template.Distance)
    260248    {
    261         var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
    262         var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
    263         var cat = this.template.Distance.FromClass;
     249        let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     250        let cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
     251        let cat = this.template.Distance.FromClass;
    264252
    265         var filter = function(id)
     253        let filter = function(id)
    266254        {
    267             var cmpIdentity = Engine.QueryInterface(id, IID_Identity);
     255            let cmpIdentity = Engine.QueryInterface(id, IID_Identity);
    268256            return cmpIdentity.GetClassesList().indexOf(cat) > -1;
    269257        };
    270258       
    271259        if (this.template.Distance.MinDistance)
    272260        {
    273             var dist = +this.template.Distance.MinDistance;
    274             var nearEnts = cmpRangeManager.ExecuteQuery(this.entity, 0, dist, [cmpPlayer.GetPlayerID()], IID_BuildRestrictions).filter(filter);
     261            let dist = +this.template.Distance.MinDistance;
     262            let nearEnts = cmpRangeManager.ExecuteQuery(this.entity, 0, dist, [cmpPlayer.GetPlayerID()], IID_BuildRestrictions).filter(filter);
    275263            if (nearEnts.length)
    276264            {
    277                 var result = markForPluralTranslation(
     265                let result = markForPluralTranslation(
    278266                    "%(name)s too close to a %(category)s, must be at least %(distance)s meter away",
    279267                    "%(name)s too close to a %(category)s, must be at least %(distance)s meters away",
    280268                    +this.template.Distance.MinDistance);
     
    292280        }
    293281        if (this.template.Distance.MaxDistance)
    294282        {
    295             var dist = +this.template.Distance.MaxDistance;
    296             var nearEnts = cmpRangeManager.ExecuteQuery(this.entity, 0, dist, [cmpPlayer.GetPlayerID()], IID_BuildRestrictions).filter(filter);
     283            let dist = +this.template.Distance.MaxDistance;
     284            let nearEnts = cmpRangeManager.ExecuteQuery(this.entity, 0, dist, [cmpPlayer.GetPlayerID()], IID_BuildRestrictions).filter(filter);
    297285            if (!nearEnts.length)
    298286            {
    299                 var result = markForPluralTranslation(
     287                let result = markForPluralTranslation(
    300288                    "%(name)s too far from a %(category)s, must be within %(distance)s meter",
    301289                    "%(name)s too far from a %(category)s, must be within %(distance)s meters",
    302290                    +this.template.Distance.MinDistance);