From 42ecaaefd2b8ca217aee2204b5de7a5a5a8f6a09 Mon Sep 17 00:00:00 2001 From: Rtch90 Date: Sun, 15 Apr 2012 22:15:23 +0100 Subject: [PATCH] [Add] Added Animating sprites. -- Bit buggy right now. --- Data/Img/Player.png | Bin 1581 -> 1537 bytes Data/Img/Player/Front/Player_F.000.png | Bin 0 -> 1537 bytes Data/Img/Player/Front/Player_F.001.png | Bin 0 -> 1204 bytes Data/Img/Player/Front/Player_F.002.png | Bin 0 -> 1218 bytes Data/Img/Player/Front/Player_F.003.png | Bin 0 -> 1216 bytes Data/Img/Player/Front/Player_F.txt | 3 + Data/Img/Player/Player_F | 0 Data/Img/Reniesta.png | Bin 0 -> 7001 bytes src/Actor/Actor.cpp | 31 ++++++- src/Actor/Actor.h | 34 +++++--- src/Actor/NPC.cpp | 1 + src/Actor/Player.cpp | 4 + src/Animation/AnimatingSprite.cpp | 29 ++++++- src/Animation/AnimatingSprite.h | 12 +-- src/Animation/AnimationSequence.cpp | 3 +- src/Animation/AnimationSequence.h | 4 +- src/Main/Game.cpp | 3 - src/Sprite/Sprite.cpp | 1 - src/Sprite/Sprite.h | 2 + src/System/Debug.cpp | 108 ++++++++++++------------- src/System/ResourceManager.h | 2 + src/System/String.cpp | 20 ++++- src/System/String.h | 2 + src/Texture/Texture.cpp | 61 +++++++------- 24 files changed, 206 insertions(+), 114 deletions(-) create mode 100644 Data/Img/Player/Front/Player_F.000.png create mode 100644 Data/Img/Player/Front/Player_F.001.png create mode 100644 Data/Img/Player/Front/Player_F.002.png create mode 100644 Data/Img/Player/Front/Player_F.003.png create mode 100644 Data/Img/Player/Front/Player_F.txt create mode 100644 Data/Img/Player/Player_F create mode 100644 Data/Img/Reniesta.png diff --git a/Data/Img/Player.png b/Data/Img/Player.png index 2a832071ce20b7f40f365e3cdc782e6573d26444..af300daa7fc9432adfa31fed7a43de33c950bfe5 100644 GIT binary patch delta 1527 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 V`~+hU#c}`u002ovPDHLkV1m2H^(g=V diff --git a/Data/Img/Player/Front/Player_F.000.png b/Data/Img/Player/Front/Player_F.000.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3b6598e0f88ec8f1780d9f7d3f68aa353257ab GIT binary patch literal 1537 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 literal 0 HcmV?d00001 diff --git a/Data/Img/Player/Front/Player_F.003.png b/Data/Img/Player/Front/Player_F.003.png new file mode 100644 index 0000000000000000000000000000000000000000..7c4035525c9b76f66f99c1943243ddb8c0f1ffe7 GIT binary patch literal 1216 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 SukO1)wUp%5; literal 0 HcmV?d00001 diff --git a/src/Actor/Actor.cpp b/src/Actor/Actor.cpp index d6b7165..fc8c751 100644 --- a/src/Actor/Actor.cpp +++ b/src/Actor/Actor.cpp @@ -12,7 +12,14 @@ Actor::Actor(void) { _stepSFX[3] = sfxManager.Load("../Data/SFX/step_cloth4.wav"); _lastStepSFXPlayed = -1; - _velocity = 4.0f; + _velocity = 4.0f; + _direction = Front; + _preventMovement = NONE; + + _actorLeft = new AnimatingSprite(); + _actorRight = new AnimatingSprite(); + _actorFront = new AnimatingSprite(); + _actorBack = new AnimatingSprite(); } Actor::~Actor(void) { @@ -23,6 +30,10 @@ Actor::~Actor(void) { } } delete _actor; + delete _actorLeft; + delete _actorRight; + delete _actorFront; + delete _actorBack; } void Actor::LoadSprite(const char* filename) { @@ -35,6 +46,24 @@ void Actor::Update(float dt) { float oldX = x = _actor->GetX(); float oldY = y = _actor->GetY(); + + if(_direction == LEFT) { + _actorLeft->Update(dt); + } + else if(_direction == RIGHT) { + _actorRight->Update(dt); + } + else if(_direction == Front) { + _actorFront->Update(dt); + } + else if(_direction == BACK) { + _actorBack->Update(dt); + } + + // We should check for collisions now. + + + Move(dt); if(x != oldX || y != oldY) { diff --git a/src/Actor/Actor.h b/src/Actor/Actor.h index 274670b..a5bfad5 100644 --- a/src/Actor/Actor.h +++ b/src/Actor/Actor.h @@ -2,12 +2,27 @@ #include #include "../Sprite/Sprite.h" +#include "../Animation/AnimatingSprite.h" #include "../Math/Vec2.h" class SoundEffect; class Actor { public: + + enum Facing { + Front, + BACK, + LEFT, + RIGHT, + NONE + }; + + enum Status { + WALKING, + HURT + }; + Actor(void); ~Actor(void); @@ -24,21 +39,22 @@ public: void SetXY(float xArg, float yArg) { x = xArg; y = yArg; } - int GetDirection(void) { return _direction; } - void SetDirection(int direction) { _direction = direction; } + Facing GetDirection(void) { return _direction; } + void SetDirection(Facing direction) { _direction = direction; } protected: virtual void Move(float dt) = 0; float _velocity; - int _direction; - - static const int ANIM_LEFT_FOOT = 0; - static const int ANIM_NO_FOOT = 1; - static const int ANIM_RIGHT_FOOT = 2; - static const int ANIM_ATTACK = 3; Sprite* _actor; + AnimatingSprite* _actorLeft; + AnimatingSprite* _actorRight; + AnimatingSprite* _actorFront; + AnimatingSprite* _actorBack; + + Facing _direction; + Facing _preventMovement; float x; float y; @@ -47,8 +63,6 @@ private: float w; float h; - Vec2 _spriteVector[4][4]; - SoundEffect* _stepSFX[4]; int _lastStepSFXPlayed; }; diff --git a/src/Actor/NPC.cpp b/src/Actor/NPC.cpp index 32da851..3b86515 100644 --- a/src/Actor/NPC.cpp +++ b/src/Actor/NPC.cpp @@ -1,6 +1,7 @@ #include "NPC.h" NPC::NPC(void) : Actor() { + LoadSprite("../Data/Img/Player.png"); } NPC::~NPC(void) { diff --git a/src/Actor/Player.cpp b/src/Actor/Player.cpp index 9d69817..d10be73 100644 --- a/src/Actor/Player.cpp +++ b/src/Actor/Player.cpp @@ -2,6 +2,10 @@ #include "../IO/Input.h" Player::Player(void) : Actor() { + Actor::_actorFront->LoadAnimatingSprite("Player_f", "../Data/Img/Player/Front/Player_F", "../Data/Img/Player/Player_F", 4, _velocity); + //Actor::_actorFront->LoadAnimatingSprite("Player_b", "../Data/Img/Player/Front/Player_B", "../Data/Img/Player/Player_B", 4, _velocity); + //Actor::_actorFront->LoadAnimatingSprite("Player_L", "../Data/Img/Player/Front/Player_L", "../Data/Img/Player/Player_L", 4, _velocity); + //Actor::_actorFront->LoadAnimatingSprite("Player_R", "../Data/Img/Player/Front/Player_R", "../Data/Img/Player/Player_R", 4, _velocity); } Player::~Player(void) { diff --git a/src/Animation/AnimatingSprite.cpp b/src/Animation/AnimatingSprite.cpp index 7a8554a..bf4733f 100644 --- a/src/Animation/AnimatingSprite.cpp +++ b/src/Animation/AnimatingSprite.cpp @@ -59,13 +59,34 @@ void AnimatingSprite::Update(float dt) { void AnimatingSprite::LoadAnimatingSprite(const char* id, const char* filename, const char* sequence, int frames, float animationSpeed) { - + for(int i = 0; i < frames; i++) { + String tempFilename; + tempFilename = ""; + if(i < 10) { + tempFilename.Format("%s.00%i.png", filename, i); + } + else if(i < 100) { + tempFilename.Format("%s.0%i.png", filename, i); + } else { + tempFilename.Format("%s.%i.png", filename, i); + } + _sprites[_spriteCounter] = new Sprite(); + _sprites[_spriteCounter]->LoadSprite((const char*)tempFilename); + _spriteCounter++; + } + _id = id; + _numberOfFrames = frames; + _animationSpeed = animationSpeed; + _sequence = new AnimationSequence(sequence); + SetCurrentAnimation(0); } -void AnimatingSprite::SetCurrentAnimation(const char* filename) { - +void AnimatingSprite::SetCurrentAnimation(const char* animation) { + _currentAnimation = _sequence->GetAnimation(animation)->_animationID; + _currentFrame = _sequence->GetAnimation(animation)->frameBegin; } void AnimatingSprite::SetCurrentAnimation(int index) { - + _currentAnimation = _sequence->GetAnimation(index)->_animationID; + _currentFrame = _sequence->GetAnimation(index)->frameBegin; } diff --git a/src/Animation/AnimatingSprite.h b/src/Animation/AnimatingSprite.h index 1d068a0..b14805b 100644 --- a/src/Animation/AnimatingSprite.h +++ b/src/Animation/AnimatingSprite.h @@ -29,11 +29,11 @@ private: int _spriteCounter; AnimationSequence* _sequence; - String _id; - float _animationSpeed; - float _timer; - int _currentFrame; - int _numberOfFrames; + const char* _id; + float _animationSpeed; + float _timer; + int _currentFrame; + int _numberOfFrames; - String _currentAnimation; + const char* _currentAnimation; }; diff --git a/src/Animation/AnimationSequence.cpp b/src/Animation/AnimationSequence.cpp index 573c1ec..dfc0882 100644 --- a/src/Animation/AnimationSequence.cpp +++ b/src/Animation/AnimationSequence.cpp @@ -24,7 +24,6 @@ AnimationSequence::AnimationSequence(void) { AnimationSequence::AnimationSequence(const char* filename) { _numberOfFrames = 0; _sequenceID = filename; - _sequenceID.Concatenate(".txt"); ReadFile(); } @@ -70,7 +69,7 @@ void AnimationSequence::ReadFile(void) { _animations[index]->_loopTo = loop; } } else { - //Debug::logger->message("%s does not exist.", _sequenceID); + Debug::logger->message("%s does not exist.", _sequenceID); assert(false); } } diff --git a/src/Animation/AnimationSequence.h b/src/Animation/AnimationSequence.h index fc8de86..d1c05b1 100644 --- a/src/Animation/AnimationSequence.h +++ b/src/Animation/AnimationSequence.h @@ -12,7 +12,7 @@ class AnimationSequence { struct Animation { - String _animationID; + const char* _animationID; int frameBegin; int frameEnd; String _loopTo; @@ -30,7 +30,7 @@ public: private: const char* Scan(char* source, int& counter); - String _sequenceID; + const char* _sequenceID; int _numberOfFrames; FileReader _file; Animation* _animations[MAX_FRAMES]; diff --git a/src/Main/Game.cpp b/src/Main/Game.cpp index 7e21ba5..c11ec37 100644 --- a/src/Main/Game.cpp +++ b/src/Main/Game.cpp @@ -20,9 +20,6 @@ Game::Game(void) { _NPC = new NPC(); _level = new Level(); - _player->LoadSprite("../Data/Img/Player.png"); - _NPC->LoadSprite("../Data/Img/Player.png"); - _NPC->SetXY(30.0f, 30.0f); _testFont = new Font(); diff --git a/src/Sprite/Sprite.cpp b/src/Sprite/Sprite.cpp index 595cbf7..85c7ba6 100644 --- a/src/Sprite/Sprite.cpp +++ b/src/Sprite/Sprite.cpp @@ -101,4 +101,3 @@ void Sprite::SetTexture(Texture* texture) { this->texture = texture; this->size = Vec2((float)texture->GetWidth(), (float)texture->GetHeight()); } - diff --git a/src/Sprite/Sprite.h b/src/Sprite/Sprite.h index 1729c63..1e971cb 100644 --- a/src/Sprite/Sprite.h +++ b/src/Sprite/Sprite.h @@ -1,5 +1,7 @@ #pragma once #include +#include +#include "../System/String.h" #include "../Math/Vec2.h" #include "../Math/Rect.h" diff --git a/src/System/Debug.cpp b/src/System/Debug.cpp index bc8e673..d743bbc 100644 --- a/src/System/Debug.cpp +++ b/src/System/Debug.cpp @@ -18,85 +18,85 @@ using namespace std; Debug *Debug::logger = NULL; Debug::Debug(bool logToFile) { - time_t timestamp; - if(logToFile) { - _logFile.open("../Bin/Debug.log", ios::out); - if(!_logFile.is_open()) { - // We can not open our log. - cerr << "Warning: Can not open Debug.log to write, continueing without logging\n"; + time_t timestamp; + if(logToFile) { + _logFile.open("../Bin/Debug.log", ios::out); + if(!_logFile.is_open()) { + // We can not open our log. + cerr << "Warning: Can not open Debug.log to write, continueing without logging\n"; - } else { - // Log File is open, let us give it a nice time stamp. - timestamp = time(NULL); - _logFile << "Log Started: " << ctime(×tamp) << endl; - } - } + } else { + // Log File is open, let us give it a nice time stamp. + timestamp = time(NULL); + _logFile << "Log Started: " << ctime(×tamp) << endl; + } + } } Debug::~Debug(void) { - time_t timestamp; + time_t timestamp; - // We only need to close the log if it is open. - if(_logFile.is_open()) { - // Give it a closing timestamp. - timestamp = time(NULL); - _logFile << endl << "Log Closed: " << ctime(×tamp) << endl; + // We only need to close the log if it is open. + if(_logFile.is_open()) { + // Give it a closing timestamp. + timestamp = time(NULL); + _logFile << endl << "Log Closed: " << ctime(×tamp) << endl; - // Close the log file. - _logFile.close(); - } + // Close the log file. + _logFile.close(); + } } void Debug::message(std::string msg) { - if(_logFile.is_open()) { - _logFile << msg << endl; - } - cerr << msg << endl << endl; + if(_logFile.is_open()) { + _logFile << msg << endl; + } + cerr << msg << endl << endl; } void Debug::message(const char *msg, ...) { - va_list vargList; // This is to handlle the variable arguments + va_list vargList; // This is to handlle the variable arguments - char outBuf[1024]; - unsigned short outLen; + char outBuf[1024]; + unsigned short outLen; - // This takes the arguments and puts them into the character array. - va_start(vargList, msg); + // This takes the arguments and puts them into the character array. + va_start(vargList, msg); -#if defined WIN32 - outLen = _vsnprintf(outBuf, sizeof(outBuf), msg, vargList); +#ifdef WIN32 + outLen = _vsnprintf(outBuf, sizeof(outBuf), msg, vargList); #else - outLen = vsnprintf(outBuf, sizeof(outBuf), msg, vargList); + outLen = vsnprintf(outBuf, sizeof(outBuf), msg, vargList); #endif - va_end(vargList); + va_end(vargList); - if(outLen >= sizeof(outBuf)) { - outLen = sizeof(outBuf); - } + if(outLen >= sizeof(outBuf)) { + outLen = sizeof(outBuf); + } - if(_logFile.is_open()) { - _logFile << outBuf << endl; - } + if(_logFile.is_open()) { + _logFile << outBuf << endl; + } - cerr << outBuf << endl; + cerr << outBuf << endl; } bool Debug::openLog(bool logToFile) { - // Make sure the logger has not already been initialized. - if(logger != NULL) { - logger->message("Warning: Multiple calls to openLog()."); - return false; - } - logger = new Debug(logToFile); - return true; + // Make sure the logger has not already been initialized. + if(logger != NULL) { + logger->message("Warning: Multiple calls to openLog()."); + return false; + } + logger = new Debug(logToFile); + return true; } void Debug::closeLog(void) { - if(logger == NULL) { - cerr << "Warning: Call to closeLog() with NULL logger pointer." << endl; - return; - } - delete logger; - logger = NULL; + if(logger == NULL) { + cerr << "Warning: Call to closeLog() with NULL logger pointer." << endl; + return; + } + delete logger; + logger = NULL; } diff --git a/src/System/ResourceManager.h b/src/System/ResourceManager.h index 6724613..a5b706e 100644 --- a/src/System/ResourceManager.h +++ b/src/System/ResourceManager.h @@ -3,6 +3,8 @@ #include #include +#include "../System/String.h" + class Resource { public: virtual bool Load(const std::string& filename) = 0; diff --git a/src/System/String.cpp b/src/System/String.cpp index 187e1ef..3bc38ae 100644 --- a/src/System/String.cpp +++ b/src/System/String.cpp @@ -1,7 +1,10 @@ +#ifdef _WIN32 +#define "windows.h" +#endif #include #include #include - +#include #include "String.h" #define _CRT_SECURE_NO_WARNINGS @@ -40,6 +43,21 @@ int String::Length(void) { return strlen(_string); } +void String::Format(const char* format, ...) { + char temp[256]; + va_list vlist; + + va_start(vlist, format); +#ifdef _WIN32 + vsprintf_s(&temp[0], 256, format, vlist); +#else + vsnprintf(&temp[0], 256, format, vlist); +#endif + va_end(vlist); + + memcpy(_string, temp, strlen(temp)+1); +} + void String::Concatenate(char value) { // Concatenate a char on the end of a string. assert(strlen(_string) + 1 < MAX_STRING_LEN); diff --git a/src/System/String.h b/src/System/String.h index 276f8f6..6d723ab 100644 --- a/src/System/String.h +++ b/src/System/String.h @@ -16,6 +16,8 @@ public: void Concatenate(char value); int Length(void); + void Format(const char* format, ...); + // Operator overloads. String& operator=(const char* value); String& operator=(String& value); diff --git a/src/Texture/Texture.cpp b/src/Texture/Texture.cpp index 0842157..1a669e1 100644 --- a/src/Texture/Texture.cpp +++ b/src/Texture/Texture.cpp @@ -34,7 +34,7 @@ int BuildTexture(const char* filename, GLuint* texID, GLint param, bool genMips) // Load the image, check for errors, if it isn't found, quit. textureImage = IMG_Load(filename); - + if(!textureImage) { Debug::logger->message("Warning: could not load %s", filename); return false; @@ -70,18 +70,18 @@ int BuildTexture(const char* filename, GLuint* texID, GLint param, bool genMips) SDL_FreeSurface(textureImage); return false; } - + // Create the texture. glGenTextures(1, texID); - + // Typical texture generation using data from the bitmap. BindTexture(*texID); - + // Setup filtering. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, param); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, param); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - + if(genMips) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Generate the textures and mipmaps. @@ -107,52 +107,52 @@ int LoadTGAFile(const char* filename, TGAFILE* tgaFile) { int colorMode; // 4 for RGBA or 3 for RGB. long imgIndex; // counter variable. unsigned char colorSwap; // Swap variable. - + // Open the TGA file. filePtr = fopen(filename, "rb"); if(!filePtr) return 0; - + // Read the first two bytes of garbage. fread(&ucharBad, sizeof(unsigned char), 1, filePtr); fread(&ucharBad, sizeof(unsigned char), 1, filePtr); - + // Read in the image type. fread(&tgaFile->textureTypeCode, sizeof(unsigned char), 1, filePtr); - + // The texture type should be either 2(color) or 3(greyscale). if((tgaFile->textureTypeCode != 2) && (tgaFile->textureTypeCode != 3)) { fclose(filePtr); return 0; } - + // Read 13 bytes of garbage data. fread(&sintBad, sizeof(short int), 1, filePtr); fread(&sintBad, sizeof(short int), 1, filePtr); fread(&ucharBad, sizeof(unsigned char), 1, filePtr); fread(&sintBad, sizeof(short int), 1, filePtr); fread(&sintBad, sizeof(short int), 1, filePtr); - + // Read image dimensions. fread(&tgaFile->textureWidth, sizeof(short int), 1, filePtr); fread(&tgaFile->textureHeight, sizeof(short int), 1, filePtr); - + // Read image bit depth. fread(&tgaFile->bitCount, sizeof(unsigned char), 1, filePtr); - + // Read 1 byte of garbage data. fread(&ucharBad, sizeof(unsigned char), 1, filePtr); - + // colorMode -> 3 = BGR, 4 = BGRA colorMode = tgaFile->bitCount / 8; imageSize = tgaFile->textureWidth * tgaFile->textureHeight * colorMode; - + // Allocate memory for image data. tgaFile->textureData = (unsigned char*)malloc(sizeof(unsigned char)*imageSize); - + // Read in the image data. fread(tgaFile->textureData, sizeof(unsigned char), imageSize, filePtr); - + // Change BGR to RGB so OpenGL can read the data. for(imgIndex = 0; imgIndex < imageSize; imgIndex += colorMode) { colorSwap = tgaFile->textureData[imgIndex]; @@ -174,58 +174,58 @@ int WriteTGAFile(const char* filename, short int width, short int height, unsign unsigned char bitDepth; long imageSize; FILE* filePtr; - + // Create a file for writing to binary mode. filePtr = fopen(filename, "wb"); if(!filePtr) { fclose(filePtr); return 0; } - + imageType = 2; // RGB, uncompressed. bitDepth = 24; // 24-bitdepth. colorMode = 3; // RGB color mode. - + byteSkip = 0; shortSkip = 0; - + // Write 2 bytes of data. fwrite(&byteSkip, sizeof(unsigned char), 1, filePtr); fwrite(&byteSkip, sizeof(unsigned char), 1, filePtr); - + // Write image type. fwrite(&imageType, sizeof(unsigned char), 1, filePtr); - + fwrite(&shortSkip, sizeof(short int), 1, filePtr); fwrite(&shortSkip, sizeof(short int), 1, filePtr); fwrite(&byteSkip, sizeof(unsigned char), 1, filePtr); fwrite(&shortSkip, sizeof(short int), 1, filePtr); fwrite(&shortSkip, sizeof(short int), 1, filePtr); - + // Write image dimensions. fwrite(&width, sizeof(short int), 1, filePtr); fwrite(&height, sizeof(short int), 1, filePtr); fwrite(&bitDepth, sizeof(unsigned char), 1, filePtr); - + // Write 1 byte of data fwrite(&byteSkip, sizeof(unsigned char), 1, filePtr); - + // Calculate the image size. imageSize = width * height * colorMode; - + // Change the image data from RGB to BGR for(imgIndex = 0; imgIndex < imageSize; imgIndex += colorMode) { colorSwap = imageData[imgIndex]; imageData[imgIndex] = imageData[imgIndex + 2]; imageData[imgIndex + 2] = colorSwap; } - + // Write the image data. fwrite(imageData, sizeof(unsigned char), imageSize, filePtr); - + // Close the file. fclose(filePtr); - + return 1; } @@ -257,3 +257,4 @@ bool Texture::Load(const std::string& filename) { } return false; } +