55 lines
1.6 KiB
C++
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;
|
|
}
|