|
|
- /***********************************************************************************
- *
- * KING GAME JAM - GRAY TEAM
- *
- * <Game title>
- * <Game description>
- *
- * This game has been created using raylib (www.raylib.com)
- * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
- *
- * Copyright (c) 2014 Ramon Santamaria (@raysan5)
- *
- ************************************************************************************/
-
- #include "raylib.h"
- #include "player.h"
-
- #define PLAYER_ANIM_FRAMES 4
- #define PLAYER_ANIM_SEQ 6
-
- //----------------------------------------------------------------------------------
- // Module Variables Definition
- //----------------------------------------------------------------------------------
-
- // Player mouse moving variables
- static bool movingAnim;
- static int moveDirection;
- static int nextMovePoint;
-
- // Mouse pointer variables
- static Vector2 pointerPosition;
- static bool pointerAnim;
- static float pointerAlpha;
-
- static int framesCounter;
- static bool outControl = false;
-
- static int animTimer = 0;
-
- static Texture2D texLife;
-
- static void DrawLifes(void);
-
- // player initialitaction definition
- void InitPlayer(void)
- {
- // NOTE: Some player variables are only initialized once
- player.texture = LoadTexture("resources/textures/skully.png");
- player.position = (Vector2){ 350, 400 };
- player.numLifes = 4;
-
- ResetPlayer();
-
- framesCounter = 0;
-
- texLife = LoadTexture("resources/textures/skully_icon.png");
- }
-
- // player update definition
- void UpdatePlayer(void)
- {
- if (!outControl)
- {
- if ((IsKeyDown(KEY_LEFT)) || (IsKeyDown(KEY_RIGHT)))
- {
- moveDirection = -1;
- movingAnim = false;
- }
-
- if ((IsKeyDown(KEY_RIGHT)) || (moveDirection == 0))
- {
- player.currentSeq = WALK_RIGHT;
- framesCounter++;
-
- if (framesCounter > 15)
- {
- player.currentFrame++;
- framesCounter = 0;
-
- if (player.currentFrame > PLAYER_ANIM_FRAMES - 1) player.currentFrame = 0;
- }
-
- player.position.x += 4;
- }
- else if ((IsKeyDown(KEY_LEFT)) || (moveDirection == 1))
- {
- player.currentSeq = WALK_LEFT;
- framesCounter++;
-
- if (framesCounter > 15)
- {
- player.currentFrame++;
- framesCounter = 0;
-
- if (player.currentFrame > PLAYER_ANIM_FRAMES - 1) player.currentFrame = 0;
- }
-
- player.position.x -= 4;
- }
- else player.currentFrame = 0;
- }
- else
- {
- framesCounter++;
- animTimer++;
-
- if (framesCounter > 10)
- {
- player.currentFrame++;
- framesCounter = 0;
-
- if (player.currentFrame > PLAYER_ANIM_FRAMES - 1) player.currentFrame = 0;
-
- // We can adjust animation playing time depending on sequence
- switch (player.currentSeq)
- {
- case SCARE_RIGHT:
- {
- if (animTimer > 180)
- {
- animTimer = 0;
- outControl = false;
- player.currentSeq = WALK_LEFT;
- }
- } break;
- case SCARE_LEFT:
- {
- if (animTimer > 240)
- {
- animTimer = 0;
- outControl = false;
- player.currentSeq = WALK_RIGHT;
- }
- } break;
- case SEARCH:
- case FIND_KEY:
- {
- if (animTimer > 240)
- {
- animTimer = 0;
- outControl = false;
- player.currentSeq = WALK_RIGHT;
- }
- } break;
- }
- }
- }
-
- if (player.position.x < 30) player.position.x = 30;
- else if (player.position.x > (GetScreenWidth() - 200)) player.position.x = GetScreenWidth() - 200;
-
- if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
- {
- pointerPosition = GetMousePosition();
- pointerAnim = true;
- pointerAlpha = 1.0f;
-
- nextMovePoint = (int)pointerPosition.x;
- movingAnim = true;
- }
-
- if (movingAnim)
- {
- if (nextMovePoint > (player.position.x + (player.frameRec.width/2) + 5)) moveDirection = 0; // Move Left
- else if (nextMovePoint < (player.position.x + (player.frameRec.width/2) - 5)) moveDirection = 1; // Move Right
- else
- {
- moveDirection = -1;
- movingAnim = 0;
- }
- }
-
- player.frameRec.x = player.currentFrame*player.texture.width/PLAYER_ANIM_FRAMES;
- player.frameRec.y = (player.currentSeq - 1)*player.texture.height/PLAYER_ANIM_SEQ;
-
- // Update player bounds
- player.bounds = (Rectangle){ player.position.x + 50, player.position.y - 60, 100, 300 };
-
- // Mouse pointer alpha animation
- if (pointerAnim)
- {
- pointerAlpha -= 0.1f;
-
- if (pointerAlpha <= 0.0f)
- {
- pointerAlpha = 0.0f;
- pointerAnim = false;
- }
- }
- }
- //
- void DrawPlayer(void)
- {
- DrawTextureRec(player.texture, player.frameRec, player.position, WHITE);
-
- // Draw mouse pointer on click
- if (pointerAnim) DrawCircleV(pointerPosition, 20, Fade(RED, pointerAlpha));
-
- DrawLifes();
- }
-
- void UnloadPlayer(void)
- {
- UnloadTexture(player.texture);
- UnloadTexture(texLife);
- }
-
- void ResetPlayer(void)
- {
- // Reset player variables
- player.frameRec = (Rectangle){ 0, 0, player.texture.width/PLAYER_ANIM_FRAMES, player.texture.height/PLAYER_ANIM_SEQ };
- player.currentFrame = 0;
- player.currentSeq = WALK_RIGHT;
-
- player.key = false;
- player.dead = false;
-
- // Reset player position
- if (player.position.x < 400) player.position.x = GetScreenWidth() - 350;
- if (player.position.x > (GetScreenWidth() - 400)) player.position.x = 350;
-
- // Reset moving variables
- movingAnim = false;
- moveDirection = -1;
- nextMovePoint = 0;
- framesCounter = 0;
- outControl = false;
- animTimer = 0;
-
- // Reset pointer
- pointerAlpha = 0.0f;
- pointerAnim = false;
- }
-
- void ScarePlayer(void)
- {
- player.currentFrame = 0;
-
- if (moveDirection == 0) player.currentSeq = SCARE_RIGHT;
- else if (moveDirection == 1) player.currentSeq = SCARE_LEFT;
- else player.currentSeq = SCARE_RIGHT;
-
- player.numLifes--;
-
- if (player.numLifes <= 0) player.dead = true;
-
- outControl = true;
- }
-
- void SearchKeyPlayer(void)
- {
- moveDirection = -1;
- movingAnim = 0;
-
- player.currentFrame = 0;
- player.currentSeq = SEARCH;
-
- outControl = true;
- }
-
- void FindKeyPlayer(void)
- {
- player.currentFrame = 0;
- player.currentSeq = FIND_KEY;
- player.key = true;
-
- outControl = true;
- }
-
- static void DrawLifes(void)
- {
- if (player.numLifes != 0)
- {
- Vector2 position = { 20, GetScreenHeight() - texLife.height - 20 };
-
- for(int i = 0; i < player.numLifes; i++)
- {
- DrawTexture(texLife, position.x + i*texLife.width, position.y, Fade(RAYWHITE, 0.7f));
- }
- }
- }
|