From e35cb6424666f158980d8d709c70e6572e8ee7bd Mon Sep 17 00:00:00 2001 From: Tamir Atias Date: Tue, 17 Apr 2012 03:58:42 +0300 Subject: [PATCH] [Fix] Animation was farked! [Fix] Strings are now allocated from the heap. --- Bin/VC10/VC10.vcxproj | 4 + Bin/VC10/VC10.vcxproj.filters | 15 +++ Data/Img/Player.png | Bin 1537 -> 0 bytes .../{Front/Player_F.txt => Back/Player_B} | 2 +- Data/Img/Player/Back/Player_B.000.png | Bin 0 -> 684 bytes Data/Img/Player/Back/Player_B.001.png | Bin 0 -> 625 bytes Data/Img/Player/Back/Player_B.002.png | Bin 0 -> 684 bytes Data/Img/Player/Back/Player_B.003.png | Bin 0 -> 636 bytes Data/Img/Player/Front/Player_F | 3 + Data/Img/Player/Front/Player_F.000.png | Bin 1537 -> 845 bytes Data/Img/Player/Left/Player_L | 3 + Data/Img/Player/Left/Player_L.000.png | Bin 0 -> 755 bytes Data/Img/Player/Left/Player_L.001.png | Bin 0 -> 717 bytes Data/Img/Player/Left/Player_L.002.png | Bin 0 -> 755 bytes Data/Img/Player/Left/Player_L.003.png | Bin 0 -> 787 bytes Data/Img/Player/Player_F | 0 Data/Img/Player/Right/Player_R | 3 + Data/Img/Player/Right/Player_R.000.png | Bin 0 -> 771 bytes Data/Img/Player/Right/Player_R.001.png | Bin 0 -> 729 bytes Data/Img/Player/Right/Player_R.002.png | Bin 0 -> 771 bytes Data/Img/Player/Right/Player_R.003.png | Bin 0 -> 786 bytes Data/Img/Reniesta.png | Bin 7001 -> 0 bytes src/Actor/Actor.cpp | 77 ++++++++----- src/Actor/Actor.h | 16 +-- src/Actor/NPC.cpp | 3 +- src/Actor/Player.cpp | 25 ++--- src/Animation/AnimatingSprite.cpp | 27 ++--- src/Animation/AnimatingSprite.h | 8 +- src/Animation/AnimationSequence.cpp | 23 ++-- src/Animation/AnimationSequence.h | 18 +-- src/Main/Game.cpp | 3 + src/Sound/SoundEffect.cpp | 2 +- src/Sprite/Sprite.cpp | 2 +- src/System/FileReader.cpp | 9 +- src/System/String.cpp | 104 +++++++++++------- src/System/String.h | 18 +-- 36 files changed, 216 insertions(+), 149 deletions(-) delete mode 100644 Data/Img/Player.png rename Data/Img/Player/{Front/Player_F.txt => Back/Player_B} (59%) create mode 100644 Data/Img/Player/Back/Player_B.000.png create mode 100644 Data/Img/Player/Back/Player_B.001.png create mode 100644 Data/Img/Player/Back/Player_B.002.png create mode 100644 Data/Img/Player/Back/Player_B.003.png create mode 100644 Data/Img/Player/Left/Player_L create mode 100644 Data/Img/Player/Left/Player_L.000.png create mode 100644 Data/Img/Player/Left/Player_L.001.png create mode 100644 Data/Img/Player/Left/Player_L.002.png create mode 100644 Data/Img/Player/Left/Player_L.003.png delete mode 100644 Data/Img/Player/Player_F create mode 100644 Data/Img/Player/Right/Player_R create mode 100644 Data/Img/Player/Right/Player_R.000.png create mode 100644 Data/Img/Player/Right/Player_R.001.png create mode 100644 Data/Img/Player/Right/Player_R.002.png create mode 100644 Data/Img/Player/Right/Player_R.003.png delete mode 100644 Data/Img/Reniesta.png diff --git a/Bin/VC10/VC10.vcxproj b/Bin/VC10/VC10.vcxproj index 8f8f235..3336f69 100644 --- a/Bin/VC10/VC10.vcxproj +++ b/Bin/VC10/VC10.vcxproj @@ -86,6 +86,8 @@ + + @@ -131,6 +133,8 @@ + + diff --git a/Bin/VC10/VC10.vcxproj.filters b/Bin/VC10/VC10.vcxproj.filters index 29f0bce..52683a1 100644 --- a/Bin/VC10/VC10.vcxproj.filters +++ b/Bin/VC10/VC10.vcxproj.filters @@ -43,6 +43,9 @@ {be4a8635-8a7a-45ba-8c95-06e95cdfb8e3} + + {2826112d-5f07-4ee2-b4b4-2be9289c6811} + @@ -174,6 +177,12 @@ System + + Animation + + + Animation + @@ -281,5 +290,11 @@ System + + Animation + + + Animation + \ No newline at end of file diff --git a/Data/Img/Player.png b/Data/Img/Player.png deleted file mode 100644 index af300daa7fc9432adfa31fed7a43de33c950bfe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1537 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 LNkvXXu0mjfjll>Q literal 0 HcmV?d00001 diff --git a/Data/Img/Player/Back/Player_B.002.png b/Data/Img/Player/Back/Player_B.002.png new file mode 100644 index 0000000000000000000000000000000000000000..e59e6f966f1722d4cfbed4023da152dba6ac7651 GIT binary patch literal 684 zcmV;d0#p5oP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0006TNkls6`o&pKpfdwh_kNQXd`5Y%#$!dDGKRZtB-eS@5SuU3; zk|x4)UY*_~$ok^m75G%aP}UqH=y3I%cQOG-z*-|tHVCyr2dP;?;UP}-{&kk3)V|s;PYY$G@ zzCy8{8w7Crm1~6sK~&BGPk`uGg=$m_uI<8wDp)hEt!>~^OK()^*z19-efLa_z~KyS zWen%)Zj|oCY z?^|uE8Ru!WjZS0h1V`?|vze5^W{KZXw$#ziErZRHC+vY0XoFAxPIiTd6P4$_pAoy{*+w-Yd~0)8EghayZt(o;I`9^1y#IOaH!J6NF$wwWGLZBWPgwkx?c; z9#VeZ@5&qA?eSiMJe=Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0005&Nklta zmh{*gLR+G$UYbT4T}X?w9IXYG%BR&4_6?wfdC(Hr+6gYIOQTB1UJG3JH_y}v z9L`YBgGTZ3be1TkAzqD==eyXuPhHog<#M?q_@4C#FIlQl=h^zZkx&3i0zIYroB(*b zbCX34?b_~f!Hkjy1T#%$VD)h5zEL#7hA3L<^4R=4hAI?B9$10QBut%Nt)Zq{a<~>$ zFUdmrcd=Hrlz8x71z2#kqyYSSy&asXO<$o+h5!Bj&_lJOxMm~pB1c0n_O}w``gpq+ ze&YhIAPWIe3=#{U4p WW#ojMLW%eQ00006hRP% z?|cnG%;Zc&L_s`M@D}3@G`~a?&Ts?~47}vn+yOH)eE>~-0)O!#7C{rAz(i^HZ}`T4 zYP;up&cubs-}9XW_NZPKa0g8m88-AuUQGQ+<%-7@4wg*Y@33}I6?$QN&%#k z-(-Li*kQHoWz#);T@N6z3~E`&ARb75RXAXb1oBciDC%Rmw#pOB;eb0=mI)zF{?QcLL$7Pu zb5{fyl?6EUl+(N0=LQk{_m59Gi0fsCkM_1^4T^YB4uAB$nx3;N&KQDls9uWNHHY0i z9sQ}93gF$|#t!g`wuN%cAyI#uY-M2Bd5|Y00000NkvXXu0mjfOH+iA delta 1506 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 Rt@Z!_002ovPDHLkV1nFjLhS$m literal 0 HcmV?d00001 diff --git a/Data/Img/Player/Player_F b/Data/Img/Player/Player_F deleted file mode 100644 index e69de29..0000000 diff --git a/Data/Img/Player/Right/Player_R b/Data/Img/Player/Right/Player_R new file mode 100644 index 0000000..a2b15b9 --- /dev/null +++ b/Data/Img/Player/Right/Player_R @@ -0,0 +1,3 @@ +2; +Idle 1 1; +Walk 1 4; \ No newline at end of file diff --git a/Data/Img/Player/Right/Player_R.000.png b/Data/Img/Player/Right/Player_R.000.png new file mode 100644 index 0000000000000000000000000000000000000000..08d6330149a0658d272e2f7ea9ceb5a71a4f6bc6 GIT binary patch literal 771 zcmV+e1N{7nP)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0007VNklaLpIUN3VEhr{44EG~}a<}N+sq>Ix}!5f}&tTS9E#h@uiN!0+3&+ls`+D|#) zJD3|?GG3s0$msAY(EKybX@J|7tUwRPy~em!n}ZT^v^@&XkKe+}-(P0l5x}+55+I;} z$Ba%49D{llR0$~T>G!lYI!Z!gu~T3y8Q?&{4W(^Bs>G!Ed>(E#`)0Urg+ke%AD3o+ z*_aFD)colmNkqq+s+j~ zR=KTckH=5m$@j89(6o5y@gi8;R;610ScUva@ZiqXic7X)BFBpxM{sdQ@t~)m z%(l)2MU_&mrY!q#_-3dA{R%om`4QCEX*}tqD5ivRXJbc+W5r6D2!zMl;{Q=hPh^*- zq}~@psT4qd5P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0006=NklZ<|fPL4w#wg1x!4Fc!)(X@&qPIyRY%JH8uU~?m#hrU0=VhuBw?% zCvx<9J);f7`7Gw!dPk>|!)v1r@AxbmE}eYP&_qGi09MDhPKmq@O~5hm^)49$Xd2Sr zJ~K4^jy?@=YRM9);kcJEc4}i#LUvdB=Iia=e1AM!(-Q&gl$HPi1>9$x#DaZLt%526 zg?+vbopGWd)E7Gm^c4dpkl=>W6p$+6G#-!5#ZuQA?vqd`dw)E&rk4$80C^18x(0^l zjq1XU++o0|3fEj7pAq=5GiPXoHquE3S%Q2}!u6)L65j{aJFH>)zE!3&1h{5Q_0mJ& zVBN>m##CZrFO-cpHw-T~149b}xofd7$QbiF36x-6IgByS*&SauSUOf!Wnfq98_u#7 zN~moztF^Ui>&Zdy_74mUlN5nlzzK9T8d-x{Kyi%;v%wllXF>s<8j9sha9!8sQ0Am{y8G^dMXb{(;-IqULgfd?>xJWGq zpKs2)I07b{vV8xqKR>8t1L5ZxP&_YI%9Mhm>`-VbGlBZLRFP7ql5HfSnq)iV24*i` zLKy-;q{(Vaf^&erN{eQIYs|mP)(Ux_t(3dWzYRFf3@SfrRPKW()v`iRMKFL_QL=0~ z3CHo=`j?^;VFWVCeVYI{|Fg7!#(1q(D)oJ7wc226$pla3Uu^6T_w1L%`K7XD00000 LNkvXXu0mjf>Mc27 literal 0 HcmV?d00001 diff --git a/Data/Img/Player/Right/Player_R.002.png b/Data/Img/Player/Right/Player_R.002.png new file mode 100644 index 0000000000000000000000000000000000000000..08d6330149a0658d272e2f7ea9ceb5a71a4f6bc6 GIT binary patch literal 771 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 SukO1)wUp%5; diff --git a/src/Actor/Actor.cpp b/src/Actor/Actor.cpp index fc8c751..6c32dec 100644 --- a/src/Actor/Actor.cpp +++ b/src/Actor/Actor.cpp @@ -4,8 +4,6 @@ #include "../Sound/SoundEffect.h" Actor::Actor(void) { - _actor = new Sprite(); - _stepSFX[0] = sfxManager.Load("../Data/SFX/step_cloth1.wav"); _stepSFX[1] = sfxManager.Load("../Data/SFX/step_cloth2.wav"); _stepSFX[2] = sfxManager.Load("../Data/SFX/step_cloth3.wav"); @@ -13,12 +11,15 @@ Actor::Actor(void) { _lastStepSFXPlayed = -1; _velocity = 4.0f; - _direction = Front; + _direction = FRONT; _preventMovement = NONE; + x = 0.0f; + y = 0.0f; + _actorLeft = new AnimatingSprite(); _actorRight = new AnimatingSprite(); - _actorFront = new AnimatingSprite(); + _actorFront = new AnimatingSprite(); _actorBack = new AnimatingSprite(); } @@ -29,44 +30,37 @@ Actor::~Actor(void) { _stepSFX[i] = NULL; } } - delete _actor; delete _actorLeft; delete _actorRight; delete _actorFront; delete _actorBack; } -void Actor::LoadSprite(const char* filename) { - _actor->LoadSprite(filename); - w = _actor->GetWidth(); - h = _actor->GetHeight(); +void Actor::LoadSprites(const String& basename) { + String frontFilename = String("../Data/Img/") + basename + "/Front/" + basename + "_F"; + String leftFilename = String("../Data/Img/") + basename + "/Left/" + basename + "_L"; + String rightFilename = String("../Data/Img/") + basename + "/Right/" + basename + "_R"; + String backFilename = String("../Data/Img/") + basename + "/Back/" + basename + "_B"; + + _actorFront->LoadAnimatingSprite(frontFilename, frontFilename, 4, 1.0f / _velocity); + _actorLeft->LoadAnimatingSprite(leftFilename, leftFilename, 4, 1.0f / _velocity); + _actorRight->LoadAnimatingSprite(rightFilename, rightFilename, 4, 1.0f / _velocity); + _actorBack->LoadAnimatingSprite(backFilename, backFilename, 4, 1.0f / _velocity); } void Actor::Update(float dt) { - float oldX = x = _actor->GetX(); - float oldY = y = _actor->GetY(); + GetAnimation()->Update(dt); - - 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); - } + float oldX = x; + float oldY = y; // We should check for collisions now. - - Move(dt); if(x != oldX || y != oldY) { + GetAnimation()->SetCurrentAnimation(1); + if(!SoundEffect::IsPlaying(1)) { int sfxIndex; do { @@ -78,12 +72,39 @@ void Actor::Update(float dt) { _lastStepSFXPlayed = sfxIndex; } } + else { + GetAnimation()->SetCurrentAnimation(0); + } } void Actor::Render(void) { - _actor->Draw(); + GetAnimation()->Render(x, y); } void Actor::Render(float x, float y) { - _actor->Draw(x, y); + GetAnimation()->Render(x, y); +} + +AnimatingSprite* Actor::GetAnimation(void) { + if(_direction == LEFT) { + return _actorLeft; + } + else if(_direction == RIGHT) { + return _actorRight; + } + else if(_direction == FRONT) { + return _actorFront; + } + else if(_direction == BACK) { + return _actorBack; + } + return NULL; +} + +float Actor::GetWidth(void) { + return GetAnimation()->GetCurrentFrameSprite()->GetWidth(); +} + +float Actor::GetHeight(void) { + return GetAnimation()->GetCurrentFrameSprite()->GetHeight(); } diff --git a/src/Actor/Actor.h b/src/Actor/Actor.h index a5bfad5..228c0fd 100644 --- a/src/Actor/Actor.h +++ b/src/Actor/Actor.h @@ -11,7 +11,7 @@ class Actor { public: enum Facing { - Front, + FRONT, BACK, LEFT, RIGHT, @@ -26,7 +26,7 @@ public: Actor(void); ~Actor(void); - void LoadSprite(const char* filename); + void LoadSprites(const String& basename); virtual void Update(float dt); virtual void Render(void); @@ -34,8 +34,8 @@ public: float GetX(void) { return x; } float GetY(void) { return y; } - float GetWidth(void) { return w; } - float GetHeight(void) { return h; } + float GetWidth(void); + float GetHeight(void); void SetXY(float xArg, float yArg) { x = xArg; y = yArg; } @@ -45,9 +45,10 @@ public: protected: virtual void Move(float dt) = 0; + AnimatingSprite* GetAnimation(void); + float _velocity; - Sprite* _actor; AnimatingSprite* _actorLeft; AnimatingSprite* _actorRight; AnimatingSprite* _actorFront; @@ -60,9 +61,8 @@ protected: float y; private: - float w; - float h; - SoundEffect* _stepSFX[4]; int _lastStepSFXPlayed; + + String _walkAnimationID; }; diff --git a/src/Actor/NPC.cpp b/src/Actor/NPC.cpp index 3b86515..c344ab1 100644 --- a/src/Actor/NPC.cpp +++ b/src/Actor/NPC.cpp @@ -1,7 +1,6 @@ #include "NPC.h" NPC::NPC(void) : Actor() { - LoadSprite("../Data/Img/Player.png"); } NPC::~NPC(void) { @@ -12,7 +11,7 @@ void NPC::Update(float dt) { } void NPC::Render(void) { - Actor::Render(105, 125); + Actor::Render(); } void NPC::Move(float dt) { diff --git a/src/Actor/Player.cpp b/src/Actor/Player.cpp index 1265756..11a16c5 100644 --- a/src/Actor/Player.cpp +++ b/src/Actor/Player.cpp @@ -2,10 +2,7 @@ #include "../IO/Input.h" Player::Player(void) : Actor() { - Actor::_actorFront->LoadAnimatingSprite("Player_F", "../Data/Img/Player/Front/Player_F", "../Data/Img/Player/Front/Player_F", 2, _velocity); - //Actor::_actorFront->LoadAnimatingSprite("Player_b", "../Data/Img/Player/Front/Player_B", "../Data/Img/Player/Front/Player_B", 4, _velocity); - //Actor::_actorFront->LoadAnimatingSprite("Player_L", "../Data/Img/Player/Front/Player_L", "../Data/Img/Player/Front/Player_L", 4, _velocity); - //Actor::_actorFront->LoadAnimatingSprite("Player_R", "../Data/Img/Player/Front/Player_R", "../Data/Img/Player/Front/Player_R", 4, _velocity); + _direction = Actor::RIGHT; } Player::~Player(void) { @@ -20,21 +17,21 @@ void Player::Render(void) { } void Player::Move(float dt) { - if(KeyStillDown(SDLK_w) || KeyStillDown(SDLK_UP)) { - y -= _velocity * 60 * dt; - _actor->SetY(y); - } - if(KeyStillDown(SDLK_s) || KeyStillDown(SDLK_DOWN)) { - y += _velocity * 60 * dt; - _actor->SetY(y); - } if(KeyStillDown(SDLK_a) || KeyStillDown(SDLK_LEFT)) { x -= _velocity * 60 * dt; - _actor->SetX(x); + _direction = Actor::LEFT; } if(KeyStillDown(SDLK_d) || KeyStillDown(SDLK_RIGHT)) { x += _velocity * 60 * dt; - _actor->SetX(x); + _direction = Actor::RIGHT; + } + if(KeyStillDown(SDLK_w) || KeyStillDown(SDLK_UP)) { + y -= _velocity * 60 * dt; + _direction = Actor::BACK; + } + if(KeyStillDown(SDLK_s) || KeyStillDown(SDLK_DOWN)) { + y += _velocity * 60 * dt; + _direction = Actor::FRONT; } if(KeyDown(SDLK_LSHIFT)) { diff --git a/src/Animation/AnimatingSprite.cpp b/src/Animation/AnimatingSprite.cpp index bf4733f..ee384aa 100644 --- a/src/Animation/AnimatingSprite.cpp +++ b/src/Animation/AnimatingSprite.cpp @@ -8,6 +8,7 @@ AnimatingSprite::AnimatingSprite(void) { _spriteCounter = 0; _timer = 0; + _currentFrame = 1; } AnimatingSprite::~AnimatingSprite(void) { @@ -33,32 +34,21 @@ void AnimatingSprite::Update(float dt) { * the _currentFrame is set to the next valid frame. */ - _timer += dt; if(_sequence) { + _timer += dt; if(_timer > _animationSpeed) { _timer = 0; _currentFrame++; - if(_currentFrame > _sequence->GetAnimation(_currentAnimation)->frameEnd) { - if(_sequence->GetAnimation(_currentAnimation)->_loopTo != "") { - SetCurrentAnimation(_sequence->GetAnimation(_currentAnimation)->_loopTo); - } else { - _currentFrame = _sequence->GetAnimation(_currentAnimation)->frameBegin; - } - } - } - } else { - if(_timer > _animationSpeed) { - _timer = 0; - _currentFrame = 0; - if(_currentFrame > _numberOfFrames) { - _currentFrame = 1; + Animation* curAnim = _sequence->GetAnimation(_currentAnimation); + if(_currentFrame > curAnim->frameEnd) { + _currentFrame = curAnim->_loopTo; } } } } -void AnimatingSprite::LoadAnimatingSprite(const char* id, const char* filename, const char* sequence, int frames, float animationSpeed) { +void AnimatingSprite::LoadAnimatingSprite(const char* filename, const char* sequence, int frames, float animationSpeed) { for(int i = 0; i < frames; i++) { String tempFilename; tempFilename = ""; @@ -74,19 +64,16 @@ void AnimatingSprite::LoadAnimatingSprite(const char* id, const char* filename, _sprites[_spriteCounter]->LoadSprite((const char*)tempFilename); _spriteCounter++; } - _id = id; _numberOfFrames = frames; _animationSpeed = animationSpeed; _sequence = new AnimationSequence(sequence); SetCurrentAnimation(0); } -void AnimatingSprite::SetCurrentAnimation(const char* animation) { +void AnimatingSprite::SetCurrentAnimation(const String& 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 b14805b..d55cb8e 100644 --- a/src/Animation/AnimatingSprite.h +++ b/src/Animation/AnimatingSprite.h @@ -8,28 +8,26 @@ public: AnimatingSprite(void); ~AnimatingSprite(void); - void SetCurrentAnimation(const char* filename); + void SetCurrentAnimation(const String& filename); void SetCurrentAnimation(int index); const char* GetCurrentAnimation(void); int GetCurrentFrame(void) { return _currentFrame; } int GetTotalFrames(void) { return _sequence->GetAnimation(_currentAnimation)->frameEnd; } + Sprite* GetCurrentFrameSprite(void) { return _sprites[_currentFrame - 1]; } void Update(float dt); void Render(void); void Render(float x, float y); - void LoadAnimatingSprite(const char* id, const char* filename, const char* sequence, int frames, float animationSpeed); - - const char* GetID(void) { return _id; } + void LoadAnimatingSprite(const char* filename, const char* sequence, int frames, float animationSpeed); private: Sprite* _sprites[MAX_ANIM_FRAMES]; int _spriteCounter; AnimationSequence* _sequence; - const char* _id; float _animationSpeed; float _timer; int _currentFrame; diff --git a/src/Animation/AnimationSequence.cpp b/src/Animation/AnimationSequence.cpp index dfc0882..1067168 100644 --- a/src/Animation/AnimationSequence.cpp +++ b/src/Animation/AnimationSequence.cpp @@ -18,12 +18,13 @@ */ AnimationSequence::AnimationSequence(void) { - + memset(_animations, 0, sizeof(_animations)); } AnimationSequence::AnimationSequence(const char* filename) { _numberOfFrames = 0; _sequenceID = filename; + memset(_animations, 0, sizeof(_animations)); ReadFile(); } @@ -38,28 +39,30 @@ void AnimationSequence::ReadFile(void) { // animation array. if(_file.Exists(_sequenceID)) { String name; - String loop; char* temp; - _file.OpenFile(_sequenceID, "r"); + _file.OpenFile(_sequenceID, "rb"); _file.ReadBuffer(temp); _file.CloseFile(); int counter = 0; - _numberOfFrames = atoi(Scan(temp, counter)); + { + String scanResult = Scan(temp, counter); + _numberOfFrames = atoi(scanResult.GetPointer()); + } for(int index = 0; index < _numberOfFrames; index++) { name = ""; int startFrame = 0; int endFrame = 0; - loop = ""; + int loop = 1; name = Scan(temp, counter); startFrame = atoi(Scan(temp, counter)); endFrame = atoi(Scan(temp, counter)); if(temp[counter - 1] == SPACE) { - loop = Scan(temp, counter); + loop = atoi(Scan(temp, counter)); } _animations[index] = new Animation(); @@ -74,7 +77,7 @@ void AnimationSequence::ReadFile(void) { } } -const char* AnimationSequence::Scan(char* source, int &counter) { +String AnimationSequence::Scan(char* source, int &counter) { String temp; temp = ""; bool terminate = false; @@ -94,16 +97,16 @@ const char* AnimationSequence::Scan(char* source, int &counter) { return temp; } -AnimationSequence::Animation* AnimationSequence::GetAnimation(const char* filename) { +Animation* AnimationSequence::GetAnimation(const String& filename) { for(int i = 0; i < _numberOfFrames; i++) { - if(strcmp(filename, _animations[i]->_animationID) == 0) { + if(filename == _animations[i]->_animationID) { return _animations[i]; } } return 0; } -AnimationSequence::Animation* AnimationSequence::GetAnimation(int index) { +Animation* AnimationSequence::GetAnimation(int index) { if(index < _numberOfFrames) { return _animations[index]; } diff --git a/src/Animation/AnimationSequence.h b/src/Animation/AnimationSequence.h index d1c05b1..9077bb4 100644 --- a/src/Animation/AnimationSequence.h +++ b/src/Animation/AnimationSequence.h @@ -10,14 +10,14 @@ #define ENDOFLINE 59 #define SPACE 32 -class AnimationSequence { - struct Animation { - const char* _animationID; - int frameBegin; - int frameEnd; - String _loopTo; - }; +struct Animation { + String _animationID; + int frameBegin; + int frameEnd; + int _loopTo; +}; +class AnimationSequence { public: AnimationSequence(void); AnimationSequence(const char* filename); @@ -25,10 +25,10 @@ public: void ReadFile(void); Animation* GetAnimation(int index); - Animation* GetAnimation(const char* filename); + Animation* GetAnimation(const String& filename); private: - const char* Scan(char* source, int& counter); + String Scan(char* source, int& counter); const char* _sequenceID; int _numberOfFrames; diff --git a/src/Main/Game.cpp b/src/Main/Game.cpp index c11ec37..09b69b0 100644 --- a/src/Main/Game.cpp +++ b/src/Main/Game.cpp @@ -43,6 +43,9 @@ bool Game::Init(void) { _level->Load("../Data/Map/Ugly.tmx"); _level->PlayBGM(); + _player->LoadSprites("Player"); + _NPC->LoadSprites("Player"); + // Return success. return true; } diff --git a/src/Sound/SoundEffect.cpp b/src/Sound/SoundEffect.cpp index 7647ddd..32d443c 100644 --- a/src/Sound/SoundEffect.cpp +++ b/src/Sound/SoundEffect.cpp @@ -29,5 +29,5 @@ void SoundEffect::Stop(int channel) { } bool SoundEffect::IsPlaying(int channel) { - return Mix_Playing(channel); + return Mix_Playing(channel) == 1; } \ No newline at end of file diff --git a/src/Sprite/Sprite.cpp b/src/Sprite/Sprite.cpp index 85c7ba6..c84a766 100644 --- a/src/Sprite/Sprite.cpp +++ b/src/Sprite/Sprite.cpp @@ -24,8 +24,8 @@ void Sprite::Draw() const { } void Sprite::Draw(float x, float y) { - DrawRegion(Rect(0.0f, 0.0f, (float)texture->GetWidth(), (float)texture->GetHeight())); SetPosition(Vec2(x, y)); + DrawRegion(Rect(0.0f, 0.0f, (float)texture->GetWidth(), (float)texture->GetHeight())); } void Sprite::DrawRegion(const Rect& src) const { diff --git a/src/System/FileReader.cpp b/src/System/FileReader.cpp index 8c12d62..d0c5277 100644 --- a/src/System/FileReader.cpp +++ b/src/System/FileReader.cpp @@ -14,7 +14,7 @@ FileReader::~FileReader(void) { bool FileReader::Exists(const char* filename) { // Check to see if _filename is existent in memory, - _file = fopen(filename, "r"); + _file = fopen(filename, "rb"); if(_file) { // Close the file we have. @@ -64,7 +64,7 @@ void FileReader::Write(const int buffer) { } void FileReader::Read(const int &value) { - if((_file) && (_accessType == "r")) { + if((_file) && (_accessType == "rb")) { fscanf(_file, "%i", &value); } else { // _filename does not exist or we have the wrong accessType. @@ -85,13 +85,14 @@ void FileReader::WriteBuffer(const char* buffer, int count) { } void FileReader::ReadBuffer(char* &buffer) { - if((_file) && (_accessType == "r")) { + if((_file) && (_accessType == "rb")) { size_t size = 0; fseek(_file, 0, SEEK_END); size = ftell(_file); rewind(_file); - buffer = (char*)malloc(sizeof(char)* size); + buffer = (char*)malloc(sizeof(char)* size + sizeof(char)); + buffer[size] = 0; if(buffer != NULL) { fread(buffer, 1, size, _file); diff --git a/src/System/String.cpp b/src/System/String.cpp index 3bc38ae..6a626d3 100644 --- a/src/System/String.cpp +++ b/src/System/String.cpp @@ -1,6 +1,3 @@ -#ifdef _WIN32 -#define "windows.h" -#endif #include #include #include @@ -9,85 +6,110 @@ #define _CRT_SECURE_NO_WARNINGS String::String(void) { - + _string = new char[1]; + _string[0] = 0; + _length = 0; } String::~String(void) { - + if(_string) { + delete[] _string; + _string = NULL; + _length = 0; + } } String::String(char letter) { // Char to string conversion. - char temp[1]; - temp[0] = letter; - strcpy(_string, temp); + _string = new char[2]; + _string[0] = letter; + _string[1] = 0; + _length = 1; } -String::String(char* text) { - // char* or char array. - strcpy(_string, text); +String::String(const char* text) { + _length = strlen(text); + _string = new char[_length + 1]; + memcpy(_string, text, _length); + _string[_length] = 0; } -String::String(String& text) { - // Copy the String. - strcpy(_string, text.GetPointer()); +String::String(const String& text) { + _length = text._length; + _string = new char[_length + 1]; + memcpy(_string, text._string, _length); + _string[_length] = 0; } -const char* String::GetPointer(void) { +const char* String::GetPointer(void) const { // Return a pointer to the memory address of the string. return _string; } int String::Length(void) { // Return the length of the string. - return strlen(_string); + return _length; } void String::Format(const char* format, ...) { - char temp[256]; + if(_string) { + delete[] _string; + } + + _length = 4095; + _string = new char[_length + 1]; + memset(_string, 0, _length + 1); + va_list vlist; va_start(vlist, format); #ifdef _WIN32 - vsprintf_s(&temp[0], 256, format, vlist); + vsprintf_s(_string, _length, format, vlist); #else - vsnprintf(&temp[0], 256, format, vlist); + vsnprintf(_string, _length, 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); - char temp[1] = ""; - temp[0] = value; - strncat(_string, temp, 1); + char* oldString = _string; + int oldLength = _length; + _length = oldLength + 1; + _string = new char[_length + 1]; + _string[_length] = 0; + memcpy(_string, oldString, oldLength); + _string[oldLength] = value; + delete[] oldString; } void String::Concatenate(const char* value) { - // Concatenate a char* or array to the end of the string. - assert(strlen(_string) + strlen(value) < MAX_STRING_LEN); - strcat(_string, value); + char* oldString = _string; + int oldLength = _length; + int valueLength = strlen(value); + _length = oldLength + valueLength; + _string = new char[_length + 1]; + _string[_length] = 0; + memcpy(_string, oldString, oldLength); + memcpy(_string + oldLength, value, valueLength); + delete[] oldString; } -void String::Concatenate(String& value) { - assert(strlen(_string) + strlen(value) < MAX_STRING_LEN); - strcat(_string, value.GetPointer()); +void String::Concatenate(const String& value) { + Concatenate(value.GetPointer()); } // Operator overloads, can't be bothered to comment // them, use your brain. :) String& String::operator=(const char* value) { - assert(strlen(value) < MAX_STRING_LEN); - strcpy(_string, value); + _length = strlen(value); + _string = new char[_length + 1]; + _string[_length] = 0; + memcpy(_string, value, _length); return *this; } -String& String::operator=(String& value) { - assert(strlen(value) < MAX_STRING_LEN); - strcpy(_string, value.GetPointer()); +String& String::operator=(const String& value) { + *this = value.GetPointer(); return *this; } @@ -98,7 +120,7 @@ bool String::operator==(const char* value) const { return false; } -bool String::operator==(String& value) const { +bool String::operator==(const String& value) const { if(strcmp(_string, value.GetPointer()) == 0) { return true; } @@ -119,6 +141,12 @@ bool String::operator!=(const char* value) const { return false; } +String String::operator+(const String& value) const { + String copy(*this); + copy.Concatenate(value); + return copy; +} + String::operator const char*() const { return _string; } diff --git a/src/System/String.h b/src/System/String.h index 6d723ab..2465e0b 100644 --- a/src/System/String.h +++ b/src/System/String.h @@ -1,18 +1,17 @@ #pragma once #define _CRT_SECURE_NO_WARNINGS -#define MAX_STRING_LEN 255 class String { public: String(void); String(char letter); - String(char text[]); - String(String& text); + String(const char* text); + String(const String& text); ~String(void); - const char* GetPointer(void); + const char* GetPointer(void) const; void Concatenate(const char* value); - void Concatenate(String& value); + void Concatenate(const String& value); void Concatenate(char value); int Length(void); @@ -20,15 +19,18 @@ public: // Operator overloads. String& operator=(const char* value); - String& operator=(String& value); + String& operator=(const String& value); bool operator==(const char* value) const; - bool operator==(String& value) const; + bool operator==(const String& value) const; bool operator!=(String& value) const; bool operator!=(const char* value) const; + String operator+(const String& value) const; + operator const char*() const; private: - char _string[MAX_STRING_LEN]; + char* _string; + int _length; };