| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464 |
- /*******************************************************************************************
- *
- * raylib [textures] example - Texture loading and drawing a part defined by a rectangle
- *
- * This example has been created using raylib 1.3 (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"
- #define MAX_FRAME_SPEED 15
- #define MIN_FRAME_SPEED 1
- #define animIdle 0
- #define animKick 1
- #define animHit1 2
- #define animUcut 3
- #define animHit2 4
- #define animWalk 5
- #define animDamage 6
- #define animFlying 7
- #define MAX_PLAYERS 1
- typedef struct player{
- bool active;
- float facing; //-1 left, 1 right
- Vector2 position;
- int w;
- int h;
- int score;
- int health;
- int currentFrame;
- int currentAnim; // which animation is currenty active
- int lastAnim;
- int framesCounter;
- int frame_start;
- int frame_end;
- int keynothingtime; // when key is down this is zero (used to disable animations..)
- int lastFiretime;
- int lastFireAnim;
- }player;
- static struct player p[MAX_PLAYERS];
- // controls for player (true/false) ,,add function to read keyboard/joypad/touchscreen
- bool LEFT;
- bool RIGHT;
- bool UP;
- bool DOWN;
- bool FIRE1;
- bool FIRE2;
- // currentframe hold the current position of the cells (typewriter style)
- int currentFrame;
- int framesSpeed = 8; // Number of spritesheet frames shown by second
- Rectangle frameRec = { 0.0f, 0.0f, (float)96, (float)96 };
- int frame_start = 0;
- int frame_end = 0;
- int frame_kickstart = 1;
- int frame_kickend = 3;
- int frame_hit1start = 16;
- int frame_hit1end = 18;
- int frame_ucutstart = 31;
- int frame_ucutend = 33;
- int frame_hit2start = 46;
- int frame_hit2end = 48;
- int frame_walkstart = 61;
- int frame_walkend = 62;
- int frame_damagestart = 76;
- int frame_damageend = 77;
- int frame_flyingstart = 92;
- int frame_flyingend = 93;
- int frame_idlestart = 1;
- int frame_idleend = 1;
- // this sets the frame to start and sets start and end position(loop)
- void setanimation(int anim);
- void drawplayers();
- void updateplayer(int player);
- void setplayeranimation(int player, int anim);
- void playercontrols(int player);
- Texture2D scarfy;
- Texture2D backg;
- int main(void)
- {
- // Initialization
- //--------------------------------------------------------------------------------------
- const int screenWidth = 1400;
- const int screenHeight = 768;
- InitWindow(screenWidth, screenHeight, "raylib [texture] example - texture rectangle");
- // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
- //Texture2D scarfy = LoadTexture("resources/mrskelly.png"); // Texture loading
- //Texture2D backg = LoadTexture("resources/onedragon.png");
- scarfy = LoadTexture("resources/mrskelly.png"); // Texture loading
- backg = LoadTexture("resources/onedragon.png");
- Vector2 position = { 350.0f, 480.0f };
- //Rectangle frameRec = { 0.0f, 0.0f, (float)96, (float)96 };
- //int currentFrame = frame_kickstart;
- int framesCounter = 0;
- SetTargetFPS(60); // Set our game to run at 60 frames-per-second
- //--------------------------------------------------------------------------------------
- //setanimation(animKick);
- //setanimation(animFlying);
-
- p[0].facing=1;
- p[0].position.y = 370;
- p[0].position.x = 320;
- setplayeranimation(0,animIdle);
- //other sprites -
- int mod=0;
- // Main game loop
- while (!WindowShouldClose()) // Detect window close button or ESC key
- {
-
- playercontrols(0);
- updateplayer(0);
- /*
- // Update
- //----------------------------------------------------------------------------------
- framesCounter++;
- // Switch between characters
- if(GetRandomValue(0,100)==1){
- setanimation(GetRandomValue(1,7));
- switch(GetRandomValue(0,2)){
- case 0:
- mod=0;
- break;
- case 1:
- mod=5;
- break;
- case 2:
- mod = 9;
- break;
- }
- }
-
- if (framesCounter >= (60/framesSpeed))
- {
- framesCounter = 0;
- currentFrame++;
- if (currentFrame > frame_end) currentFrame = frame_start;
- int ypos = currentFrame/15;
- frameRec.y = (float)(currentFrame/15)*(float)96;
- frameRec.x = (float)((currentFrame+mod)-ypos*15)*(float)96;
-
- }
- // temp controls
- if (IsKeyDown(KEY_RIGHT)) position.x+=2;
- else if (IsKeyDown(KEY_LEFT)) position.x-=2;
- if (IsKeyDown(KEY_DOWN)) position.y+=2;
- else if (IsKeyDown(KEY_UP)) position.y-=2;
- */
- //----------------------------------------------------------------------------------
- // Draw
- //----------------------------------------------------------------------------------
- BeginDrawing();
- ClearBackground(RAYWHITE);
- DrawTexture(backg, 0, 0, WHITE);
- DrawTexture(scarfy, 15, 40, WHITE);
- drawplayers();
-
- /*
- DrawRectangleLines(15, 40, scarfy.width, scarfy.height, LIME);
- DrawRectangleLines(15 + (int)frameRec.x, 40 + (int)frameRec.y, (int)frameRec.width, (int)frameRec.height, RED);
- DrawText("FRAME SPEED: ", 165, 210, 10, DARKGRAY);
- DrawText(TextFormat("%02i FPS", framesSpeed), 575, 210, 10, DARKGRAY);
- DrawText("PRESS RIGHT/LEFT KEYS to CHANGE SPEED!", 290, 240, 10, DARKGRAY);
- for (int i = 0; i < MAX_FRAME_SPEED; i++)
- {
- if (i < framesSpeed) DrawRectangle(250 + 21*i, 205, 20, 20, RED);
- DrawRectangleLines(250 + 21*i, 205, 20, 20, MAROON);
- }
- //DrawTextureRec(scarfy, frameRec, position, WHITE); // Draw part of the texture
- DrawTextureRec(scarfy, frameRec, (Vector2){position.x+96,position.y}, WHITE); // Draw part of the texture
- DrawTexturePro(scarfy, (Rectangle){frameRec.x,frameRec.y,-96,96},// the -96 (-)means mirror on x axis
- (Rectangle){position.x,position.y,96,96},
- (Vector2){0,0},0,WHITE);
- DrawText("(c) Scarfy sprite by Eiden Marsal", screenWidth - 200, screenHeight - 20, 10, GRAY);
- */
- DrawRectangle(0,2,screenWidth,23,WHITE);
- DrawText("Cursor LEFT/RIGHT/UP/DOWN Z(FIRE1)/X(FIRE2)", 0, 0, 30, BLACK);
- EndDrawing();
- //----------------------------------------------------------------------------------
- }
- // De-Initialization
- //--------------------------------------------------------------------------------------
- UnloadTexture(scarfy); // Texture unloading
- CloseWindow(); // Close window and OpenGL context
- //--------------------------------------------------------------------------------------
- return 0;
- }
- void setanimation(int anim){
- switch(anim){
- case animKick:
- frame_start = frame_kickstart;
- frame_end = frame_kickend;
-
- break;
- case animHit1:
- frame_start = frame_hit1start;
- frame_end = frame_hit1end;
- break;
- case animUcut:
- frame_start = frame_ucutstart;
- frame_end = frame_ucutend;
- break;
- case animHit2:
- frame_start = frame_hit2start;
- frame_end = frame_hit2end;
- break;
- case animWalk:
- frame_start = frame_walkstart;
- frame_end = frame_walkend;
- break;
- case animDamage:
- frame_start = frame_damagestart;
- frame_end = frame_damageend;
- break;
- case animFlying:
- frame_start = frame_flyingstart;
- frame_end = frame_flyingend;
- break;
- }
- currentFrame = frame_start;
- }
- void drawplayers(){
- if(p[0].facing==1){
- DrawTextureRec(scarfy, frameRec, (Vector2){p[0].position.x,p[0].position.y}, WHITE); // Draw part of the texture
- }else{
- DrawTexturePro(scarfy, (Rectangle){frameRec.x,frameRec.y,-96,96},// the -96 (-)means mirror on x axis
- (Rectangle){p[0].position.x,p[0].position.y,96,96},
- (Vector2){0,0},0,WHITE);
- }
-
- }
- void setplayeranimation(int player, int anim){
- p[player].lastAnim = anim;
- switch(anim){
- case animIdle:
- p[player].frame_start = frame_idlestart;
- p[player].frame_end = frame_idleend;
- p[player].currentFrame = p[player].frame_start;
- break;
- case animKick:
- p[player].frame_start = frame_kickstart;
- p[player].frame_end = frame_kickend;
- p[player].currentFrame = p[player].frame_start;
- break;
- case animHit1:
- p[player].frame_start = frame_hit1start;
- p[player].frame_end = frame_hit1end;
- p[player].currentFrame = p[player].frame_start;
- break;
- case animUcut:
- p[player].frame_start = frame_ucutstart;
- p[player].frame_end = frame_ucutend;
- p[player].currentFrame = p[player].frame_start;
- break;
- case animHit2:
- p[player].frame_start = frame_hit2start;
- p[player].frame_end = frame_hit2end;
- p[player].currentFrame = p[player].frame_start;
- break;
- case animWalk:
- if(p[0].currentAnim!=animWalk){
- p[player].frame_start = frame_walkstart;
- p[player].frame_end = frame_walkend;
- p[player].currentFrame = p[player].frame_start;
- }
- break;
- case animDamage:
- p[player].frame_start = frame_damagestart;
- p[player].frame_end = frame_damageend;
- p[player].currentFrame = p[player].frame_start;
- break;
- case animFlying:
- p[player].frame_start = frame_flyingstart;
- p[player].frame_end = frame_flyingend;
- p[player].currentFrame = p[player].frame_start;
-
- break;
-
- }
- p[player].currentAnim = anim;
- }
- void updateplayer(int player){
- // animation
- p[player].lastFiretime++;
- p[player].keynothingtime++;
- p[player].framesCounter++;
-
- if (p[0].framesCounter >= (60/framesSpeed))
- {
- p[0].framesCounter = 0;
- p[0].currentFrame++;
- if (p[0].currentFrame > p[0].frame_end) p[0].currentFrame = p[0].frame_start;
- int ypos = p[0].currentFrame/15;
- frameRec.y = (float)(p[0].currentFrame/15)*(float)96;
- frameRec.x = (float)((p[0].currentFrame)-ypos*15)*(float)96;
-
- }
-
- // player movement
- if(p[player].currentAnim == animWalk && p[player].keynothingtime>1){
- setplayeranimation(player,animIdle);
- }
- if(p[player].currentAnim == animHit1 && p[player].keynothingtime>15){
-
- setplayeranimation(player,animIdle);
- }
- if(p[player].currentAnim == animHit2 && p[player].keynothingtime>15){
- setplayeranimation(player,animIdle);
-
- }
- if(p[player].currentAnim == animKick && p[player].keynothingtime>15){
- setplayeranimation(player,animIdle);
- }
-
-
-
- if(LEFT==false && RIGHT==false && UP==false && DOWN==false && FIRE1){
- if(p[player].lastFireAnim==animHit2){
- setplayeranimation(player,animHit1);
- p[player].lastFireAnim=animHit1;
- }else{
- setplayeranimation(player,animHit2);
- p[player].lastFireAnim=animHit2;
- }
- FIRE1=false;
- }
- if(LEFT==false && RIGHT==false && UP==false && DOWN==false && FIRE2){
- setplayeranimation(player,animKick);
- FIRE2=false;
- }
- if (RIGHT){
- p[player].lastFiretime=50;
- p[0].facing = 1;
- p[0].position.x+=2;
- RIGHT=false;
- setplayeranimation(player,animWalk);
- }
- else if (LEFT){
- p[player].lastFiretime=50;
- p[0].facing=-1;
- p[0].position.x-=2;
- LEFT=false;
- setplayeranimation(player,animWalk);
- }
- if (DOWN){
- p[player].lastFiretime=50;
- p[0].position.y+=2;
- DOWN=false;
- setplayeranimation(player,animWalk);
- }
- else if (UP){
- p[player].lastFiretime=50;
- p[0].position.y-=2;
- UP=false;
- setplayeranimation(player,animWalk);
- }
-
- }
- void playercontrols(int player){
- if (p[player].lastFiretime>30 && IsKeyDown(KEY_Z) && FIRE1==false && FIRE2==false){
- FIRE1 = true;
- p[player].lastFiretime=0;
- p[player].keynothingtime = 0;
- }
- if (p[player].lastFiretime>30 && IsKeyDown(KEY_X) && FIRE1==false && FIRE2==false){
- FIRE2 = true;
- p[player].lastFiretime=0;
- p[player].keynothingtime = 0;
- }
-
- if (IsKeyDown(KEY_RIGHT)){
- RIGHT = true;
- LEFT = false;
- p[player].keynothingtime = 0;
- }
- else if (IsKeyDown(KEY_LEFT)){
- LEFT = true;
- RIGHT = false;
- p[player].keynothingtime = 0;
- }
- if (IsKeyDown(KEY_DOWN)){
- DOWN = true;
- UP = false;
- p[player].keynothingtime = 0;
- }
- else if (IsKeyDown(KEY_UP)){
- UP = true;
- DOWN = false;
- p[player].keynothingtime = 0;
- }
-
- }
|