add linkedFields data to portal.options.details.portalV2 - it's expected in a few places

(it shouldn't really be stored there - as other than this the data here mirrors precisely that returned from the server)
fix #519
This commit is contained in:
Jon Atkins 2013-09-02 02:08:39 +01:00
parent 7792c80274
commit 2565478c1f

View File

@ -77,9 +77,6 @@ window.Render.prototype.processDeletedGameEntityGuids = function(deleted) {
if ( !(guid in this.deletedGuid) ) {
this.deletedGuid[guid] = true; // flag this guid as having being processed
// the original code this is based on checked to see if the guid was for a field - and if so, removed it from the linkedFields of the relevant portals
// given that the server will also return updated portals - and the linkedFields data is not actively used in IITC, this seems pointless.
this.deleteEntity(guid);
}
@ -168,9 +165,28 @@ window.Render.prototype.deleteLinkEntity = function(guid) {
}
}
window.Render.prototype.deleteFieldEntity = function(guid) {
if (guid in window.fields) {
var f = window.fields[guid];
var fd = f.options.details;
var deletePortalLinkedField = function(pguid) {
if (pguid in window.portals) {
var pd = window.portals[pguid].options.details;
if (pd.portalV2.linkedFields) {
var i = pd.portalV2.linkedFields.indexOf(guid);
if (i >= 0) {
pd.portalV2.linkedFields.splice(i,1);
}
}
}
}
deletePortalLinkedField (fd.capturedRegion.vertexA.guid);
deletePortalLinkedField (fd.capturedRegion.vertexB.guid);
deletePortalLinkedField (fd.capturedRegion.vertexC.guid);
fieldsLayer.removeLayer(f);
delete window.fields[guid];
}
@ -235,6 +251,22 @@ window.Render.prototype.createPortalEntity = function(ent) {
details: ent[2]
};
// Javascript uses references for objects. For now, at least, we need to modify the data within
// the options.details.portalV2 (to add in linkedFields). To avoid tainting the original data (which may be cached)
// we'll shallow-copy these items
dataOptions.details = $.extend({}, dataOptions.details);
dataOptions.details.portalV2 = $.extend({}, dataOptions.details.portalV2);
// create a linkedFields entry and add it to details - various bits of code assumes it will exist
for (var fguid in window.fields) {
var fd = window.fields[fguid].options.details;
if ( fd.capturedRegion.vertexA.guid == ent[0] || fd.capturedRegion.vertexB.guid == ent[0] || fd.capturedRegion.vertexC.guid == ent[0]) {
if (!dataOptions.details.portalV2.linkedFields) dataOptions.details.portalV2.linkedFields = [];
dataOptions.details.portalV2.linkedFields.push(fguid);
}
}
var marker = createMarker(latlng, dataOptions);
marker.on('click', function() { window.renderPortalDetails(ent[0]); });
@ -313,6 +345,20 @@ window.Render.prototype.createFieldEntity = function(ent) {
});
// now fill in any references portals linkedFields data
var addPortalLinkedField = function(pguid) {
if (pguid in window.portals) {
var pd = window.portals[pguid].options.details;
if (!pd.portalV2.linkedFields) pd.portalV2.linkedFields = [];
if (pd.portalV2.linkedFields.indexOf(pguid) <0 ) {
pd.portalV2.linkedFields.push (ent[0]);
}
}
}
addPortalLinkedField(ent[2].capturedRegion.vertexA.guid);
addPortalLinkedField(ent[2].capturedRegion.vertexB.guid);
addPortalLinkedField(ent[2].capturedRegion.vertexC.guid);
window.fields[ent[0]] = poly;
// TODO? postpone adding to the layer??