mirror of
https://github.com/raysan5/raylib.git
synced 2026-02-04 21:29:18 -05:00
Added game sources: Skully Escape
This game was developed for King GameJam 2015
This commit is contained in:
281
games/skully_escape/player.c
Normal file
281
games/skully_escape/player.c
Normal file
@ -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 - raysan@raysanweb.com)
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#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));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user