示例#1
0
void testApp::update(){
	ken.update();
	ryu.update();

	Projectile::gravity = panel.getValueF("gravity");
	Projectile::friction = panel.getValueF("friction");
	Projectile::explosionTime = panel.getValueF("explosionTime");
	
	if(panel.getValueB("manualMode")) {
		if(panel.getValueB("fire0")) {
			panel.setValueB("fire0", false);
			fire(getId(0));
		}
		if(panel.getValueB("fire1")) {
			panel.setValueB("fire1", false);
			fire(getId(1));
		}
		if(panel.hasValueChanged(variadic("playerCount"))) {
			setPlayerCount(panel.getValueI("playerCount"));
			panel.clearAllChanged();
		}
		updatePosition(0, panel.getValueF("player0x"), panel.getValueF("player0y"));
		updatePosition(1, panel.getValueF("player1x"), panel.getValueF("player1y"));
	}
	
	while(receiver.hasWaitingMessages()) {
		ofxOscMessage msg;
		receiver.getNextMessage(&msg);
		if (msg.getAddress() == "/pew/playerPosition") {
			updatePosition(getId(msg.getArgAsInt32(0)), msg.getArgAsFloat(1), msg.getArgAsFloat(2));
		} else if(msg.getAddress() == "/pew/fire") {
			fire(getId(msg.getArgAsInt32(0)));
		} else if (msg.getAddress() == "/pew/players") {
			setPlayerCount(msg.getArgAsInt32(0));
		}
	}
	
	float explodeDistance = panel.getValueF("explodeDistance");
	float dt = ofGetLastFrameTime();
	for(int i = 0; i < projectiles.size(); i++) {
		projectiles[i].update(dt);
		for(int j = 0; j < players.size(); j++) {
			float distance = projectiles[i].position.distance(players[j].position);
			if(projectiles[i].source != j && distance < explodeDistance) {
				if(!projectiles[i].exploding) {
					projectiles[i].explode();
					players[j].ouch();
				}
			}
		}
	}
	
	ofRemove(projectiles, isOldProjectile);
}
void CameraColorSampler::setupControlTab() {
    
    panel.addPanel("Camera Color Sampler");
    panel.addDrawableRect("cam", &debugDraw, 220, 165);
    
    listen( panel.addSlider("gain", 0.5, 0.0, 1.0) );
    listen( panel.addSlider("shutter", 1.0, 0.0, 1.0) );
    listen( panel.addSlider("gamma", 0.5, 0.0, 1.0) );
    listen( panel.addSlider("brightness", 0.6, 0.0, 1.0) );
    listen( panel.addSlider("contrast", 1.0, 0.0, 1.0) );
    listen( panel.addSlider("hue", 0.0, 0.0, 1.0) );
    listen( panel.addMultiToggle("flicker", 0, variadic("mode 0")("mode 1")("mode 2")) );
    listen( panel.addMultiToggle("white_balance", 0, variadic("mode 0")("mode 1")("mode 2")) );
    
    panel.addSlider("roi_x", 0.4, 0.f, 1.f);
    panel.addSlider("roi_y", 0.4, 0.f, 1.f);
    panel.addSlider("roi_width", 0.2, 0.f, 0.5f);
    panel.addSlider("roi_height", 0.2, 0.f, 0.5f);
    
    initValues();
}
示例#3
0
/* tracecall - generate code to trace entry to f */
static void tracecall(Symbol printer, Symbol f, void *ignore) {
	int i;
	Symbol counter = genident(STATIC, inttype, GLOBAL);

	defglobal(counter, BSS);
	(*IR->space)(counter->type->size);
	frameno = genident(AUTO, inttype, level);
	addlocal(frameno);
	appendstr(f->name); appendstr("#");
	tracevalue(asgn(frameno, incr(INCR, idtree(counter), consttree(1, inttype))), 0);
	appendstr("(");
	for (i = 0; f->u.f.callee[i]; i++) {
		if (i)
			appendstr(",");
		appendstr(f->u.f.callee[i]->name); appendstr("=");
		tracevalue(idtree(f->u.f.callee[i]), 0);
	}
	if (variadic(f->type))
		appendstr(",...");
	appendstr(") called\n");
	tracefinis(printer);
}
void templates() {
  variadic(/*xxx=*/0, /*yyy=*/1);
  variadic2(/*zzU=*/0, /*xxx=*/1, /*yyy=*/2);
  // CHECK-MESSAGES: [[@LINE-1]]:13: warning: argument name 'zzU' in comment does not match parameter name 'zzz'
  // CHECK-FIXES: variadic2(/*zzz=*/0, /*xxx=*/1, /*yyy=*/2);
}
示例#5
0
//function(..) module saved jan 1 2013 as part of prep for scrt integration
static void function(Symbol f, Symbol caller[], Symbol callee[], int ncalls) {
    int i, saved, sizefsave, sizeisave, varargs;
    Symbol r, argregs[NUM_ARG_REGS];

    usedmask[0] = usedmask[1] = 0;
    freemask[0] = freemask[1] = ~(unsigned)0;
    offset = maxoffset = maxargoffset = 0;
    for (i = 0; callee[i]; i++) //find last argument
        ;
    varargs = variadic(f->type) //see if variable arguments by type or by name of final argument
              || i > 0 && strcmp(callee[i-1]->name, "va_alist") == 0;
    for (i = 0; callee[i]; i++) {  //for each argument
        Symbol p = callee[i];
        Symbol q = caller[i];
        assert(q);
        offset = roundup(offset, q->type->align); //calculate the offset from the caller's sp
        p->x.offset = q->x.offset = offset;
        p->x.name = q->x.name = stringd(offset);
        r = argreg(i, offset, optype(ttob(q->type)), q->type->size, optype(ttob(caller[0]->type)));
        if (i < NUM_ARG_REGS)
            argregs[i] = r;
        offset = roundup(offset + q->type->size, 2); //i dunno
        if (varargs)
            p->sclass = AUTO;  //variable args are always auto?
        else if (r && ncalls == 0 &&  //I dunno
                 !isstruct(q->type) && !p->addressed &&
                 !(isfloat(q->type) && r->x.regnode->set == IREG)) {
            p->sclass = q->sclass = REGISTER;
            askregvar(p, r);
            assert(p->x.regnode && p->x.regnode->vbl == p);
            q->x = p->x;
            q->type = p->type;
        }
        else if (askregvar(p, rmap(ttob(p->type)))
                 && r != NULL
                 && (isint(p->type) || p->type == q->type)) {
            assert(q->sclass != REGISTER);
            p->sclass = q->sclass = REGISTER;
            q->type = p->type;
        }
    }
    assert(!caller[i]);  //done with arguments, their individual offsets and maxargoffset have been set
    offset = 0;
    gencode(caller, callee);
    if (ncalls) //prepare to save return address if necessary(i.e. we do calls of our own)
        usedmask[IREG] |= ((unsigned)1)<<REG_RETADDR;
    usedmask[IREG] &= INT_CALLEE_SAVE;  //limit saving to those we're responsible for
    usedmask[FREG] &= 0xfff00000;
    maxargoffset = roundup(maxargoffset, usedmask[FREG] ? 8 : 2);
    if (ncalls && maxargoffset < NUM_ARG_REGS*2)
        maxargoffset = NUM_ARG_REGS*2;
    sizefsave = 4*bitcount(usedmask[FREG]); //space needed to save the float regs
    sizeisave = 2*bitcount(usedmask[IREG]);  //space needed to save the int regs
    framesize = roundup(maxargoffset + sizefsave //space for outgoing arguments, space for saving floats,
                        + sizeisave + maxoffset, 2);  //space for saving ints, space for locals
    //segment(CODE);
    //printf("\talign 16\n");
    printf("%s:\n", f->x.name);
    i = maxargoffset + sizefsave - framesize;  //I dunno but it's -v and it's never used!
    if (framesize > 0)
        print("\talu2I sp,sp,%d,smi,smbi\n", framesize);
    saved = maxargoffset;
    /space needed for outgoing arguments
示例#6
0
// This code is quite exotic, so let's not test the CFG for it,
// but only make sure we don't crash.
void testCrashOnVariadicArgument() {
  C c(variadic(0 ? c : 0)); // no-crash
}