|
|
- /**********************************************************************************************
- *
- * raylib - transmission mission
- *
- *
- * Copyright (c) 2014-2019 Ramon Santamaria (@raysan5)
- *
- * This software is provided "as-is", without any express or implied warranty. In no event
- * will the authors be held liable for any damages arising from the use of this software.
- *
- * Permission is granted to anyone to use this software for any purpose, including commercial
- * applications, and to alter it and redistribute it freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not claim that you
- * wrote the original software. If you use this software in a product, an acknowledgment
- * in the product documentation would be appreciated but is not required.
- *
- * 2. Altered source versions must be plainly marked as such, and must not be misrepresented
- * as being the original software.
- *
- * 3. This notice may not be removed or altered from any source distribution.
- *
- **********************************************************************************************/
-
- #include "raylib.h"
- #include "screens.h"
-
- #include <string.h>
- #include <stdlib.h>
-
- #define MISSION_MAX_LENGTH 256
- #define KEYWORD_MAX_LENGTH 32
- #define MAX_LINE_CHAR 75
-
- //----------------------------------------------------------------------------------
- // Global Variables Definition (local to this module)
- //----------------------------------------------------------------------------------
-
- // Mission screen global variables
- static int framesCounter;
- static int finishScreen;
-
- static Texture2D texBackground;
-
- static Texture2D texBackline; //mission_backline
- static Rectangle sourceRecBackLine;
- static Rectangle destRecBackLine;
- static float fadeBackLine;
-
- static Vector2 numberPosition;
- static Color numberColor;
-
- //static char textMission[MISSION_MAX_LENGTH];
- static Vector2 missionPosition;
- static int missionSize;
- static Color missionColor;
- static int missionLenght;
- static bool missionMaxLength;
- static int missionSpeed;
-
- //static char textKeyword[KEYWORD_MAX_LENGTH];
- static Vector2 keywordPosition;
- static Color keywordColor;
-
- static int showMissionWaitFrames;
- static int showNumberWaitFrames;
- static int showKeywordWaitFrames;
-
- static bool startWritting;
- static bool writeMission;
- static bool writeNumber;
- static bool writeKeyword;
- static bool writeEnd;
-
- static bool writtingMission;
-
- static int blinkFrames;
- static bool blinkKeyWord = true;
-
- static bool showButton = false;
-
- static Mission *missions = NULL;
-
- static Sound fxTransmit;
- static Music musMission;
-
- //----------------------------------------------------------------------------------
- // Mission Screen Functions Definition
- //----------------------------------------------------------------------------------
- static void WriteMissionText();
-
-
- // Mission Screen Initialization logic
- void InitMissionScreen(void)
- {
- framesCounter = 0;
- finishScreen = 0;
-
- fadeButton = 0.80f;
-
- texBackground = LoadTexture("resources/textures/mission_background.png");
-
- texBackline = LoadTexture("resources/textures/mission_backline.png");
- sourceRecBackLine = (Rectangle){0,0,GetScreenWidth(), texBackline.height};
- destRecBackLine = (Rectangle){0,0,sourceRecBackLine.width, sourceRecBackLine.height};
- fadeBackLine = 0;
-
- fxTransmit = LoadSound("resources/audio/fx_message.ogg");
- musMission = LoadMusicStream("resources/audio/music_mission.ogg");
-
- PlayMusicStream(musMission);
-
- // Initialize missions
- missions = LoadMissions("resources/missions.txt");
-
- missionMaxLength = strlen(missions[currentMission].brief);
-
- // Insert line breaks every MAX_LINE_CHAR
- int currentLine = 1;
- int i = currentLine * MAX_LINE_CHAR;
-
- while (i < missionMaxLength)
- {
- if (missions[currentMission].brief[i] == ' ')
- {
- missions[currentMission].brief[i] = '\n';
- currentLine++;
- i = currentLine*MAX_LINE_CHAR;
- }
- else i++;
- }
-
- missionSize = 30;
- missionLenght = 0;
- missionSpeed = 1;
-
- numberColor = RAYWHITE;
- missionColor = LIGHTGRAY;
- keywordColor = (Color){198, 49, 60, 255}; //RED
-
- numberPosition = (Vector2){150, 185};
- missionPosition = (Vector2){numberPosition.x, numberPosition.y + 60};
- keywordPosition = (Vector2){missionPosition.x, missionPosition.y + MeasureTextEx(fontMission, missions[currentMission].brief, missionSize, 0).y + 60};
-
- startWritting = false;
- writeNumber = false;
- writeMission = false;
- writeKeyword = false;
- writeEnd = false;
-
- writtingMission = false;
-
- showNumberWaitFrames = 30;
- showMissionWaitFrames = 60;
- showKeywordWaitFrames = 60;
-
- blinkKeyWord = true;
- blinkFrames = 15;
-
- PlaySound(fxTransmit);
- }
-
- // Mission Screen Update logic
- void UpdateMissionScreen(void)
- {
- UpdateMusicStream(musMission);
-
- if (!writeEnd) WriteMissionText();
- else
- {
- framesCounter++;
-
- if ((framesCounter%blinkFrames) == 0)
- {
- framesCounter = 0;
- blinkKeyWord = !blinkKeyWord;
- }
- }
-
- if (showButton)
- {
- if (IsKeyPressed(KEY_ENTER) || IsButtonPressed())
- {
- if (!writeEnd)
- {
- writeEnd = true;
- writeKeyword = true;
- writeNumber = true;
- missionLenght = missionMaxLength;
- }
- else
- {
- finishScreen = true;
- showButton = false;
- }
- }
- }
- }
-
- // Mission Screen Draw logic
- void DrawMissionScreen(void)
- {
- // Draw MISSION screen here!
- DrawTexture(texBackground, 0,0, WHITE);
- DrawTexturePro(texBackline, sourceRecBackLine, destRecBackLine, (Vector2){0,0},0, Fade(WHITE, fadeBackLine));
-
- if (writeNumber) DrawTextEx(fontMission, FormatText("Filtración #%02i ", currentMission + 1), numberPosition, missionSize + 10, 0, numberColor);
- DrawTextEx(fontMission, TextSubtext(missions[currentMission].brief, 0, missionLenght), missionPosition, missionSize, 0, missionColor);
- if (writeKeyword && blinkKeyWord) DrawTextEx(fontMission, FormatText("Keyword: %s", missions[currentMission].key), keywordPosition, missionSize + 10, 0, keywordColor);
-
- if (showButton)
- {
- if (!writeEnd) DrawButton("saltar");
- else DrawButton("codificar");
- }
- }
-
- // Mission Screen Unload logic
- void UnloadMissionScreen(void)
- {
- // Unload MISSION screen variables here!
- UnloadTexture(texBackground);
- UnloadTexture(texBackline);
- UnloadSound(fxTransmit);
- UnloadMusicStream(musMission);
- free(missions);
- }
-
- // Mission Screen should finish?
- int FinishMissionScreen(void)
- {
- return finishScreen;
- }
-
- static void WriteMissionText()
- {
- if (!startWritting)
- {
- framesCounter++;
- if (framesCounter % 60 == 0)
- {
- framesCounter = 0;
- startWritting = true;
- }
- }
- else if (!writeNumber)
- {
- framesCounter++;
- fadeBackLine += 0.020f;
- if (framesCounter % showNumberWaitFrames == 0)
- {
- framesCounter = 0;
- writeNumber = true;
- showButton = true;
- }
- }
- else if (!writeMission)
- {
- framesCounter ++;
- if (framesCounter % showMissionWaitFrames == 0)
- {
- framesCounter = 0;
- writeMission = true;
- writtingMission = true;
- }
- }
- else if (writeMission && writtingMission)
- {
- framesCounter++;
- if (framesCounter % missionSpeed == 0)
- {
- framesCounter = 0;
- missionLenght++;
-
- if (missionLenght == missionMaxLength)
- {
- writtingMission = false;
- }
- }
- }
- else if (!writeKeyword)
- {
- framesCounter++;
- if (framesCounter % showKeywordWaitFrames == 0)
- {
- framesCounter = 0;
- writeKeyword = true;
- writeEnd = true;
- }
- }
- }
|