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); }
void Projectile::onTimeStep() { Object::onTimeStep(); Billboard* billboard = billboards_->getBillboard(0); billboard->setRotation(billboard->getRotation() + Radian(0.2f)); time_ += 0.1f; float width = billboard->getOwnWidth(); float height = billboard->getOwnWidth(); if (hit_) { if (target_) node_->setPosition(target_->getPosition()); width = min(2.0f, width + 0.2f); // Grow the projectile height = min(2.0f, height + 0.2f); } else { width = 0.2f * sinf(time_) + 1.0f; // Make the projectile oscillate in size height = 0.2f * sinf(time_) + 1.0f; } billboard->setDimensions(width, height); }