void testApp::mouseDragged(int x, int y, int button){ trails.push_back( Trail( ofPoint(x, y), ofPoint(-1, -1).getNormalized() ) ); if(trails.size()>400){ trails.erase(trails.begin()); } }
int main(int argc, char* argv[]) { Screen& screen = Screen::Instance(); const Renderer& renderer = Renderer::Instance(); screen.Open(screen.GetDesktopWidth(), screen.GetDesktopHeight(), true); //screen.Open(800, 600, false); renderer.SetBlendMode(Renderer::ALPHA); // Cargamos la imagen Image* image = ResourceManager::Instance().LoadImage("data/images/ball.png"); image->SetMidHandle(); float angle = 0; double accum = 0; Array<Trail> trails; while ( screen.IsOpened() && !screen.KeyPressed(GLFW_KEY_ESC) ) { // Actualizamos angulo de la imagen angle += 30 * screen.ElapsedTime(); // Actualizamos los rastros accum += screen.ElapsedTime(); if ( accum >= 0.05 ) { trails.Add(Trail(screen.GetMouseX(), screen.GetMouseY(), angle)); if ( trails.Size() > NUMTRAILS ) { trails.RemoveAt(0); accum = 0; } } // Limpiamos fondo de pantalla renderer.Clear(0, 0, 0); // Dibujamos rastro for ( int i = 0; i < trails.Size(); i++ ) { renderer.SetColor(255, 255, 255, 256/(trails.Size()-i+1)); renderer.DrawImage(image, trails[i].x, trails[i].y, 0, 0, 0, trails[i].angle); } // Dibujamos imagen renderer.SetColor(255, 255, 255, 255); renderer.DrawImage(image, screen.GetMouseX(), screen.GetMouseY(), 0, 0, 0, angle); // Refrescamos la pantalla screen.Refresh(); } ResourceManager::Instance().FreeResources(); return 0; }
static void make_new_attvar(Word p ARG_LD) { Word gp; assert(gTop+3 <= gMax && tTop+1 <= tMax); gp = link_attvar(PASS_LD1); gp[1] = ATOM_nil; gp[0] = consPtr(&gp[1], TAG_ATTVAR|STG_GLOBAL); gTop += 2; trail_new_attvar(gp PASS_LD); Trail(p, makeRefG(gp)); }
static int assign_in_dict(Word dp, Word val ARG_LD) { deRef(val); if ( !canBind(*val) ) { *dp = *val; } else if ( isAttVar(*val) ) { *dp = makeRef(val); } else { if ( dp < val ) { if ( unlikely(tTop+1 >= tMax) ) return TRAIL_OVERFLOW; setVar(*dp); Trail(val, makeRef(dp)); } else { *dp = makeRef(val); } } return TRUE; }
static void put_new_attvar(Word p, atom_t name, Word value ARG_LD) { Word gp, at; assert(gTop+7 <= gMax && tTop+1 <= tMax); gp = link_attvar(PASS_LD1); gTop += 6; at = &gp[1]; setVar(*at); gp[0] = consPtr(&gp[1], TAG_ATTVAR|STG_GLOBAL); at[1] = FUNCTOR_att3; at[2] = name; at[3] = linkVal(value); at[4] = ATOM_nil; at[0] = consPtr(&at[1], TAG_COMPOUND|STG_GLOBAL); trail_new_attvar(gp PASS_LD); Trail(p, makeRefG(gp)); }