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(); }
/* 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); }
//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
// 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 }