void Monster::harmCheck(float timeSinceLastFrame) { /// 先检查地形,更新怪物信息 checkCellType(); checkMonsterIsChange(); mCheckMethod->bulletHarmCheck(mMonsterState->getBulletState(), mBulletHarmValue, mBulletHarmTime, mBlood, mSpeedPre, mSpeedCurrent, mSpeedTemp, timeSinceLastFrame); mCheckMethod->terrainHarmCheck(mMonsterState->getTerrainState(), mTerrainHarmvalue, mBlood, mSpeedPre, mSpeedCurrent, mSpeedTemp, timeSinceLastFrame); /// 状态恢复 stateRecover(); /// 判断是否死亡 //mIsDead = mCheckMethod->checkIsDead(mBlood); if (!mIsDead && mCheckMethod->checkIsDead(mBlood)) { mIsDead = true; Stage::playSound("../Media/Sound/dead.wav", false); } /// 根据地形改地图 changeMazeByTerrain(mMonsterState->getTerrainState()); /// 改变头顶血量显示 Billboard* health = mHealthHUD->getBillboard(0); float healthPer = mBlood / mMaxBlood; float healthLength = healthPer * mHealthHUD->getDefaultWidth(); health->setDimensions(healthLength, mHealthHUD->getDefaultHeight()); ColourValue maxHealthCol = ColourValue(0, 0.8f, 0); ColourValue minHealthCol = ColourValue(1, 0, 0); ColourValue currHealthCol = maxHealthCol * healthPer + minHealthCol * (1 - healthPer); health->setColour(currHealthCol); // 设置是否显示着火和冰冻 if (!mFrozenPs) mFrozenPs = (ParticleSystem*)mNode->getAttachedObject(mNode->getName() + "frozen"); if (!mBurnPs) mBurnPs = (ParticleSystem*)mNode->getAttachedObject(mNode->getName() + "burn"); if (mMonsterState->getBulletState() == "ice") { mBurnPs->setVisible(false); mFrozenPs->setVisible(true); } else if (mMonsterState->getBulletState() == "fire") { mBurnPs->setVisible(true); mFrozenPs->setVisible(false); } else { mBurnPs->setVisible(false); mFrozenPs->setVisible(false); } }
void BillboardSetComponent::createBillboard(const PonykartParsers::BillboardBlock* const block) { Billboard* bb = billboardSet->createBillboard(block->getVectorProperty("Position")); // make our billboard // set its color if it has one, and a rotation auto quatIt=block->getQuatTokens().find("colour"); if (quatIt != block->getQuatTokens().end()) bb->setColour(toColourValue(quatIt->second)); bb->setRotation(Degree(block->getFloatProperty("Rotation", 0))); auto rectQIt = block->getQuatTokens().find("texturecoords"); if (rectQIt != block->getQuatTokens().end()) bb->setTexcoordRect(rectQIt->second.x, rectQIt->second.y, rectQIt->second.z, rectQIt->second.w); // It's best to not do this unless we really need to since it makes it less efficient auto fTokens = block->getFloatTokens(); auto heightIt=fTokens.find("height"), widthIt=fTokens.find("width"); if (heightIt!=fTokens.end() && widthIt!=fTokens.end()) bb->setDimensions(widthIt->second, heightIt->second); }