summaryrefslogtreecommitdiffhomepage
path: root/games/transmission/screens/screen_gameplay.c
diff options
context:
space:
mode:
Diffstat (limited to 'games/transmission/screens/screen_gameplay.c')
-rw-r--r--games/transmission/screens/screen_gameplay.c165
1 files changed, 77 insertions, 88 deletions
diff --git a/games/transmission/screens/screen_gameplay.c b/games/transmission/screens/screen_gameplay.c
index 0594e10f..ee70632a 100644
--- a/games/transmission/screens/screen_gameplay.c
+++ b/games/transmission/screens/screen_gameplay.c
@@ -35,9 +35,9 @@
#define MAX_LINE_CHAR 30
/*
-// NOTE: Coding words are generic and the same words
-// are used for all missions,
-typedef enum CodingWords {
+// NOTE: Coding words are generic and the same words
+// are used for all missions,
+typedef enum CodingWords {
POLLO = 0,
CONEJO,
HUEVO,
@@ -50,13 +50,13 @@ typedef enum CodingWords {
} CodingWords;
*/
-static char *codingWords[MAX_CODING_WORDS] = {
- "pollo\0",
- "conejo\0",
+static char *codingWords[MAX_CODING_WORDS] = {
+ "pollo\0",
+ "conejo\0",
"huevo\0",
- "nido\0",
- "aire\0",
- "armario\0",
+ "nido\0",
+ "aire\0",
+ "armario\0",
"agujero\0",
"platano\0",
"pastel\0",
@@ -125,19 +125,19 @@ void InitGameplayScreen(void)
{
framesCounter = 0;
finishScreen = 0;
-
- fontMessage = LoadFontEx("resources/fonts/traveling_typewriter.ttf", 30, 250, 0);
-
+
+ fontMessage = LoadFontEx("resources/fonts/traveling_typewriter.ttf", 30, 0, 250);
+
texBackground = LoadTexture("resources/textures/message_background.png");
texVignette = LoadTexture("resources/textures/message_vignette.png");
-
+
fxGrab = LoadSound("resources/audio/fx_grab.ogg");
fxPlace = LoadSound("resources/audio/fx_place.ogg");
fxLeave = LoadSound("resources/audio/fx_leave.ogg");
-
+
musSpy = LoadMusicStream("resources/audio/s_p_y.xm");
PlayMusicStream(musSpy);
-
+
#if defined(PLATFORM_WEB)
#define WORD_ATLAS_FROM_FILE
#endif
@@ -147,20 +147,20 @@ void InitGameplayScreen(void)
// Generate coding words atlas directly from text
Image imWordsBase = LoadImage("resources/textures/words_base.png");
Image imWords = GenImageColor(imWordsBase.width, imWordsBase.height*MAX_CODING_WORDS, WHITE);
-
+
for (int i = 0; i < MAX_CODING_WORDS; i++)
{
- ImageDraw(&imWords, imWordsBase,
+ ImageDraw(&imWords, imWordsBase,
(Rectangle){ 0, 0, imWordsBase.width, imWordsBase.height },
(Rectangle){ 0, imWordsBase.height*i, imWordsBase.width, imWordsBase.height });
-
- ImageDrawTextEx(&imWords,(Vector2){ imWordsBase.width/2 - MeasureTextEx(fontMessage, codingWords[i],
- fontMessage.baseSize, 0).x/2, imWordsBase.height*i }, fontMessage, codingWords[i],
- fontMessage.baseSize, 0, BLACK);
+
+ ImageDrawTextEx(&imWords,(Vector2){ imWordsBase.width/2 - MeasureTextEx(fontMessage, codingWords[i],
+ fontMessage.baseSize, 0).x/2, imWordsBase.height*i }, fontMessage, codingWords[i],
+ fontMessage.baseSize, 0, BLACK);
}
-
+
texWordsAtlas = LoadTextureFromImage(imWords);
-
+
UnloadImage(imWordsBase);
UnloadImage(imWords);
#endif
@@ -183,13 +183,13 @@ void InitGameplayScreen(void)
words[i].iniRec = words[i].rec;
words[i].hover = false; // Mouse hover detected
words[i].picked = false; // Mouse picked
-
+
//words[i].text = ''; //codingWords[i]; // Fill text if required...
}
-
+
// Analize missions[currentMission].msg string for words!
int msgLen = strlen(missions[currentMission].msg);
-
+
// Add '/' each MAX_LINE_CHAR chars
int currentLine = 1;
int i = currentLine * MAX_LINE_CHAR;
@@ -203,39 +203,35 @@ void InitGameplayScreen(void)
i = currentLine*MAX_LINE_CHAR;
}
else i++;
- }
-
+ }
+
int currentWord = 0;
int offsetX = 0;
int offsetY = 0;
bool foundWord = false;
int wordInitPosX = 0;
int wordInitPosY = 0;
-
- // TODO: messageWords should be reseted every mission
- //memcpy(messageWords, 0, sizeof(Word)*MAX_MISSION_WORDS);
for (int i = 0; i < msgLen; i++)
- {
+ {
char c = missions[currentMission].msg[i];
if (foundWord && (c == ' ' || c == '.'))
{
foundWord = false;
-
- messageWords[currentWord - 1].rec.width = (int)MeasureTextEx(fontMessage, SubText(missions[currentMission].msg, wordInitPosX, (i - wordInitPosX)), 30, 0).x;
+
+ messageWords[currentWord - 1].rec.width = (int)MeasureTextEx(fontMessage, TextSubtext(missions[currentMission].msg, wordInitPosX, (i - wordInitPosX)), 30, 0).x;
messageWords[currentWord - 1].rec.height = fontMessage.baseSize;
-
- //TODO: Guardar en message
- strncpy(messageWords[currentWord - 1].text, SubText(missions[currentMission].msg, wordInitPosX, (i - wordInitPosX)), i - wordInitPosX);
+
+ strncpy(messageWords[currentWord - 1].text, TextSubtext(missions[currentMission].msg, wordInitPosX, (i - wordInitPosX)), i - wordInitPosX);
}
-
+
if (c == '@') // One word to change
{
foundWord = true;
missions[currentMission].msg[i] = ' ';
- offsetX = (int)MeasureTextEx(fontMessage, SubText(missions[currentMission].msg, wordInitPosY, (i + 1) - wordInitPosY), 30, 0).x;
-
+ offsetX = (int)MeasureTextEx(fontMessage, TextSubtext(missions[currentMission].msg, wordInitPosY, (i + 1) - wordInitPosY), 30, 0).x;
+
messageWords[currentWord].rec.x = offsetX;
messageWords[currentWord].rec.y = offsetY;
@@ -254,16 +250,16 @@ void InitGameplayScreen(void)
for (int i = 0; i < missions[currentMission].wordsCount; i++)
{
messageWords[i].id = -1; // Not required for message words, id is the array position
-
+
// Recalculate words rectangles considering text offset on screen
messageWords[i].rec.x += msgOffset.x;
messageWords[i].rec.y += msgOffset.y;
-
+
// Recalculate words rectangle considering new width height
messageWords[i].rec.x -= (texWordsAtlas.width - messageWords[i].rec.width)/2;
messageWords[i].rec.y -= ((texWordsAtlas.height / MAX_CODING_WORDS) - messageWords[i].rec.height)/2;
-
- //Recalculate width height
+
+ //Recalculate width height
messageWords[i].rec.width = texWordsAtlas.width;
messageWords[i].rec.height = texWordsAtlas.height / MAX_CODING_WORDS;
@@ -276,13 +272,13 @@ void InitGameplayScreen(void)
void UpdateGameplayScreen(void)
{
UpdateMusicStream(musSpy);
-
+
for (int i = 0; i < MAX_CODING_WORDS; i++)
{
if (CheckCollisionPointRec(GetMousePosition(), words[i].rec))
{
words[i].hover = true;
-
+
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
words[i].picked = true;
@@ -290,41 +286,41 @@ void UpdateGameplayScreen(void)
}
}
else words[i].hover = false;
-
-
+
+
if (words[i].picked)
- {
+ {
for (int j = 0; j < missions[currentMission].wordsCount; j++)
- {
+ {
if (CheckCollisionPointRec(GetMousePosition(), messageWords[j].rec)) messageWords[j].hover = true;
else messageWords[j].hover = false;
}
-
+
if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON))
- {
+ {
words[i].picked = false;
-
+
for (int j = 0; j < missions[currentMission].wordsCount; j++)
- {
+ {
messageWords[j].hover = false;
-
+
if (CheckCollisionPointRec(GetMousePosition(), messageWords[j].rec))
{
PlaySound(fxPlace);
-
+
words[i].rec.x = messageWords[j].rec.x;
words[i].rec.y = messageWords[j].rec.y;
-
+
if (messageWords[j].id != -1)
{
int id = messageWords[j].id;
words[id].rec = words[id].iniRec;
}
-
+
messageWords[j].id = i;
for (int k = 0; k < missions[currentMission].wordsCount; k++)
{
- if (j != k && messageWords[j].id == messageWords[k].id)
+ if (j != k && messageWords[j].id == messageWords[k].id)
{
messageWords[k].id = -1;
break;
@@ -332,60 +328,53 @@ void UpdateGameplayScreen(void)
}
break;
}
- else
+ else
{
PlaySound(fxLeave);
-
+
words[i].rec = words[i].iniRec;
if (i == messageWords[j].id) messageWords[j].id = -1;
}
- }
- }
+ }
+ }
}
-
- // TODO: Move word picked with mouse
+
+ // Move word picked with mouse
if (words[i].picked)
{
words[i].rec.x = GetMouseX() - words[i].rec.width/2;
words[i].rec.y = GetMouseY() - words[i].rec.height/2;
-
- // TODO: Check if label is placed in some mission word position
- //if (CheckCollisionRecs(words[i].rec))
- }
- else
- {
- //if (words[i].id != -1)
}
}
-
+
canSend = true;
- for(int j = 0; j < missions[currentMission].wordsCount; j++)
- {
- if(messageWords[j].id == -1)
+ for (int j = 0; j < missions[currentMission].wordsCount; j++)
+ {
+ if (messageWords[j].id == -1)
{
canSend = false;
break;
}
}
-
- if (canSend && (IsKeyPressed(KEY_ENTER) || IsButtonPressed()))
- {
+
+ if (canSend && (IsKeyPressed(KEY_ENTER) || IsButtonPressed()))
+ {
finishScreen = true;
- }
+ }
}
// Gameplay Screen Draw logic
void DrawGameplayScreen(void)
{
DrawTexture(texBackground, 0, 0, WHITE);
-
+
DrawTextEx(fontMessage, missions[currentMission].msg, msgOffset, fontMessage.baseSize, 0, BLACK);
-
+
for (int i = 0; i < missions[currentMission].wordsCount; i++)
{
Rectangle recLines = messageWords[i].rec;
DrawRectangleLines(recLines.x, recLines.y, recLines.width, recLines.height, Fade(RED, 0.35f));
- if(messageWords[i].hover) DrawRectangleRec(messageWords[i].rec, Fade(RED, 0.30f));
+ if (messageWords[i].hover) DrawRectangleRec(messageWords[i].rec, Fade(RED, 0.30f));
DrawText(FormatText("%i", messageWords[i].id), i*25, 0, 30, RED);
}
for (int i = 0; i < MAX_CODING_WORDS; i++)
@@ -394,9 +383,9 @@ void DrawGameplayScreen(void)
else if (words[i].hover) DrawTextureRec(texWordsAtlas, (Rectangle){ 0, i*35, 140, 35 }, (Vector2){ words[i].rec.x, words[i].rec.y }, RED);
else DrawTextureRec(texWordsAtlas, (Rectangle){ 0, i*35, 140, 35 }, (Vector2){ words[i].rec.x, words[i].rec.y }, WHITE);
}
-
+
DrawTexturePro(texVignette, (Rectangle){0,0,texVignette.width, texVignette.height}, (Rectangle){0,0,GetScreenWidth(), GetScreenHeight()}, (Vector2){0,0}, 0, WHITE);
-
+
if (canSend) DrawButton("enviar");
}
@@ -406,13 +395,13 @@ void UnloadGameplayScreen(void)
UnloadTexture(texBackground);
UnloadTexture(texVignette);
UnloadTexture(texWordsAtlas);
-
+
UnloadSound(fxGrab);
UnloadSound(fxLeave);
UnloadSound(fxPlace);
-
+
UnloadMusicStream(musSpy);
-
+
free(missions);
}