changeset 291:5d8700074dd7

rpg: add battle_message module
author David Demelier <markand@malikania.fr>
date Fri, 08 Jan 2021 13:15:24 +0100
parents 9948e288925b
children 08ab73b32832
files examples/example-battle/main.c libmlk-rpg/CMakeLists.txt libmlk-rpg/rpg/battle-state-item.c
diffstat 3 files changed, 9 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/examples/example-battle/main.c	Fri Jan 08 12:56:10 2021 +0100
+++ b/examples/example-battle/main.c	Fri Jan 08 13:15:24 2021 +0100
@@ -88,7 +88,6 @@
 static struct character team[] = {
 	{
 		.name = "Molko",
-		.type = "Adventurer",
 		.level = 1,
 		.hp = 120,
 		.mp = 50,
@@ -123,7 +122,6 @@
 
 static struct character haunted_wood = {
 	.name = "Haunted Wood",
-	.type = "Wood",
 	.level = 30,
 	.reset = haunted_wood_reset,
 	.sprites = {
@@ -134,7 +132,6 @@
 
 static struct character black_cat = {
 	.name = "Black Cat",
-	.type = "Cat",
 	.level = 6,
 	.reset = black_cat_reset,
 	.sprites = {
--- a/libmlk-rpg/CMakeLists.txt	Fri Jan 08 12:56:10 2021 +0100
+++ b/libmlk-rpg/CMakeLists.txt	Fri Jan 08 13:15:24 2021 +0100
@@ -42,6 +42,8 @@
 	${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity.h
 	${libmlk-rpg_SOURCE_DIR}/rpg/battle-indicator.c
 	${libmlk-rpg_SOURCE_DIR}/rpg/battle-indicator.h
+	${libmlk-rpg_SOURCE_DIR}/rpg/battle-message.c
+	${libmlk-rpg_SOURCE_DIR}/rpg/battle-message.h
 	${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-ai.c
 	${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-attacking.c
 	${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-check.c
--- a/libmlk-rpg/rpg/battle-state-item.c	Fri Jan 08 12:56:10 2021 +0100
+++ b/libmlk-rpg/rpg/battle-state-item.c	Fri Jan 08 13:15:24 2021 +0100
@@ -21,16 +21,12 @@
 
 #include <core/alloc.h>
 #include <core/panic.h>
-#include <core/window.h>
 
 #include <rpg/inventory.h>
 #include <rpg/item.h>
 
-#include <ui/align.h>
-#include <ui/frame.h>
-#include <ui/label.h>
-
 #include "battle-entity-state.h"
+#include "battle-message.h"
 #include "battle-state.h"
 #include "battle.h"
 
@@ -40,15 +36,9 @@
 	SUBSTATE_RETURNING
 };
 
-struct msg {
-	struct frame frame;
-	struct label label;
-	unsigned int elapsed;
-};
-
 struct self {
 	enum substate substate;
-	struct msg msg;
+	struct battle_message msg;
 	struct battle_entity *source;
 	struct battle_entity *target;
 	struct battle_state state;
@@ -70,9 +60,7 @@
 		}
 		break;
 	case SUBSTATE_MESSAGE:
-		self->msg.elapsed += ticks;
-
-		if (self->msg.elapsed >= 2000) {
+		if (battle_message_update(&self->msg, ticks)) {
 			self->substate = SUBSTATE_RETURNING;
 			battle_entity_state_moving(self->source, self->origin_x, self->source->y);
 		}
@@ -93,10 +81,8 @@
 {
 	struct self *self = st->data;
 
-	if (self->substate == SUBSTATE_MESSAGE) {
-		frame_draw(&self->msg.frame);
-		label_draw(&self->msg.label);
-	}
+	if (self->substate == SUBSTATE_MESSAGE)
+		battle_message_draw(&self->msg);
 }
 
 static void
@@ -129,24 +115,8 @@
 	self->slot = slot;
 	self->origin_x = self->source->x;
 
-	/* Prepare message frame. */
-	self->msg.frame.w = window.w / 3;
-	self->msg.frame.h = window.h / 15;
-	self->msg.frame.theme = bt->theme;
-
-	align(ALIGN_TOP,
-	    &self->msg.frame.x, &self->msg.frame.y, self->msg.frame.w, self->msg.frame.h,
-	    0, 20, window.w, window.h);
-
-	/* Prepare message label box. */
-	self->msg.label.text = slot->item->name;
-	self->msg.label.flags = LABEL_FLAGS_SHADOW;
-	self->msg.label.theme = bt->theme;
-	label_query(&self->msg.label, &lw, &lh);
-
-	align(ALIGN_CENTER,
-	    &self->msg.label.x, &self->msg.label.y, lw, lh,
-	    self->msg.frame.x, self->msg.frame.y, self->msg.frame.w, self->msg.frame.h);
+	self->msg.text = slot->item->name;
+	self->msg.theme = bt->theme;
 
 	self->state.data = self;
 	self->state.update = update;