summaryrefslogtreecommitdiffhomepage
path: root/games/skully_escape/player.c
diff options
context:
space:
mode:
Diffstat (limited to 'games/skully_escape/player.c')
-rw-r--r--games/skully_escape/player.c281
1 files changed, 281 insertions, 0 deletions
diff --git a/games/skully_escape/player.c b/games/skully_escape/player.c
new file mode 100644
index 00000000..11006f65
--- /dev/null
+++ b/games/skully_escape/player.c
@@ -0,0 +1,281 @@
+/***********************************************************************************
+*
+* 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 (Ray San - [email protected])
+*
+************************************************************************************/
+
+#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));
+ }
+ }
+} \ No newline at end of file