Make character message unread in perform action codepath, unwarped dt for text input fade in/out

main
parent 868181a74d
commit 7666dc6717

@ -1789,6 +1789,23 @@ bool perform_action(GameState *gs, Entity *from, Action a)
{ {
MD_ArenaTemp scratch = MD_GetScratch(0, 0); MD_ArenaTemp scratch = MD_GetScratch(0, 0);
if(!from->is_character && a.speech.text_length > 0)
{
ListOfEntities *new_unread = 0;
if(unread_free_list)
{
new_unread = unread_free_list;
MD_StackPop(unread_free_list);
*new_unread = (ListOfEntities){0};
}
else
{
new_unread = MD_PushArray(persistent_arena, ListOfEntities, 1);
}
new_unread->referring_to = frome(from);
MD_DblPushBack(unread_first, unread_last, new_unread);
}
MemoryContext context = {0}; MemoryContext context = {0};
context.author_npc_kind = from->npc_kind; context.author_npc_kind = from->npc_kind;
@ -5477,7 +5494,7 @@ void frame(void)
{ {
uint64_t time_start_frame = stm_now(); uint64_t time_start_frame = stm_now();
text_input_fade = Lerp(text_input_fade, dt * 8.0f, receiving_text_input ? 1.0f : 0.0f); text_input_fade = Lerp(text_input_fade, unwarped_dt * 8.0f, receiving_text_input ? 1.0f : 0.0f);
Vec3 player_pos = V3(gs.player->pos.x, 0.0, gs.player->pos.y); Vec3 player_pos = V3(gs.player->pos.x, 0.0, gs.player->pos.y);
//dbgline(V2(0,0), V2(500, 500)); //dbgline(V2(0,0), V2(500, 500));
@ -5997,20 +6014,7 @@ ISANERROR("Don't know how to do this stuff on this platform.")
Log("Performing action %s!\n", actions[out.kind].name); Log("Performing action %s!\n", actions[out.kind].name);
perform_action(&gs, it, out); perform_action(&gs, it, out);
ListOfEntities *new_unread = 0;
if(unread_free_list)
{
new_unread = unread_free_list;
*new_unread = (ListOfEntities){0};
MD_StackPop(unread_free_list);
}
else
{
new_unread = MD_PushArray(persistent_arena, ListOfEntities, 1);
}
new_unread->referring_to = frome(it);
if(out.speech.text_length > 0)
MD_DblPushBack(unread_first, unread_last, new_unread);
} }
else else
{ {
@ -6518,29 +6522,18 @@ ISANERROR("Don't know how to do this stuff on this platform.")
if (it->memories_last->context.talking_to_kind == it->npc_kind) if (it->memories_last->context.talking_to_kind == it->npc_kind)
{ {
const char *action = "none"; const char *action = "none";
// if(it->standing != STANDING_JOINED) action = "joins_player";
// @Place(more trailer jank)
char *rigged_dialog[] = { char *rigged_dialog[] = {
/* "Repeated amounts of testing dialog overwhelmingly in support of the mulaney brothers",
"Just trying to survive in this crazy world, same as everyone else.",
"We'll see who's crazy...",
"Join me down here, we'll wait it out",
"...",
*/
"HEY!",
"Sing me a rhyme, young man",
"The bell tolls for the meak...",
"HAHAHAHA",
}; };
char *next_dialog = rigged_dialog[it->times_talked_to % ARRLEN(rigged_dialog)]; char *next_dialog = rigged_dialog[it->times_talked_to % ARRLEN(rigged_dialog)];
ai_response = MD_S8Fmt(frame_arena, "{who_i_am: \"%s\", talking_to: nobody, action: %s, speech: \"%s\", thoughts: \"I'm thinking...\", mood: Happy}", characters[it->npc_kind].name, action, next_dialog); ai_response = MD_S8Fmt(frame_arena, "{\"target\": \"%s\", \"action\": \"%s\", \"speech\": \"%s\"}", characters[it->memories_last->context.author_npc_kind].name, action, next_dialog);
#ifdef DESKTOP #ifdef DESKTOP
it->times_talked_to += 1; it->times_talked_to += 1;
#endif #endif
} }
else else
{ {
ai_response = MD_S8Fmt(frame_arena, "{who_i_am: \"%s\", talking_to: nobody, action: none, speech: \"I heard that...\", thoughts: \"I'm thinking...\", mood: Happy}", characters[it->npc_kind].name); ai_response = MD_S8Lit("{\"target\": \"nobody\", \"action\": \"none\", \"speech\": \"\"}");
} }
} }
else else

@ -529,7 +529,7 @@ MD_String8 parse_chatgpt_response(MD_Arena *arena, Entity *e, MD_String8 action_
} }
if(!found) if(!found)
{ {
error_message = FmtWithLint(arena, "Unrecognized character provided in talking_to: `%.*s`", MD_S8VArg(target_str)); error_message = FmtWithLint(arena, "Unrecognized character provided in field 'target': `%.*s`", MD_S8VArg(target_str));
} }
} }
} }

@ -26,7 +26,7 @@
#ifdef DEVTOOLS #ifdef DEVTOOLS
// server url cannot have trailing slash // server url cannot have trailing slash
//#define MOCK_AI_RESPONSE #define MOCK_AI_RESPONSE
#define SERVER_DOMAIN "localhost" #define SERVER_DOMAIN "localhost"
#define SERVER_PORT 8090 #define SERVER_PORT 8090
#define IS_SERVER_SECURE 0 #define IS_SERVER_SECURE 0

Loading…
Cancel
Save