/
BirdLeon
/
ROBLOX2016
Обзор
Документация
Войти
/
BirdLeon
/
ROBLOX2016
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
App/include/v8kernel/Kernel.h
128 строк
4 KB
PatoFlamejanteTV
full source code
19 дек 2024, 19:11
19 дек 2024, 19:11
05db15d
Код
Авторство
О чём код?
#pragma once #include "V8Kernel/IStage.h" #include "V8Kernel/BodyPvSetter.h" #include "boost/scoped_ptr.hpp" #include "solver/Solver.h" namespace RBX { namespace Profiling { class CodeProfiler; } class Connector; class Body; class Point; class KernelData; class Kernel : public IStage, public BodyPvSetter { private: static int numKernels; int maxBodies; bool inStepCode; int numLastIterations; int numOfMaxIterations; float error; float maxError; bool validateBody(Body* b); bool validateConnector(Connector* connector) const; bool validateConnectorBody(Body* b) const; KernelData* kernelData; // Funny Physics void stepWorldFunnyPhysics(int worldStepId); void stepFunnyPhysics(const Vector3& move); void stepFunnyPhysicsBody(Body* b, const Vector3& move); Point* searchForDuplicatePoint(Point* tempPoint); void preStep(); void preStepThrottled(); void stepWorld( boost::uint64_t distDebugTime ); void stepWorldThrottled( boost::uint64_t debugTime ); bool usingPGSSolver; public: PGSSolver pgsSolver; Kernel(IStage* upstream); ~Kernel(); /////////////////////////////////////////// // IStage /*override*/ IStage::StageType getStageType() const {return IStage::KERNEL_STAGE;} /*override*/ Kernel* getKernel() {return this;} void step(bool throttling, int numThreads, boost::uint64_t debugTime); void insertBody(Body* b); void insertPoint(Point* p); void insertConnector(Connector* c); void removeBody(Body* b); void removePoint(Point* p); void removeConnector(Connector* c); // double up on points if same body, position.... // TODO: move this to the point class - reference counted pointer // Point* newPointLocal(class Body* _body, const Vector3& worldPos); Point* newPoint(class Body* _body, const Vector3& worldPos); void deletePoint(class Point* point); //////////////////////////////////////////////////////// // // Debugging Stuff // void report(); // system energy to log file static void reportMemorySizes(); float connectorSpringEnergy() const; float bodyPotentialEnergy() const; float bodyKineticEnergy() const; float totalEnergy() const { return connectorSpringEnergy() + bodyPotentialEnergy() + bodyKineticEnergy(); } float totalKineticEnergy() const { return connectorSpringEnergy() + bodyKineticEnergy(); } int numFreeFallBodies() const; int numRealTimeBodies() const; int numJointBodies() const; int numContactBodies() const; int numBodies() const {return numFreeFallBodies() + numRealTimeBodies() + numJointBodies() + numContactBodies();} int numBodiesMax() const {return maxBodies;} int numLeafBodies() const; int numPoints() const; int numConnectors() const; int numHumanoidConnectors() const; int numRealTimeConnectors() const; int numSecondPassConnectors() const; int numJointConnectors() const; int numBuoyancyConnectors() const; int numContactConnectors() const; inline int numIterations() const {return numLastIterations;} inline int numMaxIterations() const {return numOfMaxIterations;} inline float getSolverError() const {return error;} inline float getMaxSolverError() const {return maxError;} int fakeDeceptiveSolverIterations() const; int fakeDeceptiveMatrixSize() const; /////////////////////////////////////////// // Profiler boost::scoped_ptr<Profiling::CodeProfiler> profilingKernelBodies; boost::scoped_ptr<Profiling::CodeProfiler> profilingKernelConnectors; void setUsingPGSSolver(bool pgsOn) { usingPGSSolver = pgsOn; } bool getUsingPGSSolver() const { return usingPGSSolver; } void dumpLog( bool enable ) { pgsSolver.dumpLog( enable ); } }; } // namespace