Files
2025-10-28 14:05:46 -04:00

84 lines
1.4 KiB
C++

/* Copyright 2003-2006 ROBLOX Corporation, All Rights Reserved */
#pragma once
#include "V8Kernel/KernelIndex.h"
#include "Util/G3DCore.h"
namespace RBX {
class Body;
class Point
: public KernelIndex
{
friend class KernelData;
friend class Kernel;
private:
int& getKernelIndex() {return kernelIndex;}
int numOwners;
protected:
Body* body;
// constant
Vector3 localPos;
// auxillary variables, computed on every frame
Vector3 worldPos;
// accumulated quantities;
Vector3 force;
// This is private - only created by the kernel
Point(Body* _body = NULL);
virtual ~Point()
{}
public: // all points from same allocator, size of AttachPoint
static bool sameBodyAndOffset(const Point& p0, const Point& p1) {
return ((p0.body == p1.body) && (p0.localPos == p1.localPos));
}
//////////// called by kernel every step
//
// Updates World Position, Clears Accumulator
void step();
// force accumulation
void accumulateForce(const Vector3& _force) {
force += _force;
}
// corresponds to "for each Point, accumulate forces to Body"
void forceToBody();
void setLocalPos(const Vector3& _localPos);
void setWorldPos(const Vector3& _worldPos);
void setBody(Body* _body) {
body = _body;
}
//////////// inquiry
Body* getBody() {
return body;
}
const Vector3& getWorldPos() {
return worldPos;
}
};
} // namespace RBX