taisei/src/dialog/dialog_macros.h
2024-05-17 14:11:48 +02:00

67 lines
2.4 KiB
C

/*
* This software is licensed under the terms of the MIT License.
* See COPYING for further information.
* ---
* Copyright (c) 2011-2024, Lukas Weber <laochailan@web.de>.
* Copyright (c) 2012-2024, Andrei Alexeyev <akari@taisei-project.org>.
*/
#pragma once
#include "taisei.h"
#include "dialog.h" // IWYU pragma: export
#include "stage.h" // IWYU pragma: export
#include "portrait.h" // IWYU pragma: export
#define DIALOG_BEGIN(_interface) \
if(ARGS.called_for_preload) { \
if(ARGS.called_for_preload > 0) { \
log_warn("preload was not handled"); \
} \
return; \
} \
Dialog dialog; \
stage_begin_dialog(&dialog); \
_interface##DialogEvents events = { 0 }; \
COEVENT_INIT_ARRAY(events); \
if(ARGS.out_events) *ARGS.out_events = &events; \
YIELD \
#define DIALOG_END() \
dialog_end(&dialog); \
COEVENT_CANCEL_ARRAY(events)
#define ACTOR(_name, _side) \
DialogActor _name; \
dialog_add_actor(&dialog, &_name, #_name, _side)
#define ACTOR_LEFT(_name) ACTOR(_name, DIALOG_SIDE_LEFT)
#define ACTOR_RIGHT(_name) ACTOR(_name, DIALOG_SIDE_RIGHT)
#define MSG(_actor, _text) dialog_message(&dialog, &_actor, _text)
#define MSG_UNSKIPPABLE(_actor, _delay, _text) dialog_message_unskippable(&dialog, &_actor, _text, _delay)
#define FACE(_actor, _face) dialog_actor_set_face(&_actor, #_face)
#define VARIANT(_actor, _variant) dialog_actor_set_variant(&_actor, #_variant)
#define SHOW(_actor) dialog_actor_show(&_actor)
#define HIDE(_actor) dialog_actor_hide(&_actor)
#define FOCUS(_actor) dialog_focus_actor(&dialog, &_actor)
#define WAIT_SKIPPABLE(_delay) dialog_skippable_wait(&dialog, _delay)
#define EVENT(_name) coevent_signal(&events._name)
#define TITLE(_actor, _name, _title) log_warn("TITLE(%s, %s, %s) not yet implemented", #_actor, #_name, #_title)
#define DIALOG_TASK(_protag, _interface) \
TASK_WITH_INTERFACE(_protag##_##_interface##Dialog, _interface##Dialog)
#define PRELOAD \
if(ARGS.called_for_preload) ARGS.called_for_preload = -1; \
if(ARGS.called_for_preload)
#define PRELOAD_CHAR(name) \
portrait_preload_base_sprite(ARGS.preload_group, #name, NULL, ARGS.preload_rflags); \
for(const char *_charname = #name; _charname; _charname = NULL)
#define PRELOAD_VARIANT(variant) \
portrait_preload_base_sprite(ARGS.preload_group, _charname, #variant, ARGS.preload_rflags)
#define PRELOAD_FACE(face) \
portrait_preload_face_sprite(ARGS.preload_group, _charname, #face, ARGS.preload_rflags)