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); } }
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; } }
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; }
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; }
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); };