Skip to content

Commit 7eacb84

Browse files
committed
OOBState: Match grab_state_type functions and vtable
1 parent b9f3196 commit 7eacb84

File tree

2 files changed

+216
-21
lines changed

2 files changed

+216
-21
lines changed

src/SB/Game/zEntPlayerOOBState.cpp

Lines changed: 211 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ namespace oob_state
474474
{
475475
shared.fade_alpha = 1.0f;
476476
}
477-
477+
478478
if (this->fade_time > 0.0f)
479479
{
480480
return SS_FADE_IN;
@@ -608,7 +608,7 @@ namespace oob_state
608608
{
609609
shared.vel = 0.0f;
610610
shared.loc = fixed.in_loc;
611-
shared.accel = 0.0f;
611+
shared.accel = 0.0f;
612612
}
613613
else
614614
{
@@ -637,8 +637,142 @@ namespace oob_state
637637
this->updatess[9] = &supdate_fade_out;
638638
}
639639

640-
oob_state::grab_state_type::substate_enum oob_state::grab_state_type::update_stopping(xScene& scene,
641-
F32& dt)
640+
grab_state_type::tutorial_callback::tutorial_callback(grab_state_type& owner) : owner(owner)
641+
{
642+
}
643+
644+
grab_state_type::substate_enum grab_state_type::supdate_fade_out(grab_state_type& gst,
645+
xScene& scene, F32& dt)
646+
{
647+
return gst.update_fade_out(scene, dt);
648+
}
649+
650+
grab_state_type::substate_enum grab_state_type::update_fade_out(xScene& scene, F32& dt)
651+
{
652+
this->fade_time -= dt;
653+
shared.fade_alpha = this->fade_time / fixed.grab.fade_time;
654+
655+
if (shared.fade_alpha < 0.0f)
656+
{
657+
shared.fade_alpha = 0.0f;
658+
}
659+
660+
if (this->fade_time > 0.0f)
661+
{
662+
return SS_FADE_OUT;
663+
}
664+
665+
dt += this->fade_time;
666+
return SS_INVALID;
667+
}
668+
669+
grab_state_type::substate_enum
670+
grab_state_type::supdate_start_fade_out(grab_state_type& gst, xScene& scene, F32& dt)
671+
{
672+
return gst.update_start_fade_out(scene, dt);
673+
}
674+
675+
grab_state_type::substate_enum grab_state_type::update_start_fade_out(xScene& scene,
676+
F32& dt)
677+
{
678+
this->fade_start_time -= dt;
679+
680+
if (this->fade_start_time > 0.0f)
681+
{
682+
return SS_START_FADE_OUT;
683+
}
684+
685+
dt += this->fade_start_time;
686+
return SS_FADE_OUT;
687+
}
688+
689+
grab_state_type::substate_enum grab_state_type::supdate_moving_out(grab_state_type& gst,
690+
xScene& scene, F32& dt)
691+
{
692+
return gst.update_moving_out(scene, dt);
693+
}
694+
695+
grab_state_type::substate_enum grab_state_type::update_moving_out(xScene& scene, F32& dt)
696+
{
697+
move_hand(dt);
698+
699+
if ((shared.loc - fixed.out_loc).dot(shared.dir) >= 0.0f)
700+
{
701+
return SS_MOVING_OUT;
702+
}
703+
704+
dt = 0.0f;
705+
return SS_INVALID;
706+
}
707+
708+
grab_state_type::substate_enum grab_state_type::supdate_starting(grab_state_type& gst,
709+
xScene& scene, F32& dt)
710+
{
711+
return gst.update_starting(scene, dt);
712+
}
713+
714+
grab_state_type::substate_enum grab_state_type::update_starting(xScene& scene, F32& dt)
715+
{
716+
move_hand(dt);
717+
718+
if (shared.vel > -fixed.grab.out_vel)
719+
{
720+
return SS_STARTING;
721+
}
722+
723+
shared.vel = -fixed.grab.out_vel;
724+
shared.accel = 0.0f;
725+
return SS_MOVING_OUT;
726+
}
727+
728+
grab_state_type::substate_enum grab_state_type::supdate_tutorial(grab_state_type& gst,
729+
xScene& scene, F32& dt)
730+
{
731+
return gst.update_tutorial(scene, dt);
732+
}
733+
734+
grab_state_type::substate_enum grab_state_type::update_tutorial(xScene& scene, F32& dt)
735+
{
736+
this->delay -= dt;
737+
if (!this->finished_tutorial || this->delay > 0.0f)
738+
{
739+
return SS_TUTORIAL;
740+
}
741+
742+
dt = 0.0f;
743+
shared.accel =
744+
(-fixed.grab.out_vel * fixed.grab.out_vel) / (2.0f * fixed.grab.out_start_dist);
745+
return SS_STARTING;
746+
}
747+
748+
grab_state_type::substate_enum grab_state_type::supdate_stopped(grab_state_type& gst,
749+
xScene& scene, F32& dt)
750+
{
751+
return gst.update_stopped(scene, dt);
752+
}
753+
754+
grab_state_type::substate_enum grab_state_type::update_stopped(xScene& scene, F32& dt)
755+
{
756+
this->delay -= dt;
757+
758+
if (this->delay > 0.0f)
759+
{
760+
return SS_STOPPED;
761+
}
762+
763+
dt += this->delay;
764+
shared.accel =
765+
(-fixed.grab.out_vel * fixed.grab.out_vel) / (2.0f * fixed.grab.out_start_dist);
766+
return SS_STARTING;
767+
}
768+
769+
grab_state_type::substate_enum grab_state_type::supdate_stopping(grab_state_type& gst,
770+
xScene& scene, F32& dt)
771+
{
772+
return gst.update_stopping(scene, dt);
773+
}
774+
775+
grab_state_type::substate_enum grab_state_type::update_stopping(xScene& scene, F32& dt)
642776
{
643777
move_hand(dt);
644778

@@ -652,7 +786,7 @@ namespace oob_state
652786
shared.vel = 0.0f;
653787
shared.accel = 0.0f;
654788

655-
this->fade_start_time = fixed.grab.out_wait_time;
789+
this->delay = fixed.grab.out_wait_time;
656790

657791
if (assume_player_is_stupid())
658792
{
@@ -663,18 +797,69 @@ namespace oob_state
663797
return SS_STOPPED;
664798
}
665799

666-
grab_state_type::substate_enum oob_state::grab_state_type::update_reorient(xScene&, F32&)
800+
grab_state_type::substate_enum grab_state_type::supdate_moving_in(grab_state_type& gst,
801+
xScene& scene, F32& dt)
667802
{
668-
return SS_REORIENT;
669-
};
803+
return gst.update_moving_in(scene, dt);
804+
}
670805

671-
grab_state_type::tutorial_callback::tutorial_callback(grab_state_type& owner) : owner(owner)
806+
grab_state_type::substate_enum grab_state_type::update_moving_in(xScene& scene, F32& dt)
807+
{
808+
move_hand(dt);
809+
810+
xVec2 in_out_path = fixed.in_loc - fixed.out_loc;
811+
xVec2 norm = in_out_path.normal();
812+
813+
F32 projection = norm.dot(fixed.in_loc - shared.loc);
814+
if (projection > fixed.grab.in_stop_dist)
815+
{
816+
return SS_MOVING_IN;
817+
}
818+
else if (projection <= 0.0f)
819+
{
820+
shared.vel = 0.0f;
821+
shared.loc = fixed.in_loc;
822+
shared.accel = 0.0f;
823+
}
824+
else
825+
{
826+
shared.accel = (-shared.vel * shared.vel) / (2.0f * projection);
827+
}
828+
829+
return SS_STOPPING;
830+
}
831+
832+
grab_state_type::substate_enum grab_state_type::supdate_begin_wait(grab_state_type& gst,
833+
xScene& scene, F32& dt)
672834
{
835+
return gst.update_begin_wait(scene, dt);
673836
}
674-
} // namespace
675-
} // namespace oob_state
676837

838+
grab_state_type::substate_enum grab_state_type::update_begin_wait(xScene& scene, F32& dt)
839+
{
840+
this->delay -= dt;
841+
if (this->delay > 0.0f)
842+
{
843+
return SS_BEGIN_WAIT;
844+
}
677845

846+
shared.render_hand = true;
847+
return SS_MOVING_IN;
848+
}
849+
850+
grab_state_type::substate_enum grab_state_type::supdate_reorient(grab_state_type& gst,
851+
xScene& scene, F32& dt)
852+
{
853+
return gst.update_reorient(scene, dt);
854+
}
855+
856+
grab_state_type::substate_enum oob_state::grab_state_type::update_reorient(xScene& scene,
857+
F32& dt)
858+
{
859+
return SS_BEGIN_WAIT;
860+
};
861+
} // namespace
862+
} // namespace oob_state
678863

679864
float oob_state::oob_timer()
680865
{
@@ -715,10 +900,6 @@ void oob_state::state_type::stop() {
715900

716901
};
717902

718-
void oob_state::grab_state_type::stop() {
719-
720-
};
721-
722903
bool oob_state::IsPlayerInControl()
723904
{
724905
return oob_state::shared.control == 0;
@@ -728,22 +909,33 @@ namespace oob_state
728909
{
729910
namespace
730911
{
731-
void drop_state_type::start()
912+
void grab_state_type::start()
732913
{
914+
}
733915

916+
void grab_state_type::stop()
917+
{
734918
}
735919

736-
void drop_state_type::stop()
920+
state_enum grab_state_type::update(xScene& scene, F32& dt)
737921
{
922+
return STATE_DROP;
923+
}
738924

925+
void drop_state_type::start()
926+
{
927+
}
928+
929+
void drop_state_type::stop()
930+
{
739931
}
740932

741933
state_enum drop_state_type::update(xScene& scene, F32& dt)
742934
{
743935
return STATE_DROP;
744936
}
745-
}
746-
}
937+
} // namespace
938+
} // namespace oob_state
747939

748940
WEAK F32 xVec2::dot(const xVec2& b) const
749941
{

src/SB/Game/zEntPlayerOOBState.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,19 +108,22 @@ namespace oob_state
108108
substate_enum (*updatess[10])(grab_state_type&, xScene&, float&);
109109

110110
grab_state_type();
111-
void start();
112-
void stop();
111+
virtual void start();
112+
virtual void stop();
113+
virtual state_enum update(xScene& scene, F32& dt);
113114

114115
static substate_enum supdate_reorient(grab_state_type& gst, xScene& scene, F32& dt);
115116
substate_enum update_reorient(xScene&, F32&);
116117
static substate_enum supdate_begin_wait(grab_state_type& gst, xScene& scene, F32& dt);
118+
substate_enum update_begin_wait(xScene&, F32&);
117119
static substate_enum supdate_moving_in(grab_state_type& gst, xScene& scene, F32& dt);
118120
substate_enum update_moving_in(xScene& scene, F32& dt);
119121
static substate_enum supdate_stopping(grab_state_type& gst, xScene& scene, F32& dt);
120122
substate_enum update_stopping(xScene& scene, F32& dt);
121123
static substate_enum supdate_stopped(grab_state_type& gst, xScene& scene, F32& dt);
122124
substate_enum update_stopped(xScene& scene, F32& dt);
123125
static substate_enum supdate_tutorial(grab_state_type& gst, xScene& scene, F32& dt);
126+
substate_enum update_tutorial(xScene& scene, F32& dt);
124127
static substate_enum supdate_starting(grab_state_type& gst, xScene& scene, F32& dt);
125128
substate_enum update_starting(xScene& scene, F32& dt);
126129
static substate_enum supdate_moving_out(grab_state_type& gst, xScene& scene, F32& dt);

0 commit comments

Comments
 (0)