Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/simulation/helpers/Transform.js
Show First 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | function ChangeEntityTemplate(oldEnt, newTemplate) | ||||
var cmpNewUnitAI = Engine.QueryInterface(newEnt, IID_UnitAI); | var cmpNewUnitAI = Engine.QueryInterface(newEnt, IID_UnitAI); | ||||
if (cmpUnitAI && cmpNewUnitAI) | if (cmpUnitAI && cmpNewUnitAI) | ||||
{ | { | ||||
let pos = cmpUnitAI.GetHeldPosition(); | let pos = cmpUnitAI.GetHeldPosition(); | ||||
if (pos) | if (pos) | ||||
cmpNewUnitAI.SetHeldPosition(pos.x, pos.z); | cmpNewUnitAI.SetHeldPosition(pos.x, pos.z); | ||||
if (cmpUnitAI.GetStanceName()) | if (cmpUnitAI.GetStanceName()) | ||||
cmpNewUnitAI.SwitchToStance(cmpUnitAI.GetStanceName()); | cmpNewUnitAI.SwitchToStance(cmpUnitAI.GetStanceName()); | ||||
if (cmpUnitAI.IsGarrisoned()) | |||||
cmpNewUnitAI.SetGarrisoned(); | |||||
cmpNewUnitAI.AddOrders(cmpUnitAI.GetOrders()); | cmpNewUnitAI.AddOrders(cmpUnitAI.GetOrders()); | ||||
if (cmpUnitAI.IsGuardOf()) | if (cmpUnitAI.IsGuardOf()) | ||||
{ | { | ||||
let guarded = cmpUnitAI.IsGuardOf(); | let guarded = cmpUnitAI.IsGuardOf(); | ||||
let cmpGuard = Engine.QueryInterface(guarded, IID_Guard); | let cmpGuard = Engine.QueryInterface(guarded, IID_Guard); | ||||
if (cmpGuard) | if (cmpGuard) | ||||
{ | { | ||||
cmpGuard.RenameGuard(oldEnt, newEnt); | cmpGuard.RenameGuard(oldEnt, newEnt); | ||||
cmpNewUnitAI.SetGuardOf(guarded); | cmpNewUnitAI.SetGuardOf(guarded); | ||||
} | } | ||||
} | } | ||||
if (cmpUnitAI.IsGarrisoned()) | |||||
cmpNewUnitAI.SetGarrisoned(); | |||||
} | } | ||||
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); | ||||
▲ Show 20 Lines • Show All 159 Lines • ▼ Show 20 Lines | function TransferGarrisonedUnits(oldEnt, newEnt) | ||||
let cmpNewGarrison = Engine.QueryInterface(newEnt, IID_GarrisonHolder); | let cmpNewGarrison = Engine.QueryInterface(newEnt, IID_GarrisonHolder); | ||||
let entities = cmpOldGarrison.GetEntities().slice(); | let entities = cmpOldGarrison.GetEntities().slice(); | ||||
for (let ent of entities) | for (let ent of entities) | ||||
{ | { | ||||
cmpOldGarrison.Eject(ent); | cmpOldGarrison.Eject(ent); | ||||
if (!cmpNewGarrison) | if (!cmpNewGarrison) | ||||
continue; | continue; | ||||
let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); | let cmpGarrisonable = Engine.QueryInterface(ent, IID_Garrisonable); | ||||
if (!cmpUnitAI) | if (!cmpGarrisonable) | ||||
continue; | continue; | ||||
cmpUnitAI.Autogarrison(newEnt); | cmpGarrisonable.Autogarrison(newEnt); | ||||
cmpNewGarrison.Garrison(ent); | |||||
} | } | ||||
} | } | ||||
Engine.RegisterGlobal("ChangeEntityTemplate", ChangeEntityTemplate); | Engine.RegisterGlobal("ChangeEntityTemplate", ChangeEntityTemplate); | ||||
Engine.RegisterGlobal("ObstructionsBlockingTemplateChange", ObstructionsBlockingTemplateChange); | Engine.RegisterGlobal("ObstructionsBlockingTemplateChange", ObstructionsBlockingTemplateChange); |
Wildfire Games · Phabricator