Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/helpers/Transform.js
Show First 20 Lines • Show All 52 Lines • ▼ Show 20 Lines | if (cmpHealth && cmpNewHealth) | ||||
cmpNewHealth.SetHitpoints(cmpNewHealth.GetMaxHitpoints() * healthLevel); | cmpNewHealth.SetHitpoints(cmpNewHealth.GetMaxHitpoints() * healthLevel); | ||||
} | } | ||||
let cmpBuilderList = QueryBuilderListInterface(oldEnt); | let cmpBuilderList = QueryBuilderListInterface(oldEnt); | ||||
let cmpNewBuilderList = QueryBuilderListInterface(newEnt); | let cmpNewBuilderList = QueryBuilderListInterface(newEnt); | ||||
if (cmpBuilderList && cmpNewBuilderList) | if (cmpBuilderList && cmpNewBuilderList) | ||||
cmpNewBuilderList.AddBuilders(cmpBuilderList.GetBuilders()); | cmpNewBuilderList.AddBuilders(cmpBuilderList.GetBuilders()); | ||||
var cmpUnitAI = Engine.QueryInterface(oldEnt, IID_UnitAI); | |||||
var cmpNewUnitAI = Engine.QueryInterface(newEnt, IID_UnitAI); | |||||
if (cmpUnitAI && cmpNewUnitAI) | |||||
{ | |||||
let pos = cmpUnitAI.GetHeldPosition(); | |||||
if (pos) | |||||
cmpNewUnitAI.SetHeldPosition(pos.x, pos.z); | |||||
if (cmpUnitAI.GetStanceName()) | |||||
cmpNewUnitAI.SwitchToStance(cmpUnitAI.GetStanceName()); | |||||
if (cmpUnitAI.GetGarrisonHolder() != INVALID_ENTITY) | |||||
cmpNewUnitAI.SetGarrisoned(); | |||||
cmpNewUnitAI.AddOrders(cmpUnitAI.GetOrders()); | |||||
if (cmpUnitAI.IsGuardOf()) | |||||
{ | |||||
let guarded = cmpUnitAI.IsGuardOf(); | |||||
let cmpGuard = Engine.QueryInterface(guarded, IID_Guard); | |||||
if (cmpGuard) | |||||
{ | |||||
cmpGuard.RenameGuard(oldEnt, newEnt); | |||||
cmpNewUnitAI.SetGuardOf(guarded); | |||||
} | |||||
} | |||||
} | |||||
let cmpPromotion = Engine.QueryInterface(oldEnt, IID_Promotion); | let cmpPromotion = Engine.QueryInterface(oldEnt, IID_Promotion); | ||||
let cmpNewPromotion = Engine.QueryInterface(newEnt, IID_Promotion); | let cmpNewPromotion = Engine.QueryInterface(newEnt, IID_Promotion); | ||||
if (cmpPromotion && cmpNewPromotion) | if (cmpPromotion && cmpNewPromotion) | ||||
cmpNewPromotion.IncreaseXp(cmpPromotion.GetCurrentXp()); | cmpNewPromotion.IncreaseXp(cmpPromotion.GetCurrentXp()); | ||||
let cmpResGatherer = Engine.QueryInterface(oldEnt, IID_ResourceGatherer); | let cmpResGatherer = Engine.QueryInterface(oldEnt, IID_ResourceGatherer); | ||||
let cmpNewResGatherer = Engine.QueryInterface(newEnt, IID_ResourceGatherer); | let cmpNewResGatherer = Engine.QueryInterface(newEnt, IID_ResourceGatherer); | ||||
if (cmpResGatherer && cmpNewResGatherer) | if (cmpResGatherer && cmpNewResGatherer) | ||||
{ | { | ||||
let carriedResources = cmpResGatherer.GetCarryingStatus(); | let carriedResources = cmpResGatherer.GetCarryingStatus(); | ||||
cmpNewResGatherer.GiveResources(carriedResources); | cmpNewResGatherer.GiveResources(carriedResources); | ||||
cmpNewResGatherer.SetLastCarriedType(cmpResGatherer.GetLastCarriedType()); | cmpNewResGatherer.SetLastCarriedType(cmpResGatherer.GetLastCarriedType()); | ||||
} | } | ||||
// Maintain the list of guards | // Maintain the list of guards | ||||
let cmpGuard = Engine.QueryInterface(oldEnt, IID_Guard); | let cmpGuard = Engine.QueryInterface(oldEnt, IID_Guard); | ||||
let cmpNewGuard = Engine.QueryInterface(newEnt, IID_Guard); | let cmpNewGuard = Engine.QueryInterface(newEnt, IID_Guard); | ||||
if (cmpGuard && cmpNewGuard) | if (cmpGuard && cmpNewGuard) | ||||
{ | { | ||||
let entities = cmpGuard.GetEntities(); | let entities = cmpGuard.GetEntities(); | ||||
if (entities.length) | if (entities.length) | ||||
{ | { | ||||
Show All 20 Lines | for (let status in activeStatus) | ||||
cmpNewStatusEffectsReceiver.ApplyStatus({ [status]: newStatus }, newStatus.source.entity, newStatus.source.owner); | cmpNewStatusEffectsReceiver.ApplyStatus({ [status]: newStatus }, newStatus.source.entity, newStatus.source.owner); | ||||
} | } | ||||
} | } | ||||
TransferGarrisonedUnits(oldEnt, newEnt); | TransferGarrisonedUnits(oldEnt, newEnt); | ||||
Engine.PostMessage(oldEnt, MT_EntityRenamed, { "entity": oldEnt, "newentity": newEnt }); | Engine.PostMessage(oldEnt, MT_EntityRenamed, { "entity": oldEnt, "newentity": newEnt }); | ||||
// UnitAI generally needs other components to be properly initialised. | |||||
let cmpUnitAI = Engine.QueryInterface(oldEnt, IID_UnitAI); | |||||
let cmpNewUnitAI = Engine.QueryInterface(newEnt, IID_UnitAI); | |||||
if (cmpUnitAI && cmpNewUnitAI) | |||||
{ | |||||
let pos = cmpUnitAI.GetHeldPosition(); | |||||
if (pos) | |||||
cmpNewUnitAI.SetHeldPosition(pos.x, pos.z); | |||||
cmpNewUnitAI.AddOrders(cmpUnitAI.GetOrders()); | |||||
let guarded = cmpUnitAI.IsGuardOf(); | |||||
if (guarded) | |||||
{ | |||||
let cmpGuarded = Engine.QueryInterface(guarded, IID_Guard); | |||||
if (cmpGuarded) | |||||
{ | |||||
cmpGuarded.RenameGuard(oldEnt, newEnt); | |||||
cmpNewUnitAI.SetGuardOf(guarded); | |||||
} | |||||
} | |||||
} | |||||
if (cmpPosition && cmpPosition.IsInWorld()) | if (cmpPosition && cmpPosition.IsInWorld()) | ||||
cmpPosition.MoveOutOfWorld(); | cmpPosition.MoveOutOfWorld(); | ||||
Engine.DestroyEntity(oldEnt); | Engine.DestroyEntity(oldEnt); | ||||
return newEnt; | return newEnt; | ||||
} | } | ||||
function CopyControlGroups(oldEnt, newEnt) | function CopyControlGroups(oldEnt, newEnt) | ||||
▲ Show 20 Lines • Show All 123 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator