summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2017-12-02 11:25:50 +0300
committerOxore <oxore@protonmail.com>2017-12-02 11:25:50 +0300
commit194112490cf58dc5fe9c0ca0488d4964faa9f2a3 (patch)
tree156737a02b21c374e0834521abee2bb28a1b4edc
parent8e04f42ee02852b72fcafb6af8598c12aacd39ec (diff)
Make all text resources load from yaml file
-rw-r--r--include/functions.h3
-rw-r--r--src/functions.c32
-rw-r--r--src/main.c39
3 files changed, 32 insertions, 42 deletions
diff --git a/include/functions.h b/include/functions.h
index 01d13e8..8658aa5 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -16,8 +16,7 @@ void rotateLeft();
void rotateRight();
void rotateShape();
int linesRmScore();
-void scoreDisplay(int s, Text *textScore);
-void levelDisplay(int s, Text *textLevel);
+void valueAfterTextDisplay(int value, List *texts, char *type);
void colorizeFld();
void colorizeActive();
void drawFld(sfRenderWindow *window);
diff --git a/src/functions.c b/src/functions.c
index cf01bfb..482a459 100644
--- a/src/functions.c
+++ b/src/functions.c
@@ -71,22 +71,28 @@ void initFld()
}
-void scoreDisplay(int s, Text *textScore)
+void valueAfterTextDisplay(int value, List *texts, char *type)
{
- char a[64];
- sprintf(a, "Score: %d", s);
- sfText_setString(textScore->sfText, (char *)&a);
-}
-
-
-void levelDisplay(int s, Text *textLevel)
-{
- char a[64];
- sprintf(a, "Level: %d", s);
- sfText_setString(textLevel->sfText, (char *)&a);
+ List *l = texts;
+ while (l) {
+ Text *text = (Text *)l->obj;
+ if (text->type)
+ if (!strcmp(text->type, type)) {
+ char a[64];
+ if (text->text) {
+ if (strlen(text->text) > 52) {
+ memset(text->text+52, '\0', 1);
+ strcpy(a, text->text);
+ }
+ sprintf(a, "%s%d", text->text, value);
+ sfText_setString(text->sfText, (char *)&a);
+ break;
+ }
+ }
+ l = l->next;
+ }
}
-
/*
* Removes line when cells all are in row in it
*
diff --git a/src/main.c b/src/main.c
index 6f28c0f..731aa86 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,8 +6,6 @@
Window w = {.mode = {450, 520, 32}};
Game game = {.isStarted = 0, .scoreCurrent = 0, .level = 1};
List *texts;
-Text score;
-Text level;
sfFont *fontScore;
Shape active, next;
Field fld;
@@ -44,18 +42,7 @@ void prepare() {
.cSize = {.x = 23, .y = 23}};
initFld();
-
texts = ListOfText_getFromListOfKeyMapOfString(ListOfKeyMapOfString_getFromYaml("dat/ya.yaml"));
- score.sfText = sfText_create();
- sfText_setFont(score.sfText, fontScore);
- sfText_setCharacterSize(score.sfText, 20);
- sfText_setPosition(score.sfText, (sfVector2f){.x = 250+10+10, .y = 10});
-
- level.sfText = sfText_create();
- sfText_setFont(level.sfText, fontScore);
- sfText_setCharacterSize(level.sfText, 20);
- sfText_setPosition(level.sfText, (sfVector2f){.x = 250+10+10, .y = 44});
-
w.window = sfRenderWindow_create(w.mode,
windowName_conf,
sfResize | sfClose,
@@ -70,17 +57,25 @@ void handleWindowEvents() {
sfRenderWindow_close(w.window);
}
+void drawTextsAtScene(List *texts, char *scene, sfRenderWindow *window) {
+ List *t = texts;
+ while (t) {
+ if (!strcmp(((Text *)t->obj)->scene, scene))
+ sfRenderWindow_drawText(window, ((Text *)t->obj)->sfText, NULL);
+ t = t->next;
+ }
+}
+
void gameLoop() {
tTick();
tKeyCtrl();
- scoreDisplay(game.scoreCurrent, &score);
- levelDisplay(game.level, &level);
+ valueAfterTextDisplay(game.scoreCurrent, texts, "score");
+ valueAfterTextDisplay(game.level, texts, "level");
colorizeFld();
colorizeActive();
drawFld(w.window);
drawNextShape(w.window);
- sfRenderWindow_drawText(w.window, score.sfText, NULL);
- sfRenderWindow_drawText(w.window, level.sfText, NULL);
+ drawTextsAtScene(texts, "game", w.window);
}
void menuTick()
@@ -91,15 +86,6 @@ void menuTick()
}
}
-void drawTextsAtScene(List *texts, char *scene, sfRenderWindow *window) {
- List *t = texts;
- while (t) {
- if (!strcmp(((Text *)t->obj)->scene, scene))
- sfRenderWindow_drawText(window, ((Text *)t->obj)->sfText, NULL);
- t = t->next;
- }
-}
-
void menuLoop() {
menuTick();
drawFld(w.window);
@@ -133,7 +119,6 @@ int main()
printf("%d\n", game.scoreCurrent);
freeFld();
sfRenderWindow_destroy(w.window);
- sfText_destroy(score.sfText);
ListOfText_free(&texts);
return EXIT_SUCCESS;