Advertisement
ThomasDM

Rugby Guy

Nov 4th, 2015
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.25 KB | None | 0 0
  1. //-----------------------------------------------------
  2. // Name, first name:De Mulder Thomas
  3. // Group: 1DAE2
  4. //-----------------------------------------------------
  5.  
  6. //---------------------------
  7. // Includes
  8. //---------------------------
  9. #include "Rugby.h"
  10.  
  11. //---------------------------
  12. // Defines
  13. //---------------------------
  14. #define GAME_ENGINE (GameEngine::GetSingleton())
  15.  
  16. //---------------------------
  17. // Constructor & Destructor
  18. //---------------------------
  19. Rugby::Rugby(HitRegion *level,DOUBLE2 gravity,int number):
  20.     Enemy(level,gravity,number),
  21.     m_TickCount(0),
  22.     m_HitTopPtr(nullptr),
  23.     m_HitWholePtr(nullptr),
  24.     m_Lives(3),
  25.     m_Timer(20)
  26. {
  27.     m_MonsterRect.top=124;
  28.     m_MonsterRect.bottom=150;
  29.     m_HitTopPtr= new HitRegion();
  30.     m_HitTopPtr->CreateFromRect(0,0,26,3);
  31.     m_HitWholePtr= new HitRegion();
  32.     m_HitWholePtr->CreateFromRect(0,10,26,26);
  33.     m_MonsterVelocity.y=0;
  34. }
  35.  
  36. Rugby::~Rugby()
  37. {
  38.     delete m_HitTopPtr;
  39.     delete m_HitWholePtr;
  40. }
  41.  
  42. //---------------------------
  43. // Methods - Member functions
  44. //---------------------------
  45.  
  46. void Rugby::Paint()
  47. {
  48.     MATRIX3X2 matTransform,matTranslate,matScale,matCenter;
  49.     matTranslate.SetAsTranslate(m_MonsterPos);
  50.     matCenter.SetAsTranslate(-13,0);
  51.     matScale.SetAsScale(m_MonsterScale.x,m_MonsterScale.y);
  52.     matTransform=matCenter*matScale*matTranslate*matCenter.Inverse()*m_MatView;
  53.     GAME_ENGINE->SetTransformMatrix(matTransform);
  54.     GAME_ENGINE->DrawBitmap(m_BmpMonsterPtr,0,0,m_MonsterRect);
  55.  
  56.     /*GAME_ENGINE->SetTransformMatrix(m_MatView);
  57.     GAME_ENGINE->SetColor(COLOR(255,0,0,125));
  58.     GAME_ENGINE->FillHitRegion(m_HitTopPtr);
  59.     GAME_ENGINE->FillHitRegion(m_HitWholePtr);
  60.     GAME_ENGINE->SetColor(COLOR(0,0,0));*/
  61. }
  62. void Rugby::Tick(double deltaTime)
  63. {
  64.     //Bitmaps
  65.     m_TickCount++;
  66.     if(m_TickCount==10)m_TickCount=0;
  67.     m_MonsterRect.left=90+90*(m_TickCount/5);
  68.     m_MonsterRect.right=m_MonsterRect.left+26;
  69.     if(m_MonsterVelocity.y<0)
  70.     {
  71.         m_MonsterRect.left=30;
  72.         m_MonsterRect.right=m_MonsterRect.left+16;
  73.     }
  74.  
  75.     if(m_MonsterVelocity.x>0)
  76.         m_MonsterScale.x=1;
  77.     else m_MonsterScale.x=-1;
  78.     //move
  79.     MoveEnemy(deltaTime);
  80.     //hitregions
  81.     m_HitTopPtr->SetPos(m_MonsterPos);
  82.     m_HitWholePtr->SetPos(m_MonsterPos);
  83. }
  84. void Rugby::VerticalNTopCollision(HitRegion *level)
  85. {
  86.  
  87.  
  88.     HIT hitArr[1];
  89.     DOUBLE2 startPoint = m_MonsterPos;
  90.     DOUBLE2 vector = DOUBLE2(0,22);
  91.  
  92.     startPoint.x = m_MonsterPos.x+4;
  93.     startPoint.y = m_MonsterPos.y+4;
  94.     int numbHits = 0;
  95.     numbHits = level->Raycast(startPoint,vector,hitArr,1);
  96.     if(numbHits > 0)
  97.     {
  98.         m_MonsterVelocity.y = 0;
  99.         double depth = vector.Length() * (1-hitArr[0].lambda);
  100.         m_MonsterPos.y -= depth;
  101.  
  102.     }
  103.     else
  104.     {
  105.         startPoint.x = m_MonsterPos.x+12;
  106.         numbHits = 0;
  107.         numbHits = level->Raycast(startPoint,vector,hitArr,1);
  108.         if(numbHits > 0)
  109.         {
  110.             m_MonsterVelocity.y = 0;
  111.             double depth = vector.Length() * (1-hitArr[0].lambda);
  112.             m_MonsterPos.y -= depth;
  113.  
  114.         }
  115.     }
  116.  
  117. }
  118. void Rugby::HorizontalCollision(HitRegion *level)
  119. {
  120.  
  121.     HIT hitArr[1];
  122.     DOUBLE2 startPoint = m_MonsterPos;
  123.     DOUBLE2 vector = DOUBLE2(13,0);
  124.  
  125.  
  126.     startPoint.y = m_MonsterPos.y+22;
  127.     startPoint.x = m_MonsterPos.x+13;
  128.     int numbHits = 0;
  129.     numbHits = level->Raycast(startPoint,vector,hitArr,1);
  130.     if(numbHits > 0)
  131.     {
  132.  
  133.         double depth = vector.Length() * (1-hitArr[0].lambda);
  134.         m_MonsterPos.x -= depth;
  135.         m_MonsterVelocity.x = -m_MonsterVelocity.x ;
  136.     }
  137.     else{
  138.         vector = DOUBLE2(-13,0);
  139.         numbHits = 0;
  140.         numbHits = level->Raycast(startPoint,vector,hitArr,1);
  141.         if(numbHits > 0)
  142.         {
  143.  
  144.             double depth = vector.Length() * (1-hitArr[0].lambda);
  145.             m_MonsterPos.x += depth;
  146.             m_MonsterVelocity.x= -m_MonsterVelocity.x;
  147.  
  148.         }
  149.  
  150.     }
  151. }
  152. void Rugby::MoveEnemy(double deltaTime)
  153. {
  154.     if(m_MarioPos.x>m_MonsterPos.x)
  155.         m_DogAccelaration=150;
  156.     else m_DogAccelaration=-150;
  157.  
  158.     //Horizontal movement
  159.     if(m_MonsterVelocity.x<100&&m_MonsterVelocity.x>-100)
  160.         m_MonsterVelocity.x+=m_DogAccelaration*deltaTime;
  161.     else if(m_MonsterVelocity.x>100)
  162.         m_MonsterVelocity.x-=2;
  163.     else m_MonsterVelocity.x+=2;
  164.     //gravity
  165.     m_MonsterVelocity+=m_Gravity*deltaTime;
  166.     m_MonsterPos+=m_MonsterVelocity*deltaTime;
  167.  
  168.     //Vertical collision
  169.     if(!(m_MonsterVelocity.y<0))
  170.     {
  171.         VerticalNTopCollision(m_HitLevelPtr);
  172.         VerticalNTopCollision(m_HitLevelPlatformPtr);
  173.     }
  174.  
  175.     //Hoirzontal collision
  176.     HorizontalCollision(m_HitLevelPtr);
  177.  
  178. }
  179. bool Rugby::IsHit()
  180. {
  181.     if(m_Timer<20)
  182.         m_Timer++;
  183.     HIT hitArr[1];
  184.     DOUBLE2 startPoint = m_MarioPos;
  185.     DOUBLE2 vector = DOUBLE2(0,8);
  186.  
  187.     startPoint.x = m_MarioPos.x+4;
  188.     startPoint.y = m_MarioPos.y+24;
  189.     int numbHits = 0;
  190.     numbHits = m_HitTopPtr->Raycast(startPoint,vector,hitArr,1,0);
  191.     if(numbHits > 0&&m_Timer==20)
  192.     {
  193.         m_Lives--;
  194.         m_Timer=0;
  195.         return true;
  196.     }
  197.     else return false;
  198.  
  199. }
  200. void Rugby::SetMarioPos(DOUBLE2 marioPos)
  201. {
  202.     m_MarioPos=marioPos;
  203. }
  204. bool Rugby::IsMarioHit()
  205. {
  206.     HIT hitArr[1];
  207.     DOUBLE2 startPoint = m_MarioPos;
  208.     DOUBLE2 vector = DOUBLE2(8,0);
  209.  
  210.     startPoint.x = m_MarioPos.x+8;
  211.     startPoint.y = m_MarioPos.y+25;
  212.     int numbHits = 0;
  213.     numbHits = m_HitWholePtr->Raycast(startPoint,vector,hitArr,1,0);
  214.     if(numbHits > 0)
  215.     {
  216.         return true;
  217.     }
  218.     else
  219.     {
  220.         DOUBLE2 vector = DOUBLE2(-8,0);
  221.         numbHits = 0;
  222.         numbHits = m_HitWholePtr->Raycast(startPoint,vector,hitArr,1,0);
  223.         if(numbHits > 0)
  224.         {
  225.             return true;
  226.         }
  227.         else return false;
  228.     }
  229.  
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement