Exemplo n.º 1
0
void enemybulletThink(entity *self)
{
  self->rotation.y+=50;
  self->s.x += (float)(cos(self->v.y)*1);
  self->s.y += (float)(sin(self->v.y)*1);
  
  if(self->modelColor[1] >= 0.5f)
  {
    self->state = 1;
  }
  if(self->modelColor[1] <= 0.0f)
  {
    self->state = 0;
  }
  if(self->state == 1)
  {
    self->modelColor[1] -= 0.1f;
  }
  if(self->state == 0)
  {
    self->modelColor[1] += 0.1f;
  }
  if(self->s.y < -50.0f || self->s.y > 50.0f  || self->s.x < -50.0f || self->s.x > 50.0f|| self->health <= 0)
  {
    freeEntity(self);
  }
}
Exemplo n.º 2
0
bool shoot(Entity shooter, Position shotAt){
	if(getEntityAt(shotAt)->type == ET_ZOMBIE){
		if(shooter->remainingPoints > 0){

			//if the random number is greater than the number of moves, the shot hits
			unsigned int distance = calculateDistance(shooter->position, shotAt);
			if((rand()%50) > distance + score*.1){
				//hit
				Entity e = grid[shotAt.x][shotAt.y];
				grid[shotAt.x][shotAt.y] = NULL;
				score++;
				freeEntity(e);
			}
			else{
				//miss
			}

			shooter->remainingPoints -= 1;
			return true;
		}
		else{
			return false;
		}
	}
	else{
		return false;
	}
}
Exemplo n.º 3
0
void enemy3Think(entity *self)
{
  
  if(self->cooldown > 0)self->cooldown--;
  if(self->s.y > 40.0f)
  {
    self->shown = 0;
    self->solid = 0;
  }else
  {
    self->shown = 1;
    self->solid = 1;
  }
  if(self->s.y > 30.0f)
  {
    self->s.y -= 1;
  }else self->s.y -= enemy3speed;
  if( self->cooldown <= 0)
  {

    self->cooldown = 35;
    spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.3f);
    spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.5f);
    spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.7f);
    spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.1f);
    spawnenemyBullet(self->s.x,self->s.y+15,self->s.z,-2.9f);
  }
  if( self->cooldown == 15)
  {
    spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.3f);
    spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.5f);
    spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.7f);
    spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.1f);
    spawnenemyBullet(self->s.x,self->s.y+13,self->s.z,-0.9f);
  }
  if(self->bigcooldown > 0)self->bigcooldown--;
  if(self->state == HIT)
  {
    self->bigcooldown = 3;
    self->state = -1;
    self->modelColor[0] = 1.0f;
    self->modelColor[1] = 0.0f;
    self->modelColor[2] = 0.0f;
    self->modelColor[3] = 1.0f;
  }
  if(self->bigcooldown <= 0)
  {
    self->state = -1;
    self->modelColor[0] = enemy3Color.x;
    self->modelColor[1] = enemy3Color.y;
    self->modelColor[2] = enemy3Color.z;
    self->modelColor[3] = 1.0f;
  }
  if(self->health <= 0 || self->s.y <= -80.0f)
  {
    spawnExplosion(self->s.x,self->s.y,self->s.z, 1.0f);
    if(self->health <= 0) score += 180;
    freeEntity(self);
  }
}
Exemplo n.º 4
0
void freeEntity(entity *e) {
  if (e == NULL) return;

  debug(DEBUG_TDS, "\033[01;36mfreeEntity\033[0m");

  freeEntity(e->brother);
  free(e);
}
Exemplo n.º 5
0
void ClearEntities()
{
  int i;
  for(i = 0;i < MAXENTITIES;i++)
  {
    freeEntity(&EntityList[i]);
  }
}
Exemplo n.º 6
0
void enemy1Think(entity *self)
{
  float dy,dx;
  
  if(self->s.y > 40.0f)
  {
    self->shown = 0;
    self->solid = 0;
  }else
  {
    self->shown = 1;
    self->solid = 1;
  }
  if(self->cooldown > 0)self->cooldown--;
  if(self->state2 == 1 && self->cooldown <= 0)
  {
    self->s.x += (float)(cos(self->v.y)*enemy1speed);
    self->s.y += (float)(sin(self->v.y)*enemy1speed);
    self->rotation.y+=30;
  }else if(self->cooldown <= 0)
  { 
    self->s.y -= 1;
    self->rotation.y+=10;
  }
  if(self->state2 == 1 && self->cooldown > 0)self->rotation.y+=10;
  if(self->s.y < 20.0f && self->state2 == 0)
  {
    dy=playerPos.y-self->s.y;
    dx=playerPos.x-self->s.x;
    self->v.y=(float)atan2(dy,dx);
    self->state2 = 1;
    self->cooldown = 10;
  }
  if(self->bigcooldown > 0)self->bigcooldown--;
  if(self->state == HIT)
  {
    self->bigcooldown = 3;
    self->state = -1;
    self->modelColor[0] = 1.0f;
    self->modelColor[1] = 0.0f;
    self->modelColor[2] = 0.0f;
    self->modelColor[3] = 1.0f;
  }
  if(self->bigcooldown <= 0)
  {
    self->state = -1;
    self->modelColor[0] = enemy1Color.x;
    self->modelColor[1] = enemy1Color.y;
    self->modelColor[2] = enemy1Color.z;
    self->modelColor[3] = 1.0f;
  }
  if(((self->s.y < -50.0f || self->s.y > 50.0f  || self->s.x < -50.0f || self->s.x > 50.0f) && self->state2 == 1) || self->health <= 0)
  {
    spawnExplosion(self->s.x,self->s.y,self->s.z, 0.2f);
    if(self->health <= 0) score += 30;
    freeEntity(self);
  }
}
Exemplo n.º 7
0
void freeScope(scope *scope) {
  if (scope == NULL) return;

  debug(DEBUG_TDS, "\033[01;36mfreeScope\033[0m");

  freeScope(scope->children);
  freeScope(scope->brother);

  freeEntity(scope->entities);

  free(scope);
}
Exemplo n.º 8
0
void mineThink(entity *self)
{
  Coord TempS;    /*temp position*/
  Coord cam;

  bsp *node;
  int i;
  Coord downvect;

  self->rotation.z+=10;
  UpdatePosition(self);

  cam.x = self->s.x;
  cam.y = self->s.y;
  cam.z = self->s.z;


  downvect.x = 0;
  downvect.y = 0;
  downvect.z = -1;

  node = checkBsp(self->s);
  for (i = 0; i < node->numTris; i++)
  {
    if(RayInTriangle(cam, downvect, node->triList[i]->v1, node->triList[i]->v2, node->triList[i]->v3, &TempS) == -1)
    {
      self->s.z=TempS.z+2;
        
      break;
    }
  }
  if(self->s.x > maxx || self->s.x < minx || self->s.y > maxy || self->s.y < miny)
  {
    if(self->state==Top)
    {
      SpawnMine(crandom(w),maxy,0.0f, 1*crandom(1),1*crandom(1), 0.0f, self->state);
    }
    if(self->state==Bottom)
    {
      SpawnMine(crandom(w),miny,0.0f, 1*crandom(1),1*crandom(1), 0.0f, self->state);
    }
    if(self->state==Right)
    {
      SpawnMine(maxx,crandom(h),0.0f, 1*crandom(1),1*crandom(1), 0.0f, self->state);
    }
    if(self->state==Left)
    {
      SpawnMine(minx,crandom(h),0.0f, 1*crandom(1),1*crandom(1), 0.0f, self->state);
    }
    freeEntity(self);
    return;
  }
}
Exemplo n.º 9
0
void playerupdate(entity *self)
{
  playerPos=self->s;
  playerlife=self->lives;

  if(self->deadcool > 0)
  {
    self->solid=0;
    if(self->deadcool%5)
    {
      self->modelColor[0] = 1.0f;
      self->modelColor[1] = 1.0f;
      self->modelColor[2] = 1.0f;
      self->modelColor[3] = 0.1f;
    }else
    { 
      self->modelColor[0] = playerColor.x;
      self->modelColor[1] = playerColor.y;
      self->modelColor[2] = playerColor.z;
      self->modelColor[3] = 1.0f;
    }
  }else
  {
    self->solid=1;
    self->modelColor[0] = playerColor.x;
    self->modelColor[1] = playerColor.y;
    self->modelColor[2] = playerColor.z;
    self->modelColor[3] = 1.0f;
  }
  if(self->health <= 0)
  {
    spawnExplosion(self->s.x,self->s.y,self->s.z, 1.0f);
    self->deadcool= 60;
    self->lives--;
    if(self->lives < 0)
    {
      freeEntity(self);
      inMenu = 1;
      return;
    }
    self->health = 1;
    self->s.y = -20;
    self->s.x = 0;
  }
}
Exemplo n.º 10
0
void BossThink(entity *self)
{
  float dy,dx;
  if(self->s.y > 20.0f)
  {
    self->shown = 0;
    self->solid = 0;
    self->s.y -= 1;
  }else
  {
    self->shown = 1;
    self->solid = 1;
    DrawHealth(self->health*0.15f, self->maxHealth, 1, 0, 0);
  if(self->cooldown > 0)self->cooldown--;
  if(self->state2 ==1)
  {
  self->s.x-= 0.5f;
    if(self->s.x <= -20.0f)
    {
      self->s.x = -20.0f;
      self->state2=2;
    }
  }
  if(self->state2 ==2)
  {
    self->s.x+= 0.5f;
    if(self->s.x >= 20.0f)
    {
      self->s.x = 20.0f;
      self->state2=1;
    }
  }
  if(self->cooldown%5==0 && self->cooldown <= 40)
  {
    dy=playerPos.y-self->s.y;
    dx=playerPos.x-self->s.x;
  
    self->v.y=(float)atan2(dy,dx);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.8f);
  }
  if( self->cooldown <= 200 && self->cooldown>= 115 && self->cooldown%8==0)
  {
    dy=playerPos.y-self->s.y;
    dx=playerPos.x-self->s.x;
  
    self->v.y=(float)atan2(dy,dx);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-1.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+1.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-1.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+1.2f);
  }
  if( self->cooldown <= 0)
  {
    self->cooldown = 195;
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.9f);
  }
  if( self->cooldown == 15)
  {
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.9f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.9f);
  }
  if( self->cooldown == 100)
  {
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.9f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.9f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.9f);
  }
  if( self->cooldown == 50)
  {
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.9f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.9f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.9f);
  }
  if( self->cooldown == 90)
  {
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z, 0.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.8f);
  }
  if( self->cooldown == 80)
  {
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-3.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.0f);
  }
  if( self->cooldown == 70)
  {
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.9f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.9f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.3f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.7f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.9f);
  }
  if( self->cooldown == 60)
  {
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-0.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-3.0f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.4f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.6f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.8f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-1.2f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,-2.0f);
  }
  if(self->bigcooldown > 0)self->bigcooldown--;
  if(self->state == HIT)
  {
    self->bigcooldown = 3;
    self->state = -1;
    self->modelColor[0] = 1.0f;
    self->modelColor[1] = 0.0f;
    self->modelColor[2] = 0.0f;
    self->modelColor[3] = 1.0f;
  }
  if(self->bigcooldown <= 0)
  {
    self->state = -1;
    self->modelColor[0] = bossColor.x;
    self->modelColor[1] = bossColor.y;
    self->modelColor[2] = bossColor.z;
    self->modelColor[3] = 1.0f;
  }
  if(self->health <= 0 || self->s.y <= -40.0f)
  {
    spawnExplosion(self->s.x,self->s.y,self->s.z, 1.0f);
    if(self->health <= 0) score += 5000;
    freeEntity(self);
  }
  }
}
Exemplo n.º 11
0
void enemy2Think(entity *self)
{
  float dy,dx;
  
  if(self->cooldown > 0)self->cooldown--;
  if(self->s.y > 40.0f)
  {
    self->shown = 0;
    self->solid = 0;
  }else
  {
    self->shown = 1;
    self->solid = 1;
  }
  if(self->s.y < 20.0f)
  {
    dy=playerPos.y-self->s.y;
    dx=playerPos.x-self->s.x;
  
    self->v.y=(float)atan2(dy,dx);
    self->rotation.z=(self->v.y*(RadToDeg))-90;
    self->s.y -= enemy2speed;
  if( self->cooldown <= 0)
  {
    self->cooldown = 55;
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.1f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.1f);
  }
  if( self->cooldown == 15)
  {
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y-0.5f);
    spawnenemyBullet(self->s.x,self->s.y,self->s.z,self->v.y+0.5f);
  }
  }else self->s.y -= 1;
  if(self->frame < self->totalframes)
  {
    self->frame++;
  }else
  {
    self->frame=0;
    if(self->keyframe == 0)
    {
      self->totalframes=10;
      self->keyframe=1;
      self->nextkeyframe=0;
    }else
    {
      self->totalframes=20;
      self->keyframe=0;
      self->nextkeyframe=1;
    }
  }
  if(self->bigcooldown > 0)self->bigcooldown--;
  if(self->state == HIT)
  {
    self->bigcooldown = 3;
    self->state = -1;
    self->modelColor[0] = 1.0f;
    self->modelColor[1] = 0.0f;
    self->modelColor[2] = 0.0f;
    self->modelColor[3] = 1.0f;
  }
  if(self->bigcooldown <= 0)
  {
    self->state = -1;
    self->modelColor[0] = enemy2Color.x;
    self->modelColor[1] = enemy2Color.y;
    self->modelColor[2] = enemy2Color.z;
    self->modelColor[3] = 1.0f;
  }
  if(self->health <= 0 || self->s.y <= -40.0f)
  {
    spawnExplosion(self->s.x,self->s.y,self->s.z, 0.2f);
    if(self->health <= 0) score += 80;
    freeEntity(self);
  }
}
Exemplo n.º 12
0
void tileThink(entity *self)
{
  Uint8 *keys;
  Coord TempS;    /*temp position*/
  Coord cam;
  char dm[80];
  bsp *node;

  int i;
  Coord downvect;

    keys = SDL_GetKeyState(NULL);

    if(self->state==0)
    {
    if(keys[SDLK_LEFT])
    {
      self->v.y-=0.05f;
      self->v.x+=0.05f;
      if(self->v.y <= -1)
      {
        self->v.y=-1;
        self->v.x=0;
        self->state=1;
      }
      if(self->v.x >= 1)
      {
        self->v.x=1;
      }
    }
    if(keys[SDLK_RIGHT])
    {
      self->v.y+=0.05f;
      self->v.x+=0.05f;
      if(self->v.y >= 1)
      {
        self->v.y=1;
        self->v.x=0;
        self->state=1;
      }
      if(self->v.x >= 1)
      {
        self->v.x=1;
      }
    }
    }
    if(self->state==1)
    {
      if(keys[SDLK_LEFT])
      {
        self->v.y+=0.05f;
        self->v.x-=0.05f;
        if(self->v.y >= 1)
        {
          self->v.y=1;
          self->v.x=0;
          self->state=0;
        }
        if(self->v.x <= -1)
        {
          self->v.x=-1;
        }
      }
      if(keys[SDLK_RIGHT])
      {
        self->v.y-=0.05f;
        self->v.x-=0.05f;
        if(self->v.y <= -1)
        {
          self->v.y=-1;
          self->v.x=0;
          self->state=0;
        }
        if(self->v.x <= -1)
        {
          self->v.x=-1;
        }
      }
    }

    if(self->state==0)
    {
      self->rotation.z=(90*self->v.y)-90;
    }
    if(self->state==1)
    {
      self->rotation.z=-(90*self->v.y)+90;
    }
    UpdatePosition(self);

    cam.x = self->s.x;
    cam.y = self->s.y;
    cam.z = self->s.z;
    glCamera.position.x= -self->s.x;
    glCamera.position.y= -self->s.y+100;
    glCamera.position.z= -self->s.z-50;

    downvect.x = 0;
    downvect.y = 0;
    downvect.z = -1;

    node = checkBsp(self->s);
  for (i = 0; i < node->numTris; i++)
  {
    //Draw3DThickLine( node->triList[i]->v1, node->triList[i]->v2,1,0,0);
    //Draw3DThickLine(node->triList[i]->v3, node->triList[i]->v2,1,0,0);
    //Draw3DThickLine( node->triList[i]->v1, node->triList[i]->v3,1,0,0);
    if(RayInTriangle(cam, downvect, node->triList[i]->v1, node->triList[i]->v2, node->triList[i]->v3, &TempS) == -1)
    {
      self->s.z=TempS.z+2;
        
      break;
    }
  }
  //sprintf(dm,"%f %f",self->s.x, self->s.y);
  //NewMessage(dm,IndexColor(White));
if(self->health <=0 || self->s.x > 310.0f || self->s.x < -190.0f || self->s.y > 310.0f || self->s.y < -220.0f)
{
  freeEntity(self);
  playdead=1;
  NewMessage("Game Over! Press Escape to exit",IndexColor(White));
}

}