Exemple #1
0
void Box2dTest::SetupCollisionBody()
{
	if(!mPaddle)
	{
		mIdCounter++;
		int id = GAMEOBJECT_ID+mIdCounter;	
		int index = FIGUREDEF_PADDLE;
	
		BoxData* boxData   = new BoxData();
		boxData->m_shapeType=index;			
		mPaddle  = new GameObject(boxData);

		b2BodyDef bd;		
		bd.type = b2_staticBody;
		bd.position.Set(0.0f,-4.0f);	
	
		mPaddle->mBody = m_world->CreateBody(&bd);		 	
		b2FixtureDef fd;
		fd.shape = &(m_figureDefs[index].shape);
		fd.density = m_figureDefs[index].density;
		fd.friction = m_figureDefs[index].friction;
		fd.restitution = m_figureDefs[index].restitution;
		fd.filter.categoryBits = CATEGORY_FIGURE;
		fd.filter.maskBits = MASK_FIGURE;
		mPaddle->mBody->CreateFixture(&fd);
		mPaddle->mSpriteFrame = 0;
		mPaddle->mWidth = m_figureDefs[index].width;
		mPaddle->mHeight = m_figureDefs[index].height;
		mPaddle->mTextX0 = m_figureDefs[index].textX0;
		mPaddle->mTextY0 = m_figureDefs[index].textY0;
		mPaddle->mTextX1 = m_figureDefs[index].textX1;
		mPaddle->mTextY1 = m_figureDefs[index].textY1;
		mPaddle->mBoxHeight = m_figureDefs[index].boxHeight;
		mPaddle->mBoxWidth = m_figureDefs[index].boxWidth ;
		mPaddle->mNodeId = id;
		mPaddle->mBody->SetUserData(mPaddle->mUserData);			
		mPaddle->mActive=true;

		SpriteNode* node = new SpriteNode(mSmgr->getRootSceneNode(), mSmgr,id);				

		#if defined(_IRR_ANDROID_PLATEFORM_)
			node->Load("/mnt/sdcard/GameDemo/Figures.tga",256,128,
				m_figureDefs[index].width,
				m_figureDefs[index].height
				);
		#else
			node->Load("IrrlichtSdcard/Figures.tga",256,128,
				m_figureDefs[index].width,
				m_figureDefs[index].height);
		#endif

		node->setFrame(4);
	}

}	
Exemple #2
0
SpriteNode* SpriteNode::create(int type)
{
	SpriteNode* pRet = new SpriteNode();
	if(pRet && pRet->init(type))
	{
		pRet->autorelease();
		return pRet;
	}
	else
	{
		delete pRet;
		pRet = NULL;
		return NULL;
	}
}
Exemple #3
0
SkillsNode::SkillsNode(const sf::Texture& desativado, const sf::Texture& ativado, const sf::Texture& desenho, const sf::Texture& desc, int aprimoramento):
    simbolo()
{
    simbolo[0].setTexture(desativado);
    simbolo[1].setTexture(ativado);
    simbolo[2].setTexture(desenho);

    this->Dir = NULL;
    this->Esq = NULL;
    this->status = false;
    this->setOriginCenter();

    SpriteNode *aux = new SpriteNode(desc);

    aux->setPosition(200.f,155.f);
    this->insereFilho(aux);

    this->desc = false;

    this->aprimoramento = aprimoramento;
}
Exemple #4
0
bool Treasure::Load(File* f)
{
  static int id = TREASURE_START_ID;
  SetId(id++);

  Vec3f pos;
  if (!LoadVec3(f, &pos))
  {
    f->ReportError("Expected position");
    return false;
  }
  SetPos(pos);

  std::string tex;
  if (!f->GetDataLine(&tex))
  {
    f->ReportError("Expected texture filename");
    return false;
  }
  Vec2i cells;
  if (!LoadVec2(f, &cells))
  {
    f->ReportError("Expected num cells Vec2");
    return false;
  }

  if (!f->GetInteger(&m_points))
  {
    f->ReportError("Expected num points");
    return false;
  }

  // Only if player has not collected treasure in the current room
  //  before!
  Player* p = GetLocalPlayer();
  // Create scene node if no local player yet OR player exists and there is no treasure key for this room 
  if (!p || !(p->Exists(MakeTreasureKey())))
  {
    // Size depends on points value
    float size = XSIZE * (float)m_points / 500.0f;
    SpriteNode* sn = new SpriteNode(tex, cells.x, cells.y, size * 0.5f, size * 0.5f);

    SetSceneNode(sn);
    sn->GetSprite()->SetCellRange(0, cells.x * cells.y);
    sn->GetSprite()->SetCell(0);

    m_glow = new SpriteNode("flare.png", 1, 1, size, size);
    sn->AddChild(m_glow.GetPtr());

    File f;
    if (!f.OpenRead("fighteffect.txt"))
    {
      f.ReportError("Failed to load effect");
      Assert(0);
    }
    m_sparkle = new AttackEffect;
    if (!m_sparkle->Load(&f))
    {
      f.ReportError("Failed to load effect");
      Assert(0);
    }
    sn->AddChild(m_sparkle.GetPtr());
  }

  return true;
}
Exemple #5
0
void Box2dTest::Step(Settings* settings)
{
	float32 timeStep = settings->hz > 0.0f ? 1.0f / settings->hz : float32(0.0f);

	uint32 flags = 0;
	int collidedCount=0;

	m_world->SetWarmStarting(settings->enableWarmStarting > 0);
	m_world->SetContinuousPhysics(settings->enableContinuous > 0);
	m_world->SetSubStepping(settings->enableSubStepping > 0);

	m_world->Step(timeStep, settings->velocityIterations, settings->positionIterations);
 
	m_world->ClearForces();


	irr::core::array<int> toRemove;	
	mCacheData.clear();
	
	
	for (irr::u32 i = 0; i < mGameObjects.size(); i++)
	{	
		GameObject& gameObject = mGameObjects[i];
		
		if(gameObject.mBody!=NULL)
		{	
			{								
				
				float32 bpx=gameObject.mBody->GetPosition().x;
				float32 bpy=gameObject.mBody->GetPosition().y;
				
				if (bpy < -6.0 && gameObject.mBody->GetLinearVelocity().y <0) 
				{					
					gameObject.mUserData->m_setForRemoval=true;
					gameObject.mUserData->m_withCollision=false;
					
				}
				if (bpy > 6.0  && gameObject.mBody->GetLinearVelocity().y> 0) 
				{
					gameObject.mUserData->m_setForRemoval=true;
					gameObject.mUserData->m_withCollision=false;
						
				}


			

				video::SColorf  clrint(1.0,1.0,1.0,1.0);
				video::SColor  clri;
				
				vector3df scale(1.0f,1.0f,1.0f);

				
				if(gameObject.mUserData->m_emitSound >0)
					gameObject.mUserData->m_emitSound--;

				gameObject.mUserData->m_collideCount=0;
				gameObject.mUserData->m_setContactPointer = false;

					
				if(gameObject.mUserData->m_shapeType< FIGUREDEF_COUNT && gameObject.mUserData->m_setForRemoval ) 
				{
					
					if(gameObject.mUserData->m_withCollision)
					{	
						BodyCacheData cacheData;
						cacheData.cachedShapeType = gameObject.mUserData->m_shapeType;
						cacheData.cachedAngle = gameObject.mBody->GetAngle();
						cacheData.cachedAngulcarVelocity = gameObject.mBody->GetAngularVelocity();
						cacheData.cachedCenter = gameObject.mBody->GetWorldCenter();
						cacheData.cachedLinearVelocity= gameObject.mBody->GetLinearVelocity();
						cacheData.cachedWithCollision = gameObject.mUserData->m_withCollision;						
						m_world->DestroyBody(gameObject.mBody);
						gameObject.mBody=NULL;					
						
						toRemove.push_back(gameObject.mNodeId);										
						mCacheData.push_back(cacheData);
						collidedCount++;
					
					}	
					else
					{
						//objects that go outside the limits
						if(gameObject.mUserData->m_withCollision== false)
						{
							m_world->DestroyBody(gameObject.mBody);
							gameObject.mBody=NULL;											
							toRemove.push_back(gameObject.mNodeId);					
						}

					}
				}	
			}
		}									 	
		
		gameObject.mUserData->m_setForRemoval = false;        	
	}

	//delete collided objects
	for (irr::u32 j = 0; j < toRemove.size(); j++)
	{
		int nodeId = toRemove[j];
		
		for (irr::u32 i = 0; i < mGameObjects.size(); i++)
		{	
			if (mGameObjects[i].mNodeId == nodeId)
			{
				if(mGameObjects[i].mUserData)
				{
					delete mGameObjects[i].mUserData;
				}
				mGameObjects.erase(i);
				break;
			}
		}
	}

	
	player.addToScore(mCacheData.size());

	bool clearWebItem = false;

	SpriteNode* collideBodyNode = (SpriteNode*) mSmgr->getSceneNodeFromId(mPaddle->mNodeId);	

	if(mPaddle->mBody)
	{		
		mPaddle->mBody->SetTransform(b2Vec2(mIacoPoint.x, mPaddle->mBody->GetPosition().y),0);
	
		if(collideBodyNode)
				collideBodyNode->setPosition(
					irr::core::vector3df(
						mPaddle->mBody->GetPosition().x,
						mPaddle->mBody->GetPosition().y,
						0.0f)
						);
	}
	
	frameCount++;
	mCollideExternal=0;
    mMouseUp=false;

}
void main_loop()
{
	iGraph.DrawImage2D (0,0,736,448,0,0,736,448,Ganondorfs_castle);
	//Ganondorf.draw (&iGraph);
	//Ganondorf.print_pos();
	sprite_list_head.insert_node (&Ganondorf, 5);

	int portal_y = 280;

	for (int i=0; i<5; i++)
	{
		portal.select_frame (i,0);
		portal.set_position (-107 + i*120, portal_y);
		//portal.draw (&iGraph);
		sprite_list_head.insert_node (&portal, portal.get_sheet_x() == 2 ? 4 : 5);
	};

		//portal.select_frame (save_state.get_phase()+5, 0);

	portal.set_position (-109 + 5*120, portal_y);
	switch (save_state.get_phase())
	{
		case 0: 
			portal.select_frame (5, 0); 
			sprite_list_head.insert_node (&portal, 5);
		break;

		case 1: 
			portal.select_frame (7, 0);
			sprite_list_head.insert_node (&portal, 5);
			portal.select_frame (8, 0);
			sprite_list_head.insert_node (&portal, 6);
			break;

		case 2:
			portal.select_frame (7, 0);
			sprite_list_head.insert_node (&portal, 5);
			break;
	};

		
		//portal.draw (&iGraph);
		

	for (int i=0; i<6; i++)
	{
		if (save_state.get_temple(i))
		{
			medallion.select_frame (i, 0);
			medallion.set_position (38 + i*120, 220);
			//medallion.draw (&iGraph);
			sprite_list_head.insert_node (&medallion, 1);
		};
	};

	for (int i=0; i<6; i++)
		if (save_state.get_easter_egg(i))
		{
			easter_egg.select_frame (i, 0);
			easter_egg.set_position (19 + (SCREEN_WIDTH / 2) - ((3-i) * 109) - (30 * (3-i>0)), 414); //Último x = 605
			//prize_table.draw (&iGraph);
			sprite_list_head.insert_node (&easter_egg, 5);
		};

	if (save_state.light())
	{
		int i = 5;
		//easter_egg.set_position (605, 354);
		//sprite_list_head.insert_node (&easter_egg, 5);
		easter_egg.select_frame (i+1, 0);
		easter_egg.set_position (605, 352);
		sprite_list_head.insert_node (&easter_egg, 5);
	};




	if (see_generated_map)
	{
		MapNode* current_node = map_builder.get_list_head()->get_ptr();
		while (current_node != NULL)
		{
			forest_map.set_position (current_node->get_screen_x(), current_node->get_screen_y());
			forest_map.select_frame (current_node->get_sheet_x(), current_node->get_sheet_y());
			forest_map.draw (&iGraph);
			current_node = current_node->get_ptr();
		};
	};



	//Epona.draw (&iGraph);
	//Epona.set_position ((SCREEN_WIDTH - Epona.get_frame_w()) / 2 - 12, 345);
	sprite_list_head.insert_node (&Epona, 5);


	float hearts = save_state.get_hearts();
	int whole_hearts = floor (hearts);
	float fraction = hearts - whole_hearts;

	//printf ("hearts = %0.2f\twhole_hearts = %d\tfraction=%0.2f\n", hearts, whole_hearts, fraction);

	for (int i=0; i<20; i++)
	{
		if (i < 10)				heart.set_position (22*i + 20, 20);
		else					heart.set_position (22*(i-10) + 20, 40);
		

		if (i < whole_hearts)				heart.select_frame (0, 0);
		else if (i == whole_hearts)
		{
			if (fraction == 0.0f)			heart.select_frame (4, 0);
			else if (fraction == 0.25f)		heart.select_frame (3, 0);
			else if (fraction == 0.50f)		heart.select_frame (2, 0);
			else if (fraction == 0.75f)		heart.select_frame (1, 0);
		}
		else if (i > whole_hearts)			heart.select_frame (4, 0);
	
		if (i+1 <= save_state.get_heart_containers())
			sprite_list_head.insert_node (&heart, 10);
	};


	int total_rupees = save_state.get_rupees();
	int single_digit_rupees = 0;
	char rupee_str[4];
	for (int i=0; i<3; i++)
	{
		int divisor = pow ((double) 10, (int) 2-i);
		single_digit_rupees = total_rupees / divisor;
		rupee_str[i] = '0' + single_digit_rupees;
		total_rupees -= single_digit_rupees * divisor;
	};
	rupee_str[3] = '\0';
	rupee.set_position (20, SCREEN_HEIGHT - 10);
	sprite_list_head.insert_node (&rupee, 10);
	iGraph.SetTextFont ("Helvetica", 25, 10, 0, 0);
	iGraph.draw_text (45, SCREEN_HEIGHT - 13, rupee_str);




	//iGraph.draw_point (SCREEN_WIDTH/2, 280);
	


	sprite_list_head.draw_list (&iGraph);
	//sprite_list_head.print_node_line();
	sprite_list_head.clear();

	int mana_y = save_state.get_heart_containers() > 10 ? 45 : 30;

	iGraph.SetColor (0.0f, 255.0f, 127.0f);
	iGraph.fill_rectangle (20, mana_y, 234, mana_y + 10);
	iGraph.SetColor (255.0f, 255.0f, 255.0f);
	iGraph.draw_rectangle (20, mana_y, 234, mana_y + 10);

};