Skip to content

Commit

Permalink
Document Actor "OfferTalk" (#1567)
Browse files Browse the repository at this point in the history
* OfferTalk

* rm comment

* exch to offer in comment

* reword again

* Partial PR Review

* Actor_AcknowledgeTalking

* Actor_TalkOfferAccepted

* PR Review

* rm part of comment

* rm comment
  • Loading branch information
engineer124 authored Nov 19, 2023
1 parent c11ce9c commit 3d1ee33
Show file tree
Hide file tree
Showing 74 changed files with 297 additions and 266 deletions.
10 changes: 5 additions & 5 deletions include/functions.h
Original file line number Diff line number Diff line change
Expand Up @@ -395,11 +395,11 @@ PosRot* Actor_GetFocus(PosRot* dest, Actor* actor);
PosRot* Actor_GetWorld(PosRot* dest, Actor* actor);
PosRot* Actor_GetWorldPosShapeRot(PosRot* arg0, Actor* actor);
s32 func_8002F0C8(Actor* actor, Player* player, s32 flag);
u32 Actor_ProcessTalkRequest(Actor* actor, PlayState* play);
s32 func_8002F1C4(Actor* actor, PlayState* play, f32 arg2, f32 arg3, u32 exchangeItemId);
s32 func_8002F298(Actor* actor, PlayState* play, f32 arg2, u32 exchangeItemId);
s32 func_8002F2CC(Actor* actor, PlayState* play, f32 arg2);
s32 func_8002F2F4(Actor* actor, PlayState* play);
s32 Actor_TalkOfferAccepted(Actor* actor, PlayState* play);
s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, u32 exchangeItemId);
s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, PlayState* play, f32 radius, u32 exchangeItemId);
s32 Actor_OfferTalk(Actor* actor, PlayState* play, f32 radius);
s32 Actor_OfferTalkNearColChkInfoCylinder(Actor* actor, PlayState* play);
u32 Actor_TextboxIsClosing(Actor* actor, PlayState* play);
s8 func_8002F368(PlayState* play);
void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y);
Expand Down
5 changes: 4 additions & 1 deletion include/z64actor.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,10 @@ typedef struct {
#define ACTOR_FLAG_5 (1 << 5)
#define ACTOR_FLAG_6 (1 << 6)
#define ACTOR_FLAG_7 (1 << 7)
#define ACTOR_FLAG_8 (1 << 8)
// Signals that player has accepted an offer to talk to an actor
// Player will retain this flag until the player is finished talking
// Actor will retain this flag until `Actor_TalkOfferAccepted` is called or manually turned off by the actor
#define ACTOR_FLAG_TALK (1 << 8)
#define ACTOR_FLAG_9 (1 << 9)
#define ACTOR_FLAG_10 (1 << 10)
#define ACTOR_FLAG_ENKUSA_CUT (1 << 11)
Expand Down
65 changes: 46 additions & 19 deletions src/code/z_actor.c
Original file line number Diff line number Diff line change
Expand Up @@ -1549,22 +1549,39 @@ s32 func_8002F0C8(Actor* actor, Player* player, s32 flag) {
return false;
}

u32 Actor_ProcessTalkRequest(Actor* actor, PlayState* play) {
if (actor->flags & ACTOR_FLAG_8) {
actor->flags &= ~ACTOR_FLAG_8;
/**
* When a given talk offer is accepted, Player will set `ACTOR_FLAG_TALK` for that actor.
* This function serves to acknowledge that the offer was accepted by Player, and notifies the actor
* that it should proceed with its own internal processes for handling dialogue.
*
* @return true if the talk offer was accepted, false otherwise
*/
s32 Actor_TalkOfferAccepted(Actor* actor, PlayState* play) {
if (actor->flags & ACTOR_FLAG_TALK) {
actor->flags &= ~ACTOR_FLAG_TALK;
return true;
}

return false;
}

s32 func_8002F1C4(Actor* actor, PlayState* play, f32 arg2, f32 arg3, u32 exchangeItemId) {
/**
* This function covers offering the ability to talk with the player.
* Passing an exchangeItemId (see `ExchangeItemID`) allows the player to also use the item to initiate the
* conversation.
*
* This function carries a talk exchange offer to the player actor if context allows it (e.g. the player is in range
* and not busy with certain things).
*
* @return true If the player actor is capable of accepting the offer.
*/
s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, u32 exchangeItemId) {
Player* player = GET_PLAYER(play);

if ((player->actor.flags & ACTOR_FLAG_8) || ((exchangeItemId != EXCH_ITEM_NONE) && Player_InCsMode(play)) ||
if ((player->actor.flags & ACTOR_FLAG_TALK) || ((exchangeItemId != EXCH_ITEM_NONE) && Player_InCsMode(play)) ||
(!actor->isTargeted &&
((arg3 < fabsf(actor->yDistToPlayer)) || (player->targetActorDistance < actor->xzDistToPlayer) ||
(arg2 < actor->xzDistToPlayer)))) {
((yRange < fabsf(actor->yDistToPlayer)) || (player->targetActorDistance < actor->xzDistToPlayer) ||
(xzRange < actor->xzDistToPlayer)))) {
return false;
}

Expand All @@ -1575,18 +1592,28 @@ s32 func_8002F1C4(Actor* actor, PlayState* play, f32 arg2, f32 arg3, u32 exchang
return true;
}

s32 func_8002F298(Actor* actor, PlayState* play, f32 arg2, u32 exchangeItemId) {
return func_8002F1C4(actor, play, arg2, arg2, exchangeItemId);
/**
* Offers a talk exchange request within an equilateral cylinder with the radius specified.
*/
s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, PlayState* play, f32 radius, u32 exchangeItemId) {
return Actor_OfferTalkExchange(actor, play, radius, radius, exchangeItemId);
}

s32 func_8002F2CC(Actor* actor, PlayState* play, f32 arg2) {
return func_8002F298(actor, play, arg2, EXCH_ITEM_NONE);
/**
* Offers a talk request within an equilateral cylinder with the radius specified.
*/
s32 Actor_OfferTalk(Actor* actor, PlayState* play, f32 radius) {
return Actor_OfferTalkExchangeEquiCylinder(actor, play, radius, EXCH_ITEM_NONE);
}

s32 func_8002F2F4(Actor* actor, PlayState* play) {
f32 var1 = 50.0f + actor->colChkInfo.cylRadius;
/**
* Offers a talk request within an equilateral cylinder whose radius is determined by the actor's collision check
* cylinder's radius.
*/
s32 Actor_OfferTalkNearColChkInfoCylinder(Actor* actor, PlayState* play) {
f32 cylRadius = 50.0f + actor->colChkInfo.cylRadius;

return func_8002F2CC(actor, play, var1);
return Actor_OfferTalk(actor, play, cylRadius);
}

u32 Actor_TextboxIsClosing(Actor* actor, PlayState* play) {
Expand Down Expand Up @@ -3776,7 +3803,7 @@ s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interac
s16 x;
s16 y;

if (Actor_ProcessTalkRequest(actor, play)) {
if (Actor_TalkOfferAccepted(actor, play)) {
*talkState = NPC_TALK_STATE_TALKING;
return true;
}
Expand All @@ -3792,7 +3819,7 @@ s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interac
return false;
}

if (!func_8002F2CC(actor, play, interactRange)) {
if (!Actor_OfferTalk(actor, play, interactRange)) {
return false;
}

Expand Down Expand Up @@ -5674,7 +5701,7 @@ s32 func_80037D98(PlayState* play, Actor* actor, s16 arg2, s32* arg3) {
s16 sp2A;
s16 abs_var;

if (Actor_ProcessTalkRequest(actor, play)) {
if (Actor_TalkOfferAccepted(actor, play)) {
*arg3 = 1;
return true;
}
Expand Down Expand Up @@ -5704,11 +5731,11 @@ s32 func_80037D98(PlayState* play, Actor* actor, s16 arg2, s32* arg3) {
}

if (actor->xyzDistToPlayerSq <= SQ(80.0f)) {
if (func_8002F2CC(actor, play, 80.0f)) {
if (Actor_OfferTalk(actor, play, 80.0f)) {
actor->textId = func_80037C30(play, arg2);
}
} else {
if (func_8002F2F4(actor, play)) {
if (Actor_OfferTalkNearColChkInfoCylinder(actor, play)) {
actor->textId = func_80037C30(play, arg2);
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/code/z_en_a_keep.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,10 +204,10 @@ void EnAObj_WaitTalk(EnAObj* this, PlayState* play) {
relYawTowardsPlayer = this->dyna.actor.yawTowardsPlayer - this->dyna.actor.shape.rot.y;
if (ABS(relYawTowardsPlayer) < 0x2800 ||
(this->dyna.actor.params == A_OBJ_SIGNPOST_ARROW && ABS(relYawTowardsPlayer) > 0x5800)) {
if (Actor_ProcessTalkRequest(&this->dyna.actor, play)) {
if (Actor_TalkOfferAccepted(&this->dyna.actor, play)) {
EnAObj_SetupAction(this, EnAObj_WaitFinishedTalking);
} else {
func_8002F2F4(&this->dyna.actor, play);
Actor_OfferTalkNearColChkInfoCylinder(&this->dyna.actor, play);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ s32 ArmsHook_CheckForCancel(ArmsHook* this) {
Player* player = (Player*)this->actor.parent;

if (Player_HoldsHookshot(player)) {
if ((player->itemAction != player->heldItemAction) || (player->actor.flags & ACTOR_FLAG_8) ||
if ((player->itemAction != player->heldItemAction) || (player->actor.flags & ACTOR_FLAG_TALK) ||
((player->stateFlags1 & (PLAYER_STATE1_7 | PLAYER_STATE1_26)))) {
this->timer = 0;
ArmsHook_DetachHookFromActor(this);
Expand Down
4 changes: 2 additions & 2 deletions src/overlays/actors/ovl_Demo_Im/z_demo_im.c
Original file line number Diff line number Diff line change
Expand Up @@ -853,9 +853,9 @@ s32 func_80986A5C(DemoIm* this, PlayState* play) {

s32 func_80986AD0(DemoIm* this, PlayState* play) {
this->actor.flags |= ACTOR_FLAG_0 | ACTOR_FLAG_3;
if (!Actor_ProcessTalkRequest(&this->actor, play)) {
if (!Actor_TalkOfferAccepted(&this->actor, play)) {
this->actor.textId = 0x708E;
func_8002F2F4(&this->actor, play);
Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play);
} else {
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/overlays/actors/ovl_Elf_Msg/z_elf_msg.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ void ElfMsg_Update(Actor* thisx, PlayState* play) {
ElfMsg* this = (ElfMsg*)thisx;

if (!ElfMsg_KillCheck(this, play)) {
if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
if (((this->actor.params >> 8) & 0x3F) != 0x3F) {
Flags_SetSwitch(play, (this->actor.params >> 8) & 0x3F);
}
Expand Down
2 changes: 1 addition & 1 deletion src/overlays/actors/ovl_Elf_Msg2/z_elf_msg2.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ void ElfMsg2_WaitForTextClose(ElfMsg2* this, PlayState* play) {
* Runs while Navi text is not up.
*/
void ElfMsg2_WaitForTextRead(ElfMsg2* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
ElfMsg2_SetupAction(this, ElfMsg2_WaitForTextClose);
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/overlays/actors/ovl_En_Ani/z_en_ani.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ void EnAni_Destroy(Actor* thisx, PlayState* play) {
s32 EnAni_SetText(EnAni* this, PlayState* play, u16 textId) {
this->actor.textId = textId;
this->unk_2A8 |= 1;
func_8002F2CC(&this->actor, play, 100.0f);
Actor_OfferTalk(&this->actor, play, 100.0f);
return 0;
}

Expand Down Expand Up @@ -151,7 +151,7 @@ void func_809B064C(EnAni* this, PlayState* play) {
}

yawDiff = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
if (this->actor.textId == 0x5056) {
EnAni_SetupAction(this, func_809B04F0);
} else if (this->actor.textId == 0x5055) {
Expand All @@ -177,7 +177,7 @@ void func_809B07F8(EnAni* this, PlayState* play) {
u16 textId;

yawDiff = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
if (this->actor.textId == 0x5056) {
EnAni_SetupAction(this, func_809B0524);
} else if (this->actor.textId == 0x5055) {
Expand Down
12 changes: 6 additions & 6 deletions src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,13 @@ void EnBomBowlMan_WaitAsleep(EnBomBowlMan* this, PlayState* play) {

SkelAnime_Update(&this->skelAnime);

if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
this->actionFunc = EnBomBowlMan_TalkAsleep;
} else {
yawDiff = ABS((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y));

if (!(this->actor.xzDistToPlayer > 120.0f) && (yawDiff < 0x4300)) {
func_8002F2CC(&this->actor, play, 120.0f);
Actor_OfferTalk(&this->actor, play, 120.0f);
}
}
}
Expand Down Expand Up @@ -177,10 +177,10 @@ void EnBomBowlMan_CheckBeatenDC(EnBomBowlMan* this, PlayState* play) {
void EnBomBowlMan_WaitNotBeatenDC(EnBomBowlMan* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);

if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
this->actionFunc = EnBomBowlMan_TalkNotBeatenDC;
} else {
func_8002F2CC(&this->actor, play, 120.0f);
Actor_OfferTalk(&this->actor, play, 120.0f);
}
}

Expand Down Expand Up @@ -265,7 +265,7 @@ void EnBomBowlMan_RunGame(EnBomBowlMan* this, PlayState* play) {
}
this->actionFunc = EnBomBowlMan_HandlePlayChoice;
} else {
if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
if (this->minigamePlayStatus == 0) {
this->actionFunc = EnBomBowlMan_HandlePlayChoice;
} else {
Expand All @@ -275,7 +275,7 @@ void EnBomBowlMan_RunGame(EnBomBowlMan* this, PlayState* play) {
yawDiff = ABS((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y));

if (!(this->actor.xzDistToPlayer > 120.0f) && (yawDiff < 0x4300)) {
func_8002F2CC(&this->actor, play, 120.0f);
Actor_OfferTalk(&this->actor, play, 120.0f);
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/overlays/actors/ovl_En_Cow/z_en_cow.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,11 +261,11 @@ void EnCow_CheckForEmptyBottle(EnCow* this, PlayState* play) {
}

void EnCow_Talk(EnCow* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
this->actionFunc = EnCow_CheckForEmptyBottle;
} else {
this->actor.flags |= ACTOR_FLAG_16;
func_8002F2CC(&this->actor, play, 170.0f);
Actor_OfferTalk(&this->actor, play, 170.0f);
this->actor.textId = 0x2006;
}

Expand All @@ -291,7 +291,7 @@ void EnCow_Idle(EnCow* this, PlayState* play) {
R_EPONAS_SONG_PLAYED = false;
this->actionFunc = EnCow_Talk;
this->actor.flags |= ACTOR_FLAG_16;
func_8002F2CC(&this->actor, play, 170.0f);
Actor_OfferTalk(&this->actor, play, 170.0f);
this->actor.textId = 0x2006;
} else {
this->cowFlags |= COW_FLAG_FAILED_TO_GIVE_MILK;
Expand Down
4 changes: 2 additions & 2 deletions src/overlays/actors/ovl_En_Cs/z_en_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ void EnCs_HandleTalking(EnCs* this, PlayState* play) {
this->talkState = 1;
} else if (this->talkState == 1) {
this->talkState = EnCs_GetTalkState(this, play);
} else if (Actor_ProcessTalkRequest(&this->actor, play)) {
} else if (Actor_TalkOfferAccepted(&this->actor, play)) {
if ((this->actor.textId == 0x2022) || ((this->actor.textId != 0x2022) && (this->actor.textId != 0x2028))) {
EnCs_ChangeAnim(this, ENCS_ANIM_3, &this->currentAnimIndex);
}
Expand All @@ -253,7 +253,7 @@ void EnCs_HandleTalking(EnCs* this, PlayState* play) {
Actor_GetScreenPos(play, &this->actor, &sp2A, &sp28);

if ((sp2A >= 0) && (sp2A <= 320) && (sp28 >= 0) && (sp28 <= 240) &&
(func_8002F2CC(&this->actor, play, 100.0f))) {
(Actor_OfferTalk(&this->actor, play, 100.0f))) {
this->actor.textId = EnCs_GetTextID(this, play);
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/overlays/actors/ovl_En_Daiku/z_en_daiku.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,12 +260,12 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {

if (this->talkState == ENDAIKU_STATE_TALKING) {
this->talkState = EnDaiku_UpdateTalking(this, play);
} else if (Actor_ProcessTalkRequest(&this->actor, play)) {
} else if (Actor_TalkOfferAccepted(&this->actor, play)) {
this->talkState = ENDAIKU_STATE_TALKING;
} else {
Actor_GetScreenPos(play, &this->actor, &sp2E, &sp2C);
if (sp2E >= 0 && sp2E <= 320 && sp2C >= 0 && sp2C <= 240 && this->talkState == ENDAIKU_STATE_CAN_TALK &&
func_8002F2CC(&this->actor, play, 100.0f) == 1) {
Actor_OfferTalk(&this->actor, play, 100.0f) == 1) {
if (play->sceneId == SCENE_THIEVES_HIDEOUT) {
if (this->stateFlags & ENDAIKU_STATEFLAG_GERUDODEFEATED) {
freedCount = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,13 +232,13 @@ void EnDaikuKakariko_HandleTalking(EnDaikuKakariko* this, PlayState* play) {

if (this->talkState == 2) {
this->talkState = EnDaikuKakariko_GetTalkState(this, play);
} else if (Actor_ProcessTalkRequest(&this->actor, play)) {
} else if (Actor_TalkOfferAccepted(&this->actor, play)) {
this->talkState = 2;
} else {
Actor_GetScreenPos(play, &this->actor, &sp26, &sp24);

if ((sp26 >= 0) && (sp26 <= 320) && (sp24 >= 0) && (sp24 <= 240) && (this->talkState == 0) &&
(func_8002F2CC(&this->actor, play, 100.0f) == 1)) {
(Actor_OfferTalk(&this->actor, play, 100.0f) == 1)) {
this->actor.textId = Text_GetFaceReaction(play, maskReactionSets[this->actor.params & 3]);

if (this->actor.textId == 0) {
Expand Down
4 changes: 2 additions & 2 deletions src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ void func_809EDCB0(EnDivingGame* this, PlayState* play) {
void EnDivingGame_Talk(EnDivingGame* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
if (this->state != ENDIVINGGAME_STATE_PLAYING || !EnDivingGame_HasMinigameFinished(this, play)) {
if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
if (this->unk_292 != TEXT_STATE_DONE) {
switch (this->state) {
case ENDIVINGGAME_STATE_NOTPLAYING:
Expand Down Expand Up @@ -224,7 +224,7 @@ void EnDivingGame_Talk(EnDivingGame* this, PlayState* play) {
break;
}
}
func_8002F2CC(&this->actor, play, 80.0f);
Actor_OfferTalk(&this->actor, play, 80.0f);
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/overlays/actors/ovl_En_Dns/z_en_dns.c
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ void EnDns_Idle(EnDns* this, PlayState* play) {
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 2000, 0);
this->actor.world.rot.y = this->actor.shape.rot.y;

if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
this->actionFunc = EnDns_Talk;
} else {
if ((this->collider.base.ocFlags1 & OC1_HIT) || this->actor.isTargeted) {
Expand All @@ -350,7 +350,7 @@ void EnDns_Idle(EnDns* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_16;
}
if (this->actor.xzDistToPlayer < 130.0f) {
func_8002F2F4(&this->actor, play);
Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play);
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/overlays/actors/ovl_En_Dnt_Jiji/z_en_dnt_jiji.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,10 @@ void EnDntJiji_Cower(EnDntJiji* this, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0x1388, 0);
if (frame >= this->endFrame) {
if (Actor_ProcessTalkRequest(&this->actor, play)) {
if (Actor_TalkOfferAccepted(&this->actor, play)) {
this->actionFunc = EnDntJiji_SetupTalk;
} else {
func_8002F2CC(&this->actor, play, 100.0f);
Actor_OfferTalk(&this->actor, play, 100.0f);
}
}
}
Expand Down
Loading

0 comments on commit 3d1ee33

Please sign in to comment.