void TextureEmitter::Add() { Sprite p; p.setPosition(getPosition()); // add some randomness to the spread, so it looks better // this should be opt in though double variation = ((rand() % getSpread()) - (getSpread() / 2)) / 100.0f; double dir = getDirection() - 90.0f; double vx = (cos(dir * RAD) + variation); double vy = (sin(dir * RAD) + variation); p.setVelocity(vx * getVelocity().x, vy * getVelocity().y); // Check efficiency of this, is it really worth using the // resource manager for this? I'll only use the image once for thousands of images p.setImage(m_texture); int r = (rand() % (m_maxR - m_minR)) + m_minR; int g = (rand() % (m_maxG - m_minG)) + m_minG; int b = (rand() % (m_maxB - m_minB)) + m_minB; int a = (rand() % (m_alphaMax - m_alphaMin)) + m_alphaMin; p.setColor(r, g, b, a); m_particles.push_back(p); }
void Explode::EXPLODE(Entity::GameObject* _p){ double x; double y; exploding = true; _p->getPosition(x, y); double spread = getSpread(elements[0]) + getSpread(elements[1]) + getSpread(elements[2]) - 1; if (spread - static_cast<int>(spread) != 0.f) spread -= 0.5f; attachCallback(Event::Info::Colliding, new Event::FixedCallback([this, x, y, spread] (Event::Data& e) { Event::Type::Colliding* _ = reinterpret_cast<Event::Type::Colliding*>(&e); if (_->endX > x) { std::cout <<"+x"<< _->endX - x<< std::endl; for (double dist = (_->endX - x < spread) ? (_->endX - x) : (spread); dist > 0.99; --dist) dispatch(x + dist, y); return ; } if (_->endX < x) { std::cout << "-x"<< _->endX-x<< std::endl; for (double dist = (x-_->endX < spread) ? (x-_->endX) : (spread) ; dist > 0.99; --dist) dispatch(x-dist, y); return ; } if (_->endY > y) { std::cout <<"+y"<< _->endY - y<< std::endl; for (double dist = (_->endY - y < spread) ? (_->endY - y) : (spread); dist > 0.99; --dist) dispatch(x, y + dist); return ; } if (_->endY < y) { std::cout <<"-y"<< _->endY-y<< std::endl; for (double dist = (y-_->endY < spread) ? (y-_->endY) : (spread) ; dist > 0.99; --dist) { std::cout << "dist:" << dist << std::endl; dispatch(x, y - dist); } return ; } })); std::cout << spread << "position (" << x<< ")(" << y << ")" << std::endl; dispatchSelf(new Event::Type::RequireExplosion(x,y, spread, 0)); dispatchSelf(new Event::Type::RequireExplosion(x,y, -spread, 0)); dispatchSelf(new Event::Type::RequireExplosion(x,y, 0, -spread)); dispatchSelf(new Event::Type::RequireExplosion(x,y, 0, spread)); dispatch(x, y); }
void GStatsPDF::reportValue() const { Report::field("%s:v=%g:sdev=%g:s=%g:n=%lld", name, getDouble(), getStdDev(), getSpread(0.90),nData); }
std::vector<lo_message> DSPNode::getState() const { // inherit state from base class std::vector<lo_message> ret = GroupNode::getState(); lo_message msg; msg = lo_message_new(); lo_message_add(msg, "si", "setActive",(int) this->active); ret.push_back(msg); msg = lo_message_new(); lo_message_add(msg, "ss", "setPlugin", plugin.c_str()); ret.push_back(msg); /* if (connectTO.size()) { msg = lo_message_new(); lo_message_add_string(msg, "connectedTo"); for (int i=0; i<connectTO.size(); i++) lo_message_add_string(msg, (char*)connectTO[i]->sink->id->s_name); ret.push_back(msg); } */ for (int i=0; i<connectTO.size(); i++) { msg = lo_message_new(); lo_message_add(msg, "ss", "connect", (char*)connectTO[i]->sink->id->s_name); ret.push_back(msg); } msg = lo_message_new(); lo_message_add(msg, "ss", "setRolloff", _rolloff.c_str()); ret.push_back(msg); msg = lo_message_new(); lo_message_add(msg, "sf", "setSpread", getSpread()); ret.push_back(msg); msg = lo_message_new(); lo_message_add(msg, "sf", "setLength", getLength()); ret.push_back(msg); msg = lo_message_new(); lo_message_add(msg, "sf", "setRadius", getRadius()); ret.push_back(msg); msg = lo_message_new(); lo_message_add(msg, "sf", "setDirectivityFlag", directivityFlag); ret.push_back(msg); msg = lo_message_new(); lo_message_add(msg, "sffff", "setDirectivityColor", directivityColor.x(), directivityColor.y(), directivityColor.z(), directivityColor.w()); ret.push_back(msg); msg = lo_message_new(); lo_message_add(msg, "sf", "setLaserFlag", laserFlag); ret.push_back(msg); msg = lo_message_new(); lo_message_add(msg, "sf", "setVUmeterFlag", VUmeterFlag); ret.push_back(msg); // not doing this anymore (not supposed to be saved or refreshed) /* msg = lo_message_new(); lo_message_add(msg, "sf", "setIntensity", currentSoundIntensity); ret.push_back(msg); */ // have to re-send setContext AFTER setPlugin, so that loaded plugins will // have the up-to-date parameter msg = lo_message_new(); lo_message_add(msg, "ss", "setContext", getContext()); ret.push_back(msg); return ret; }