mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-17 13:53:57 -07:00
Some units would retain an undue HeightOffset after renaming while being on a TurretPoint. Fixes #8651 Fixes #2004
174 lines
4.6 KiB
JavaScript
174 lines
4.6 KiB
JavaScript
Engine.LoadHelperScript("Player.js");
|
|
Engine.LoadHelperScript("Sound.js");
|
|
Engine.LoadHelperScript("Transform.js");
|
|
Engine.LoadHelperScript("ValueModification.js");
|
|
Engine.LoadComponentScript("interfaces/ModifiersManager.js");
|
|
Engine.LoadComponentScript("interfaces/Capturable.js");
|
|
Engine.LoadComponentScript("interfaces/Foundation.js");
|
|
Engine.LoadComponentScript("interfaces/GarrisonHolder.js");
|
|
Engine.LoadComponentScript("interfaces/Guard.js");
|
|
Engine.LoadComponentScript("interfaces/Health.js");
|
|
Engine.LoadComponentScript("interfaces/Pack.js");
|
|
Engine.LoadComponentScript("interfaces/Player.js");
|
|
Engine.LoadComponentScript("interfaces/Promotion.js");
|
|
Engine.LoadComponentScript("interfaces/Repairable.js");
|
|
Engine.LoadComponentScript("interfaces/ResourceGatherer.js");
|
|
Engine.LoadComponentScript("interfaces/StatusEffectsReceiver.js");
|
|
Engine.LoadComponentScript("interfaces/TerritoryDecay.js");
|
|
Engine.LoadComponentScript("interfaces/Timer.js");
|
|
Engine.LoadComponentScript("interfaces/UnitAI.js");
|
|
Engine.LoadComponentScript("interfaces/Turretable.js");
|
|
Engine.LoadComponentScript("interfaces/TurretHolder.js");
|
|
Engine.LoadComponentScript("Pack.js");
|
|
Engine.RegisterGlobal("MT_EntityRenamed", "entityRenamed");
|
|
|
|
const ent = 170;
|
|
const newEnt = 171;
|
|
let timerActivated = false;
|
|
|
|
AddMock(ent, IID_Visual, {
|
|
"SelectAnimation": (name, once, speed) => name
|
|
});
|
|
|
|
AddMock(ent, IID_Ownership, {
|
|
"GetOwner": () => 1
|
|
});
|
|
|
|
AddMock(SYSTEM_ENTITY, IID_PlayerManager, {
|
|
"GetPlayerByID": id => 11
|
|
});
|
|
|
|
AddMock(ent, IID_Sound, {
|
|
"PlaySoundGroup": name => {}
|
|
});
|
|
|
|
AddMock(SYSTEM_ENTITY, IID_Timer, {
|
|
"CancelTimer": id => { timerActivated = false; return; },
|
|
"SetInterval": (entity, iid, funcname, time, repeattime, data) => { timerActivated = true; return 7; }
|
|
});
|
|
|
|
AddMock(ent, IID_Turretable, {
|
|
"IsTurreted": () => false,
|
|
"HolderID": () => 0,
|
|
"LeaveTurret": () => true
|
|
});
|
|
|
|
AddMock(newEnt, IID_Turretable, {
|
|
"IsTurreted": () => false,
|
|
"HolderID": () => 0,
|
|
"CanOccupy": (target) => true,
|
|
"LeaveTurret": () => true
|
|
});
|
|
|
|
Engine.AddEntity = function(template)
|
|
{
|
|
TS_ASSERT_EQUALS(template, "finalTemplate");
|
|
return newEnt;
|
|
};
|
|
|
|
// Test Packing
|
|
|
|
let template = {
|
|
"Entity": "finalTemplate",
|
|
"Time": "2000",
|
|
"State": "unpacked"
|
|
};
|
|
let cmpPack = ConstructComponent(ent, "Pack", template);
|
|
|
|
// Check internals
|
|
TS_ASSERT(!cmpPack.packed);
|
|
TS_ASSERT(!cmpPack.packing);
|
|
TS_ASSERT_EQUALS(cmpPack.elapsedTime, 0);
|
|
TS_ASSERT_EQUALS(cmpPack.timer, undefined);
|
|
|
|
TS_ASSERT(!cmpPack.IsPacked());
|
|
TS_ASSERT(!cmpPack.IsPacking());
|
|
TS_ASSERT_EQUALS(cmpPack.GetProgress(), 0);
|
|
|
|
// Pack
|
|
cmpPack.Pack();
|
|
TS_ASSERT_EQUALS(cmpPack.timer, 7);
|
|
TS_ASSERT(cmpPack.IsPacking());
|
|
|
|
// Listen to destroy message
|
|
cmpPack.OnDestroy();
|
|
TS_ASSERT(!cmpPack.timer);
|
|
TS_ASSERT(!timerActivated);
|
|
|
|
// Test UnPacking
|
|
|
|
template = {
|
|
"Entity": "finalTemplate",
|
|
"Time": "2000",
|
|
"State": "packed"
|
|
};
|
|
|
|
cmpPack = ConstructComponent(ent, "Pack", template);
|
|
|
|
// Check internals
|
|
TS_ASSERT(cmpPack.packed);
|
|
TS_ASSERT(!cmpPack.packing);
|
|
TS_ASSERT_EQUALS(cmpPack.elapsedTime, 0);
|
|
TS_ASSERT_EQUALS(cmpPack.timer, undefined);
|
|
|
|
TS_ASSERT(cmpPack.IsPacked());
|
|
TS_ASSERT(!cmpPack.IsPacking());
|
|
TS_ASSERT_EQUALS(cmpPack.GetProgress(), 0);
|
|
|
|
// Unpack
|
|
cmpPack.Unpack();
|
|
TS_ASSERT(cmpPack.IsPacking());
|
|
TS_ASSERT_EQUALS(cmpPack.timer, 7);
|
|
|
|
// Unpack progress
|
|
cmpPack.elapsedTime = 400;
|
|
cmpPack.PackProgress({}, 100);
|
|
|
|
TS_ASSERT(cmpPack.IsPacking());
|
|
TS_ASSERT_EQUALS(cmpPack.GetElapsedTime(), 400 + 100 + cmpPack.PACKING_INTERVAL);
|
|
TS_ASSERT_EQUALS(cmpPack.GetProgress(), (400 + 100 + cmpPack.PACKING_INTERVAL) / 2000);
|
|
|
|
// Try to Pack or Unpack while packing, nothing happen
|
|
cmpPack.elapsedTime = 400;
|
|
|
|
cmpPack.Unpack();
|
|
TS_ASSERT(cmpPack.IsPacking());
|
|
TS_ASSERT_EQUALS(cmpPack.GetElapsedTime(), 400);
|
|
TS_ASSERT_EQUALS(cmpPack.timer, 7);
|
|
TS_ASSERT(timerActivated);
|
|
|
|
cmpPack.Pack();
|
|
TS_ASSERT(cmpPack.IsPacking());
|
|
TS_ASSERT_EQUALS(cmpPack.GetElapsedTime(), 400);
|
|
TS_ASSERT_EQUALS(cmpPack.timer, 7);
|
|
TS_ASSERT(timerActivated);
|
|
|
|
// Cancel
|
|
cmpPack.CancelPack();
|
|
|
|
TS_ASSERT(!cmpPack.IsPacking());
|
|
TS_ASSERT_EQUALS(cmpPack.GetElapsedTime(), 0);
|
|
TS_ASSERT_EQUALS(cmpPack.GetProgress(), 0);
|
|
TS_ASSERT_EQUALS(cmpPack.timer, undefined);
|
|
TS_ASSERT(!timerActivated);
|
|
|
|
// Progress until completing
|
|
cmpPack.Unpack();
|
|
cmpPack.elapsedTime = 1800;
|
|
cmpPack.PackProgress({}, 100);
|
|
|
|
TS_ASSERT(cmpPack.IsPacking());
|
|
TS_ASSERT_EQUALS(cmpPack.GetElapsedTime(), 1800 + 100 + cmpPack.PACKING_INTERVAL);
|
|
// Cap progress at 100%
|
|
TS_ASSERT_EQUALS(cmpPack.GetProgress(), 1);
|
|
TS_ASSERT_EQUALS(cmpPack.timer, 7);
|
|
TS_ASSERT(timerActivated);
|
|
|
|
// Unpack completing
|
|
cmpPack.Unpack();
|
|
cmpPack.elapsedTime = 2100;
|
|
cmpPack.PackProgress({}, 100);
|
|
|
|
TS_ASSERT(!cmpPack.IsPacking());
|
|
TS_ASSERT(!cmpPack.timer);
|
|
TS_ASSERT(!timerActivated);
|