示例#1
0
void	Bomb::DropBonusComponent::Update()
{
  PositionComponent *pos
    = static_cast<PositionComponent *>(this->GetParent()->GetComponent(Position_c));
  LifeComponent *life
    = static_cast<LifeComponent *>(this->GetParent()->GetComponent(Life_c));
  enum GameObjectTag	bonusTab[3];

  bonusTab[0] = BonusSpeed_o;
  bonusTab[1] = BonusAddBomb_o;
  bonusTab[2] = BonusSizeBomb_o;
  ListObj	*list_world = G_ObjectsContainer->GetObjByTag(World_o);
  if (list_world && life && life->GetLife() <= 0 && !this->_dropped)
    {
      IEntity	*world = list_world->front();
      if (world)
	{
	  MapComponent	*map = static_cast<MapComponent *>(world->GetComponent(Map_c));
	  if (pos && map)
	    {
	      double posX = pos->GetPosition(PositionComponent::X);
	      double posY = pos->GetPosition(PositionComponent::Y);

	      if (rand() % 10 < 4)
		{
		  IEntity	*bonus = G_EntityFactory->Create(bonusTab[rand() % 3]);

		  if (bonus)
		    {
		      pos = static_cast<PositionComponent *>(bonus->GetComponent(Position_c));

		      G_ObjectsContainer->AddObj(bonus);
		      G_EvDispatcher->SendEvent(new Event::GraphicEvent(bonus, Graphic::MESHADD),
		      				Event::COMMON);
		      pos->SetPosition(posX, posY);
		      map->AddEntity(bonus, posX, posY);
		      bonus->Start();
		      this->_dropped = true;
		    }
		}
	    }
	}
    }
}
示例#2
0
void  Bomb::DestructibleBox::EventTreatment()
{
  if (this->_events.size())
  {
    Event::DamageEvent  *dam = static_cast<Event::DamageEvent *>(this->_events.front());
    this->_events.pop_front();

    if (dam && dam->id == this->GetId())
    {
      LifeComponent *life = static_cast<LifeComponent *>(this->GetComponent(Life_c));
      if (life)
      {
        life->Damage(dam->damage);
        if (life->GetLife() <= 0)
          G_EvDispatcher->SendEvent(new Event::ScoreEvent(Event::KillTargetScoring, dam->sender, this->GetId()), Event::COMMON);
      }
    }
    delete dam;
  }
}
示例#3
0
Bomb::DestructibleBox::DestructibleBox()
{
	this->ctor(DestructibleBox_o);

	PositionComponent	*pos = new PositionComponent();
	pos->AssignEntity(this);
	this->AddComponent(pos);

	LifeComponent		*life = new LifeComponent(1);
	life->AssignEntity(this);
	this->AddComponent(life);

	PhysicComponent		*physic = new PhysicComponent(DESTRUCTIBLE_BOX_HITBOX);
	physic->AssignEntity(this);
	this->AddComponent(physic);


  DropBonusComponent   *dropBonus = new DropBonusComponent();
  dropBonus->AssignEntity(this);
  this->AddComponent(dropBonus);

	MeshComponent		*graphic =
	  new MeshComponent(GEOMETRY,
			    new std::string("box2"),
			    new std::string(MODELPATH"box2.tga"),
			    DestructibleBoxMeshInit,
			    DestructibleBoxMeshDraw,
			    G_Renderer);
	graphic->AssignEntity(this);
	this->AddComponent(graphic);

  this->_isDestroy = true;

	/*AudioComponent		*audio = new AudioComponent();
	audio->AssignEntity(this);
	this->AddComponent(audio);*/
}