Advertisement
GaelVanhalst

Kirby: WaddleDoo

Jan 25th, 2016
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.87 KB | None | 0 0
  1. //---------------------------
  2. // Includes
  3. //---------------------------
  4. #include "WaddleDoo.h"
  5.  
  6. //---------------------------
  7. // Defines
  8. //---------------------------
  9. #define GAME_ENGINE (GameEngine::GetSingleton())
  10.  
  11. //---------------------------
  12. // Constructor & Destructor
  13. //---------------------------
  14. Bitmap* WaddleDoo::m_BmpSpriteSheetPtr=nullptr;
  15.  
  16. WaddleDoo::WaddleDoo(int spawnX,int spawnY, int spawnFloor,int beginState):m_BeamLength(0),
  17.     Enemy(spawnX,spawnY,spawnFloor,beginState)
  18. {
  19.     m_Power=POWER_BEAM;
  20.     if(m_BmpSpriteSheetPtr==nullptr)
  21.     {
  22.         m_BmpSpriteSheetPtr= new Bitmap("./Resources/WaddleDooSpriteSheet.png");
  23.         if(m_BmpSpriteSheetPtr->Exists())
  24.         {
  25.             m_BmpSpriteSheetPtr->SetTransparencyColor(185,220,255);
  26.         }
  27.     }
  28.  
  29.     m_BaseScore=3;
  30.     // nothing to create
  31. }
  32.  
  33. WaddleDoo::~WaddleDoo()
  34. {
  35.  
  36.     // nothing to destroy
  37. }
  38.  
  39. //---------------------------
  40. // Own methods
  41. //---------------------------
  42.  
  43. void WaddleDoo::Paint()
  44. {
  45.     if(m_Activated&&!m_Killed)
  46.     {
  47.         RECT ANIMATION;
  48.         ANIMATION.bottom=0;
  49.         ANIMATION.top=0;
  50.         ANIMATION.left=0;
  51.         ANIMATION.right=0;
  52.  
  53.         if(m_CurrentState==STATE_WALKING)
  54.         {
  55.             int tick=m_Tickcount%2;
  56.             ANIMATION.left=tick*SIZE;
  57.             ANIMATION.top=0;
  58.             ANIMATION.bottom=SIZE;
  59.             ANIMATION.right=ANIMATION.left+SIZE;
  60.         }
  61.         else if(m_CurrentState==STATE_PREPARINGATTACK)
  62.         {
  63.             int tick=m_Tickcount%2;
  64.  
  65.             ANIMATION.left=SIZE+tick*SIZE;
  66.             ANIMATION.top=0;
  67.             ANIMATION.bottom=SIZE;
  68.             ANIMATION.right=ANIMATION.left+SIZE;
  69.         }
  70.         else if(m_CurrentState==STATE_ATTACK)
  71.         {
  72.             int tick=m_Tickcount%1;
  73.  
  74.             ANIMATION.left=0;
  75.             ANIMATION.top=0;
  76.             ANIMATION.bottom=SIZE;
  77.             ANIMATION.right=ANIMATION.left+SIZE;
  78.         }
  79.         else if(m_CurrentState==STATE_JUMP)
  80.         {
  81.             ANIMATION.left=0;
  82.             ANIMATION.top=0;
  83.             ANIMATION.bottom=SIZE;
  84.             ANIMATION.right=ANIMATION.left+SIZE;
  85.         }
  86.  
  87.         GAME_ENGINE->DrawBitmap(m_BmpSpriteSheetPtr,0,HEIGHTBITMAP,ANIMATION);
  88.        
  89.         if(m_CurrentState==STATE_ATTACK)
  90.         {
  91.             int tick=m_Tickcount%4;
  92.             ANIMATION.top=86;
  93.             ANIMATION.left=16*tick;
  94.             ANIMATION.right=ANIMATION.left+16;
  95.             ANIMATION.bottom=ANIMATION.top+16;
  96.             for (int i = 0; i < AMOUNTOFBEAM; i++)
  97.             {
  98.                 GAME_ENGINE->DrawBitmap(m_BmpAttackSpriteSheetPtr,(int)m_BeamCoordArr[i].x+36,(int)m_BeamCoordArr[i].y+12,ANIMATION);
  99.             }
  100.         }
  101.     }
  102. }
  103.  
  104. void WaddleDoo::AI(double deltaTime,int gravity, double x)
  105. {
  106.     if(m_AttackOnePtr->IsPlaying())
  107.     {
  108.         if(!(m_CurrentState==STATE_ATTACK))
  109.         {
  110.             m_AttackOnePtr->Stop();
  111.             m_AttackOnePtr->Tick();
  112.         }
  113.     }
  114.     switch (m_CurrentState)
  115.     {
  116.         case STATE_WALKING:
  117.             if(m_Delay==0)m_Tickcount++;
  118.             m_Tickcount=m_Tickcount%4;
  119.             break;
  120.         case STATE_PREPARINGATTACK:
  121.             if(m_Delay==0)m_Tickcount++;
  122.             if(m_Tickcount>=10)
  123.             {
  124.                 m_Tickcount=0;
  125.                 m_Delay=1;
  126.                 m_BeamLength=0;
  127.                 m_CurrentState=STATE_ATTACK;
  128.                 BeamGenerator(0);
  129.             }
  130.             break;
  131.         case STATE_ATTACK:
  132.             if(!(m_AttackOnePtr->IsPlaying()))
  133.             {
  134.                 m_AttackOnePtr->Play();
  135.                 m_AttackOnePtr->Tick();
  136.             }
  137.             if(m_Delay==0)m_Tickcount++;
  138.             if(m_BeamLength>=0.5)
  139.             {
  140.                 m_Tickcount=0;
  141.                 m_Delay=1;
  142.                 m_CurrentState=STATE_WALKING;
  143.             }
  144.             break;
  145.         case STATE_JUMP:
  146.             if(m_HitFloorWall)
  147.             {
  148.                 m_Tickcount=0;
  149.                 m_Delay=1;
  150.                 m_CurrentState=STATE_WALKING;
  151.             }
  152.             else
  153.             {
  154.                 if(m_AllRight)
  155.                 {
  156.                     m_Velocity.x=SPEEDJUMP;
  157.                 }
  158.                 else m_Velocity.x=-SPEEDJUMP;
  159.             }
  160.     default:
  161.         break;
  162.     }
  163.  
  164.     if(m_CurrentState==STATE_WALKING)
  165.     {
  166.         if(m_HitLeftWall)m_AllRight=true;
  167.         else if(m_HitRightWall)m_AllRight=false;
  168.         if(m_AllRight)
  169.         {
  170.             m_Velocity.x=SPEED;
  171.         }
  172.         else m_Velocity.x=-SPEED;
  173.     }
  174.  
  175.     if(m_CurrentState==STATE_ATTACK)
  176.     {
  177.         BeamGenerator(deltaTime);
  178.     }
  179.     Gravity(deltaTime,gravity);
  180. }
  181.  
  182. void WaddleDoo::BeamGenerator(double deltaTime)
  183. {
  184.     for (int i = 0; i < AMOUNTOFBEAM; i++)
  185.     {
  186.         m_BeamCoordArr[i].x=(80*i/AMOUNTOFBEAM)*cos(6*m_BeamLength-(M_PI/2));
  187.         m_BeamCoordArr[i].y=(80*i/AMOUNTOFBEAM)*sin(6*m_BeamLength-(M_PI/2));
  188.     }
  189.     m_BeamLength+=deltaTime;
  190. }
  191.  
  192. bool WaddleDoo::IsBeamAttack()
  193. {
  194.     if(m_CurrentState==STATE_ATTACK)return true;
  195.     else return false;
  196. }
  197.  
  198. DOUBLE2 WaddleDoo::GetBeamCoords(bool vector)
  199. {
  200.     DOUBLE2 beam;
  201.  
  202.     if(vector)
  203.     {
  204.         beam=m_BeamCoordArr[AMOUNTOFBEAM-1];
  205.         if(!m_AllRight)beam.x*=-1;
  206.     }
  207.     else
  208.     {
  209.         if(m_AllRight)beam.x=m_Coordinates.x+43,beam.y=m_Coordinates.y+19;
  210.         else beam.x=m_Coordinates.x-14,beam.y=m_Coordinates.y+19;
  211.     }
  212.  
  213.     return beam;
  214. }
  215.  
  216. void WaddleDoo::HeroCertainDistance(DOUBLE2 heroCoordinates)
  217. {
  218.     if(m_CurrentState==STATE_WALKING)
  219.     {
  220.         int random=rand()%100;
  221.         if(abs(heroCoordinates.x-m_Coordinates.x)<100)
  222.         {
  223.             int random=rand()%10;
  224.             if(random==0)
  225.             {
  226.                 m_CurrentState=STATE_JUMP;
  227.                 m_Tickcount=0;
  228.                 m_Delay=1;
  229.                 m_Coordinates.y-=2;
  230.                 m_Velocity.y=-JUMP;
  231.                 m_HitFloorWall=false;
  232.             }
  233.             else
  234.             {
  235.                 m_CurrentState=STATE_PREPARINGATTACK;
  236.                 m_Tickcount=0;
  237.                 m_Delay=1;
  238.             }
  239.         }
  240.     }
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement