Example #1
0
void dynlightreaching(const vec &target, vec &color, vec &dir, bool hud)
{
    vec dyncolor(0, 0, 0);//, dyndir(0, 0, 0);
    loopv(dynlights)
    {
        dynlight &d = dynlights[i];
        if(d.curradius<=0) continue;

        vec ray(hud ? d.hud : d.o);
        ray.sub(target);
        float mag = ray.squaredlen();
        if(mag >= d.curradius*d.curradius) continue;

        vec color = d.curcolor;
        color.mul(1 - sqrtf(mag)/d.curradius);
        dyncolor.add(color);
        //dyndir.add(ray.mul(intensity/mag));
    }
#if 0
    if(!dyndir.iszero())
    {
        dyndir.normalize();
        float x = dyncolor.magnitude(), y = color.magnitude();
        if(x+y>0)
        {
            dir.mul(x);
            dyndir.mul(y); 
            dir.add(dyndir).div(x+y);
            if(dir.iszero()) dir = vec(0, 0, 1);
            else dir.normalize();
        }
    }
#endif
    color.add(dyncolor);
}
Example #2
0
void gethl(){
    ldb x,y;
    ifstream ifl ("lti");
    for(int i=0;i<30;++i){
        ifl>>x>>y;
        hl.add(cpx(x,y));
    }
    for(int n=0;n<Nc;++n){
        cpx ps(0,0);
        for(int k=0;k<30;++k){
            ps += hl[k] * ekn[modnc(-1*k*n)];
        }
        hlt.add(ps);
    }
}
Example #3
0
void modu(vec<cpx>& m,bool psi[][8]){
    int num;
    for(int i=0;i<Nc;++i){
        num = 0;
        for(int j=0;j<md;++j){
            num += psi[i][j]*pw[j];
        }
        m.add(symget(num));
    }
}
Example #4
0
void ltifc(vec<cpx>& y,vec<cpx> x){
    cpx zn,ps;
    for(int n=0;n<Nc+L-1;++n){
        zn = cpx(dist(rgen),dist(rgen));
        ps = cpx(0,0);
        for(int l=0;l<=n && l<30;++l){
            ps += hl[l]*x[n-l] + zn;
        }
        y.add(ps);
    }
}
Example #5
0
void dft(vec<cpx>& u,vec<cpx> ut,bool inverse){
    int j = ((inverse)?1:-1);
    for(int n=0;n<Nc;++n){
        cpx ps(0,0);
        for(int k=0;k<Nc;++k){
            ps += ut[k] * ekn[modnc(j*k*n)];
        }
        ps = ps / cpx(pow(Nc,0.5),0);
        u.add(ps);
    }
}
Example #6
0
 void swayhudgun(int curtime)
 {
     fpsent *d = hudplayer();
     if(d->state!=CS_SPECTATOR)
     {
         if(d->physstate>=PHYS_SLOPE) swaymillis += curtime;
         float k = pow(0.7f, curtime/10.0f);
         swaydir.mul(k);
         vec vel(d->vel);
         vel.add(d->falling);
         swaydir.add(vec(vel).mul((1-k)/(15*max(vel.magnitude(), d->maxspeed))));
     }
 }
bool effect::drawline(vec &from, vec &to, float size, int type, int elapse)
{
	if(size <= 0) return false;

	size *= this->size;
	int fade, gravity, num;
	setvars(this, type, fade, gravity, num);
	num *= from.dist(to) / (10 * size) * partmul * (elapse ? logf(elapse) / 3 : 1);
	if(particle == PART_STREAK || particle == PART_LIGHTNING)
		num /= 2;

	num = min<int>(min(num, linemaxsteps), from.dist(to) / linemininterval);
	if(!num) return false;
	vec delta = vec(to).sub(from).div(num);

	loopi(num)
	{
		switch(particle)
		{
			case PART_EXPLOSION:
			case PART_EXPLOSION_BLUE:
				particle_fireball(from, size * 2, particle, fade, colour, size * 2);
				break;
			case PART_STREAK:
			case PART_LIGHTNING:
			{
				if(!curtime) return false;
				vec start = vec(rnd(360) * RAD, rnd(360) * RAD).mul(4 * size).add(from);
				vec end = vec(delta).mul(1.5).add(start);

				particle_flare(start, end, fade, particle, colour, size);
				break;
			}
			default:
				particle_splash(particle, 2, fade, from, colour, size, max<int>(1, size * 5), gravity);
				break;
		}
		from.add(delta);
	}

	return true;
}
Example #8
0
void detc(vec<cpx>& u,vec<cpx> ut){
    for(int i=0;i<Nc;++i)
        u.add(ut[i]/hlt[i]);
}
Example #9
0
void cycrem(vec<cpx>&u,vec<cpx> y){
    for(int i=0;i<Nc;++i)
        u.add(y[L+i-1]);
}
Example #10
0
void cycins(vec<cpx>&x,vec<cpx> u){
    for(int i=1;i<L;++i)
        x.add(u[Nc-L+i]);
    for(int i=0;i<Nc;++i)
        x.add(u[i]);
}
Example #11
0
void getekn(){
    for(int i=0;i<Nc;++i)
        ekn.add(cpx(cos(2*pi*i/Nc),sin(2*pi*i/Nc)));
}