Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
MATTHEW SLUG 0.5 - Character.cpp

Character.cpp

Caricato da: Matthew
Scarica il programma completo

  1. /*
  2.  * Character.cpp
  3.  *
  4.  *  Created on: 12-Oct-2009
  5.  *      Author: matthew
  6.  */
  7.  
  8. #include "Character.h"
  9. #include "mylib.h"
  10.  
  11. Character::Character(BITMAP *image):Object(image)
  12. {
  13.         flying = true;
  14.         jumping=false;
  15.         setDynamic(true);
  16.         fire_allowed=true;
  17.         fire_automatic=false;
  18.         life=20;
  19.         lifeinit=20;
  20.         vital=true;
  21.         dead = false;
  22.         setGravity(1);
  23.  
  24. }
  25.  
  26. Character::~Character() {
  27. }
  28.  
  29. void Character::move(vector<Object> &object, Character *cha)
  30.     {
  31.                 if(getFlying())
  32.                         setSpeedY(getSpeedY()+getGravity());
  33.                 int y_new = getY() + (int)getSpeedY();
  34.                 int x_new = getX()+(int)getSpeedX();
  35.                 float xc; //coordinates of the collision point
  36.  
  37.                 //Check collisions with other objects
  38.                 for(unsigned int i=0; i<object.size(); i++)
  39.                 {
  40.                         if((collide_x(x_new,getW(),object[i].getX(),object[i].getW()))&&(collide_y(y_new,getH(),object[i].getY(),object[i].getH())))
  41.                         {
  42.                                 //If coming down
  43.                                 if(getSpeedY()>0)
  44.                                 {
  45.                                         //Get x during collision
  46.                                         xc=getX()+getSpeedX()*(object[i].getY()-(getY()+getH()))/getSpeedY();
  47.                                         //If it collided on the top
  48.                                         if(((xc+getW())>=object[i].getX()) && (xc<=(object[i].getX()+object[i].getW())))
  49.                                         {
  50.                                                 y_new = object[i].getY()-getH();
  51.                                                 x_new = getX()+getSpeedX()*(y_new-getY())/getSpeedY();
  52.                                                 setSpeedX(0);
  53.                                                 if(x_new+getW()/2<object[i].getX())
  54.                                                 {
  55.                                                         x_new=object[i].getX()-getW();
  56.                                                 }
  57.                                                 else if(x_new+getW()/2>object[i].getX()+object[i].getW())
  58.                                                 {
  59.                                                         x_new=object[i].getX()+object[i].getW();
  60.                                                 }
  61.                                                 else
  62.                                                 {
  63.                                                         jumping=false;
  64.                                                         flying=false;
  65.                                                         setSpeedY(0);
  66.                                                 }
  67.                                         }
  68.                                         //If it collided on left side
  69.                                         else if(xc+getW()<object[i].getX())
  70.                                         {
  71.                                                 x_new = object[i].getX()-getW();
  72.                                                 y_new = getY()+getSpeedY()*(x_new-getX())/getSpeedX();
  73.                                                 setSpeedY(0);
  74.                                                 setSpeedX(0);
  75.                                         }
  76.                                         //If it collided on right side
  77.                                         else if(xc>object[i].getX()+object[i].getW())
  78.                                         {
  79.                                                 x_new = object[i].getX()+object[i].getW();
  80.                                                 y_new = getY()+getSpeedY()*(x_new-getX())/getSpeedX();
  81.                                                 setSpeedY(0);
  82.                                                 setSpeedX(0);
  83.                                         }
  84.                                 }
  85.                                 //If coming up
  86.                                 else if(getSpeedY()<0)
  87.                                 {
  88.                                         //Get x during collision
  89.                                         xc=getX()+getSpeedX()*(object[i].getY()+object[i].getH()-getY())/getSpeedY();
  90.                                         //If it collided on the bottom
  91.                                         if(((xc+getW())>=object[i].getX()) && (xc<=(object[i].getX()+object[i].getW())))
  92.                                         {
  93.                         y_new = object[i].getY()+object[i].getH();
  94.                                                 x_new = getX()+getSpeedX()*(y_new-getY())/getSpeedY();
  95.                                                 setSpeedY(0);
  96.                                         }
  97.                                         //If it collided on left side
  98.                                         else if(xc+getW()<object[i].getX())
  99.                                         {
  100.                                                 x_new = object[i].getX()-getW();
  101.                                                 y_new = getY()+getSpeedY()*(x_new-getX())/getSpeedX();
  102.                                                 setSpeedY(0);
  103.                                                 setSpeedX(0);
  104.                                         }
  105.                                         //If it collided on right side
  106.                                         else if(xc>=object[i].getX()+object[i].getW())
  107.                                         {
  108.                                                 x_new = object[i].getX()+object[i].getW();
  109.                                                 y_new = getY()+getSpeedY()*(x_new-getX())/getSpeedX();
  110.                                                 setSpeedY(0);
  111.                                                 setSpeedX(0);
  112.                                         }
  113.                                 }
  114.                                 else
  115.                                 {
  116.                                         if(getSpeedX()>0)
  117.                                         {
  118.                                                 x_new= object[i].getX()-getW();
  119.                                                 setSpeedX(0);
  120.                                                 y_new=getY();
  121.                                         }
  122.                                         else if(getSpeedX()<0)
  123.                                         {
  124.                                                 x_new=object[i].getX()+object[i].getW();
  125.                                                 setSpeedX(0);
  126.                                                 y_new=getY();
  127.                                         }
  128.  
  129.                                 }
  130.  
  131.                         }
  132.                  }
  133.  
  134.          if(y_new <0)
  135.          {
  136.                 //If it goes beyond the top border, pull it back
  137.                 y_new=0;
  138.                 setSpeedY(0);
  139.          }
  140.  
  141.          else if(y_new >600-getH())
  142.          {
  143.                 //If it goes beyond the bottom border, pull it back
  144.                 dead=true;
  145.          }
  146.          //Set new y
  147.          setY(y_new);
  148.          //Set new x
  149.          setX(x_new);
  150.  
  151.          //If standing and moving, check whether it's gone beyond the character border
  152.          //If it has, make it fall
  153.          if((!flying))
  154.          {
  155.                          flying=true;
  156.                          for(unsigned int i=0; i<object.size(); i++)
  157.                          {
  158.                                         if((collide_x(getX(),getW(),object[i].getX(),object[i].getW()))&&(collide_y(getY()+1,getH(),object[i].getY(),object[i].getH())))
  159.                                         {
  160.                                                 if(getX()+getW()/2<object[i].getX())
  161.                                                 {
  162.                                                         setX(object[i].getX()-getW());
  163.                                                 }
  164.                                                 else if(getX()+getW()/2>object[i].getX()+object[i].getW())
  165.                                                 {
  166.                                                         setX(object[i].getX()+object[i].getW());
  167.                                                 }
  168.                                                 flying=false;
  169.  
  170.                                         }
  171.  
  172.                      }
  173.          }
  174.  
  175.  
  176.  
  177.  
  178.  
  179.         }
  180.     bool Character::CanFire()
  181.     {
  182.          return fire_allowed;
  183.     }
  184.     void Character::AllowFire(bool value)
  185.     {
  186.          fire_allowed=value;
  187.     }
  188.     bool Character::getAuto()
  189.     {
  190.         return fire_automatic;
  191.     }
  192.     void Character::setAuto(bool value)
  193.     {
  194.         fire_automatic=value;
  195.     }
  196.         bool Character::getFlying()
  197.     {
  198.          return flying;
  199.     }
  200.     void Character::setFlying(bool value)
  201.     {
  202.          flying = value;
  203.     }
  204.     bool Character::getJumping()
  205.     {
  206.         return jumping;
  207.     }
  208.     void Character::setJumping(bool value)
  209.     {
  210.         jumping = value;
  211.     }
  212.     int Character::getLife()
  213.     {
  214.         return life;
  215.     }
  216.     int Character::getLifeInit()
  217.     {
  218.         return lifeinit;
  219.     }
  220.     void Character::setLife(int value)
  221.     {
  222.         life = value;
  223.         lifeinit = value;
  224.     }
  225.     void Character::lessLife()
  226.     {
  227.         life--;
  228.         if(life<=0)
  229.         {
  230.                 dead=true;
  231.         }
  232.     }
  233.     bool Character::getVital()
  234.     {
  235.         return vital;
  236.     }
  237.     void Character::setVital(bool value)
  238.     {
  239.         vital=value;
  240.     }
  241.     bool Character::getDead()
  242.     {
  243.         return dead;
  244.     }