1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#include "Building.h"
#include "Game/GameHelper.h"
#include "Map/ReadMap.h"
#include "Sim/Units/BuildInfo.h"
#include "Sim/Units/UnitDef.h"
#include "Sim/Units/UnitLoader.h"
#include "System/myMath.h"
CR_BIND_DERIVED(CBuilding, CUnit, )
CR_REG_METADATA(CBuilding, )
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBuilding::CBuilding()
{
immobile = true;
}
void CBuilding::PreInit(const UnitLoadParams& params)
{
unitDef = params.unitDef;
blockHeightChanges = unitDef->levelGround;
CUnit::PreInit(params);
}
void CBuilding::PostInit(const CUnit* builder)
{
if (unitDef->cantBeTransported)
mass = CSolidObject::DEFAULT_MASS;
CUnit::PostInit(builder);
}
void CBuilding::ForcedMove(const float3& newPos) {
// heading might have changed if building was dropped from transport
// (always needs to be axis-aligned because yardmaps are not rotated)
heading = GetHeadingFromFacing(buildFacing);
UpdateDirVectors(false);
SetVelocity(ZeroVector);
// update quadfield, etc.
CUnit::ForcedMove(CGameHelper::Pos2BuildPos(BuildInfo(unitDef, newPos, buildFacing), true));
unitLoader->FlattenGround(this);
}
|