Files
tech5/source/engine/gamelib/effectphysics/effectphysicsboxfountain.cpp
T

55 lines
1.6 KiB
C++

#include "gamelib/effectphysics/effectphysicsboxfountain.h"
#include "gamelib/physics/tracemodelcache.h"
#include "idlib/geometry/tracemodel.h"
// Renderer ownership is an engine boundary outside GameLib. The renderer port
// provides this operation when idRenderModel is activated; keeping it external
// avoids fabricating a partial render-model layout here.
void GameLib_MarkRenderModelForDeletion(idRenderModelManyBoxes* model);
idEffectPhysicsBoxFountain::idEffectPhysicsBoxFountain()
: broadPhase()
, properties()
, rigidBodies(0)
, manyBoxes(nullptr)
, lastFireTime(0)
, currentFireRigidBody(0)
, startOrigin()
, spawnOrigin()
, spawnObject()
, random() {
startOrigin.Zero();
spawnOrigin.Zero();
}
idEffectPhysicsBoxFountain::~idEffectPhysicsBoxFountain() {
if (manyBoxes != nullptr) {
GameLib_MarkRenderModelForDeletion(manyBoxes);
}
spawnObject.overlap.Clear();
rigidBodies.Clear();
}
void idEffectPhysicsBoxFountain::Init(
idClip* const clip,
idTraceModelCache* const traceModelCache,
const int entityNumber) {
broadPhase.Init(clip, traceModelCache);
idBounds bounds;
bounds[0].Set(-16.0f, -16.0f, -16.0f);
bounds[1].Set(16.0f, 16.0f, 16.0f);
idTraceModel traceModel;
traceModel.SetupBox(bounds);
const int traceModelIndex = traceModelCache->AllocTraceModel(
traceModel, nullptr);
properties.Setup(&broadPhase, traceModelIndex, 10.0f);
startOrigin.Set(0.0f, 0.0f, 64.0f);
spawnOrigin.Set(0.0f, 0.0f, 160.0f);
broadPhase.AddObject(
&spawnObject, spawnOrigin, idMat3(1.0f), &bounds);
spawnObject.entityNum = entityNumber;
}