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);
    }
Ejemplo n.º 2
0
  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);
  }
Ejemplo n.º 3
0
void GStatsPDF::reportValue() const
{
  Report::field("%s:v=%g:sdev=%g:s=%g:n=%lld", name, getDouble(), getStdDev(),
		getSpread(0.90),nData);
}
Ejemplo n.º 4
0
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;
}