/* addSpriteToRenderList - This method checks to see if the sprite parameter is inside the viewport. If it is, a RenderItem is generated for that sprite and it is added to the render list. */ void SpriteManager::addSpriteToRenderList(AnimatedSprite *sprite, RenderList *renderList, Viewport *viewport) { // GET THE SPRITE TYPE INFO FOR THIS SPRITE AnimatedSpriteType *spriteType = sprite->getSpriteType(); PhysicalProperties *pp = sprite->getPhysicalProperties(); float rotation = sprite->getRotationInRadians(); // IS THE SPRITE VIEWABLE? if (viewport->areWorldCoordinatesInViewport( pp->getX(), pp->getY(), spriteType->getTextureWidth(), spriteType->getTextureHeight())) { // SINCE IT'S VIEWABLE, ADD IT TO THE RENDER LIST RenderItem itemToAdd; itemToAdd.id = sprite->getFrameIndex(); renderList->addRenderItem( sprite->getCurrentImageID(), pp->round(pp->getX()-viewport->getViewportX()), pp->round(pp->getY()-viewport->getViewportY()), pp->round(pp->getZ()), sprite->getAlpha(), spriteType->getTextureWidth(), spriteType->getTextureHeight(), rotation); } }
/* This method loads all the sprite types found in the provided sprite type list file into the game state manager, including their images. */ bool PoseurSpriteTypesImporter::loadSpriteTypes(Game *game, wstring spriteTypesListFileName) { int slashIndex = spriteTypesListFileName.rfind('/'); dir = string(spriteTypesListFileName.begin(), spriteTypesListFileName.end()).substr(0, slashIndex+1); const char *spriteTypesListFile = newCharArrayFromWstring(spriteTypesListFileName); bool success = loadSpriteTypesListInfo(spriteTypesListFile); if (!success) return false; for (unsigned int i = 0; i < spriteTypes.size(); i++) { success = loadSpriteTypeInfo(spriteTypes[i]); if (!success) return false; } TextureManager *tm = game->getGraphics()->getWorldTextureManager(); WStringTable *wStringTable = tm->getWStringTable(); // NOW LET'S USE ALL THE INFO WE'VE LOADED // LET'S START BY LOADING THE TEXTURES INTO THE WORLD TEXTURE MANAGER for (unsigned int i = 0; i < spriteTypes.size(); i++) { string spriteType = spriteTypes[i]; unsigned int offset = wStringTable->getNumWStringsInTable(); map<int, string> images = spriteTypesImages[spriteType]; for (int j = 0; j < images.size(); j++) { string imageToLoad = images[j]; wstring wImageToLoad(imageToLoad.begin(), imageToLoad.end()); tm->loadTexture(wImageToLoad); } AnimatedSpriteType *ast = new AnimatedSpriteType(); unsigned int spriteTypeId = game->getGSM()->getSpriteManager()->addSpriteType(ast); ast->setSpriteTypeID(spriteTypeId); Dimensions dim = spriteTypesDimensions[spriteType]; ast->setTextureSize(dim.width, dim.height); map<string, vector<Pose>> animations = spriteTypesAnimationsLists[spriteType]; map<string, vector<Pose>>::iterator it = animations.begin(); while (it != animations.end()) { string key = it->first; wstring wKey(key.begin(), key.end()); ast->addAnimationSequence(wKey); vector<Pose> poseList = it->second; vector<Pose>::iterator poseIt = poseList.begin(); while (poseIt != poseList.end()) { Pose pose = *poseIt; ast->addAnimationFrame(wKey, pose.imageId + offset - 1, pose.duration); poseIt++; } it++; } } return true; }
void SpriteManager::addSpriteToRenderList(AnimatedSprite *sprite, RenderList *renderList, Viewport *viewport) { // GET THE SPRITE TYPE INFO FOR THIS SPRITE AnimatedSpriteType *spriteType = sprite->getSpriteType(); PhysicalProperties *pp = sprite->getPhysicalProperties(); if (i >= 3) { b2Body* bods= sprite->getBody(); b2Vec2 position = bods->GetPosition(); pp->setX(position.x); pp->setY(position.y); } i+=1; // IS THE SPRITE VIEWABLE? if (viewport->areWorldCoordinatesInViewport( pp->getX(), pp->getY(), spriteType->getTextureWidth(), spriteType->getTextureHeight()) ) { // SINCE IT'S VIEWABLE, ADD IT TO THE RENDER LIST RenderItem itemToAdd; itemToAdd.id = sprite->getFrameIndex(); if (spriteType->getTextureWidth()==61) { renderList->addRenderItem( sprite->getCurrentImageID(), pp->round(X-viewport->getViewportX()), pp->round(Y-25-viewport->getViewportY()), pp->round(pp->getZ()), sprite->getAlpha(), spriteType->getTextureWidth(), spriteType->getTextureHeight()); } else { renderList->addRenderItem( sprite->getCurrentImageID(), pp->round(pp->getX()-viewport->getViewportX()), pp->round(pp->getY()-viewport->getViewportY()), pp->round(pp->getZ()), sprite->getAlpha(), spriteType->getTextureWidth(), spriteType->getTextureHeight()); } } }