1#include "Game/MapObj/SpinDriverOperateRing.hpp"
3SpinDriverOperateRing::SpinDriverOperateRing(
const char *pName) :
LiveActor(pName),
4 _8C(0, 0, 0), _98(0, 0, 0), _A4(0, 0, 0), mAccelerate(0, 0, 0), mDirection(0, 0, 0)
17 MR::invalidateClipping(
this);
20void SpinDriverOperateRing::control() {
24void SpinDriverOperateRing::setRadiusRate(f32 rate) {
25 mRadiusRate = MR::normalize(rate, 0.0f, 1.0f);
28void SpinDriverOperateRing::reset() {
29 resetVelocityAndTrans();
32void SpinDriverOperateRing::update(
const TVec3f &a1,
const TVec3f &a2) {
36 if (mRadiusRate <= 0.0f) {
37 resetVelocityAndTrans();
41 updateControlPoint(a2);
42 addAccelToOperatePlane(a2);
44 addAccelOperate(&stack_8, a2);
47 updateDirection(stack_8);
53void SpinDriverOperateRing::updateDirection(
const TVec3f &rVec) {
55 TVec3f direction(mDirection);
56 direction.scale(0.89999998f);
57 TVec3f stack_14(rVec);
59 TVec3f stack_20(stack_14);
60 stack_20 += direction;
61 mDirection = stack_20;
65void SpinDriverOperateRing::resetVelocityAndTrans() {
73void SpinDriverOperateRing::addAccelToOperatePlane(
const TVec3f &rVec) {
74 f32 dot = -rVec.dot(_A4);
76 scalar.scale(0.050000001f * dot);
77 mAccelerate += scalar;
80void SpinDriverOperateRing::addAccelToCenter() {
81 f32 norm = MR::normalize(_DC, 0.1f, 1.0f);
83 if (norm > 0.000099999997f) {
84 f32 scalar = ((0.5f * norm) / _D8);
91void SpinDriverOperateRing::attenuateVelocity() {
92 mAccelerate.x *= 0.94f;
93 mAccelerate.y *= 0.94f;
94 mAccelerate.z *= 0.94f;
97SpinDriverOperateRing::~SpinDriverOperateRing() {
101namespace NrvSpinDriverOperateRing {
102 INIT_NERVE(SpinDriverOperateRingNrvWait);
104 void SpinDriverOperateRingNrvWait::execute(
Spine *)
const {
The basis of a drawable actor that can contain states (see: Nerve)
virtual void init(const JMapInfoIter &)
Intializes the NameObj and can set various settings and construct necessary classes.