//the following 2 functions are no longer being used to and real extent, but were left in to avoid errors in the functions that use them osg::Vec3f Render::calculateForceDirections(float force, osg::Vec2f direction){ Vector2 vector = Vector2::Vector2(direction.x(), direction.y()); float viewHeight = viewer.getCamera()->getViewport()->height(); float viewWidth = viewer.getCamera()->getViewport()->width(); float relationship = (viewHeight<viewWidth)?15/(viewHeight/4):15/(viewWidth/4); float theta = osg::DegreesToRadians(vector.Length()*relationship); float phi = atan2(direction.y(), direction.x()); Logger::getInstance()->log("Theta: " + f2s(theta) + " Phi: " + f2s(phi)); return osg::Vec3f(-(force*sin(theta)*cos(phi)), -(force*sin(theta)*sin(phi)),(force*cos(theta))); }
void peerDigestStatsReport(const PeerDigest * pd, StoreEntry * e) { #define f2s(flag) (pd->flags.flag ? "yes" : "no") #define appendTime(tm) storeAppendPrintf(e, "%s\t %10d\t %+d\t %+d\n", \ ""#tm, pd->times.tm, \ saneDiff(pd->times.tm - squid_curtime), \ saneDiff(pd->times.tm - pd->times.initialized)) const char *host = pd ? strBuf(pd->host) : NULL; assert(pd); storeAppendPrintf(e, "\npeer digest from %s\n", host); cacheDigestGuessStatsReport(&pd->stats.guess, e, host); storeAppendPrintf(e, "\nevent\t timestamp\t secs from now\t secs from init\n"); appendTime(initialized); appendTime(needed); appendTime(requested); appendTime(received); appendTime(next_check); storeAppendPrintf(e, "peer digest state:\n"); storeAppendPrintf(e, "\tneeded: %3s, usable: %3s, requested: %3s\n", f2s(needed), f2s(usable), f2s(requested)); storeAppendPrintf(e, "\n\tlast retry delay: %d secs\n", pd->times.retry_delay); storeAppendPrintf(e, "\tlast request response time: %d secs\n", pd->times.req_delay); storeAppendPrintf(e, "\tlast request result: %s\n", pd->req_result ? pd->req_result : "(none)"); storeAppendPrintf(e, "\npeer digest traffic:\n"); storeAppendPrintf(e, "\trequests sent: %d, volume: %d KB\n", pd->stats.sent.msgs, (int) pd->stats.sent.kbytes.kb); storeAppendPrintf(e, "\treplies recv: %d, volume: %d KB\n", pd->stats.recv.msgs, (int) pd->stats.recv.kbytes.kb); storeAppendPrintf(e, "\npeer digest structure:\n"); if (pd->cd) cacheDigestReport(pd->cd, host, e); else storeAppendPrintf(e, "\tno in-memory copy\n"); }
void showPressureSensor() { float pressure = 0; float temperature = 0; pressureSensor -> getPressure(&pressure); pressureSensor -> getTemperature(&temperature); char buff[128]; sprintf(buff, "Environment\r\nPressure: \r\n %shPa\r\nTemp: %sC \r\n",f2s(pressure, 2), f2s(temperature, 1)); Screen.print(buff); }
/** Prints a matrix. * Looks like: * [ a, b, c ] * [ d, e, f ] * [ g, h, i ] */ int MatrixPrint(matrix mx) { for(int row = 0; row < mx.rows; row++) { printf("[ "); for(int col = 0; col < mx.columns; col++) { printf("%s ", f2s(mx.mx[row][col])); } printf("]\n"); } return 0; }
/* ---------------------------------------------------------------------------- * Loads data about the leader type from a data file. */ void leader_type::load_from_file( data_node* file, const bool load_resources, vector<pair<size_t, string> >* anim_conversions ) { pluck_delay = s2f(file->get_child_by_name("pluck_delay")->value); whistle_range = s2f( file->get_child_by_name("whistle_range")->get_value_or_default( f2s(DEF_WHISTLE_RANGE) ) ); punch_strength = s2i(file->get_child_by_name("punch_strength")->value); //TODO default. throw_height_mult = s2f( file->get_child_by_name("throw_height_mult")->get_value_or_default( "1" ) ); if(load_resources) { //TODO don't use load_sample for these. sfx_dismiss = load_sample(file->get_child_by_name("dismiss_sfx")->value, mixer); sfx_name_call = load_sample(file->get_child_by_name("name_call_sfx")->value, mixer); sfx_whistle = load_sample(file->get_child_by_name("whistle_sfx")->value, mixer); bmp_icon = bitmaps.get(file->get_child_by_name("icon")->value, file); } #define new_conversion(id, name) \ anim_conversions->push_back(make_pair((id), (name))) new_conversion(LEADER_ANIM_IDLING, "idling"); new_conversion(LEADER_ANIM_WALKING, "walking"); new_conversion(LEADER_ANIM_PLUCKING, "plucking"); new_conversion(LEADER_ANIM_GETTING_UP, "getting_up"); new_conversion(LEADER_ANIM_DISMISSING, "dismissing"); new_conversion(LEADER_ANIM_THROWING, "throwing"); new_conversion(LEADER_ANIM_WHISTLING, "whistling"); new_conversion(LEADER_ANIM_LYING, "lying"); new_conversion(LEADER_ANIM_PAIN, "pain"); new_conversion(LEADER_ANIM_KNOCKED_DOWN, "knocked_down"); new_conversion(LEADER_ANIM_SPRAYING, "spraying"); #undef new_conversion }
void showHumidTempSensor() { ht_sensor->reset(); float temperature = 0; ht_sensor->getTemperature(&temperature); //convert from C to F temperature = temperature*1.8 + 32; float humidity = 0; ht_sensor->getHumidity(&humidity); char buff[128]; sprintf(buff, "Environment \r\n Temp:%sF \r\n Humidity:%s%% \r\n \r\n",f2s(temperature, 1), f2s(humidity, 1)); Screen.print(buff); }
void draw() { dt = gui_t.dtime(); gui_f_time += dt; gui_g_time += dt; float f_wait; bool run_always = false; f_wait = 1.0f/100.0f; if (run_always || gui_f_time > f_wait) { if (first) { start_engine(); cl_server.set_command_lists(&internal_cmd_in,&internal_cmd_out); cl_server.start(); first = false; } ++frame_count; gui_fullscreen_fpstimer += gui_f_time; current_fps = f2s(round(1.0f/gui_f_time),2); if (gui_fullscreen_fpstimer > 1) { vsx_string h = fpsstring + " @ "+ current_fps+ "fps"; gui_fullscreen_fpstimer = 0; } gui_f_time = 0; glDepthMask(GL_TRUE); glClearColor(0.0f,0.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); if (vxe) { vxe->process_message_queue(&internal_cmd_in,&internal_cmd_out); vxe->render(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Reset The Modelview Matrix glEnable(GL_BLEND); ++frame_counter; ++delta_frame_counter; } } pgv.iterations = -1; pgv.process_garbage(); }
void vsx_statelist::dec_amp() { (*state_iter).fx_level-=0.05f; if ((*state_iter).fx_level < 0.1f) (*state_iter).fx_level = 0.1f; vxe->set_amp((*state_iter).fx_level); #if defined(__linux__) vsx_string fxlf = config_dir+"/"+(*state_iter).state_name_suffix.substr(visual_path.size()+1 , (*state_iter).state_name_suffix.size())+"_fx_level"; FILE* fxfp = fopen( fxlf.c_str(), "w"); if (fxfp) { fputs(f2s((*state_iter).fx_level).c_str(), fxfp); fclose(fxfp); } #endif fx_alpha = 5.0f; }
void vsxu_assistant::toggle_size() { if (size_multiplier == 1.3f) { size_multiplier = 1.0f; } else if (size_multiplier == 1.0f) { size_multiplier = 0.8f; } else if (size_multiplier == 0.8f) { size_multiplier = 0.2f; } else if (size_multiplier == 0.2f) { size_multiplier = 1.3f; } printf("assistant size is now: %f\n",size_multiplier); configuration["assistant_size"] = f2s(size_multiplier); ((vsx_widget_desktop*)root)->save_configuration(); }
void vsx_statelist::inc_amp() { (*state_iter).fx_level+=0.05f; if ((*state_iter).fx_level > 16.0f) (*state_iter).fx_level = 16.0f; #if defined(__linux__) vsx_string fxlf = config_dir+"/"+(*state_iter).state_name_suffix.substr(visual_path.size()+1 , (*state_iter).state_name_suffix.size())+"_fx_level"; #ifdef VSXU_DEBUG printf("fx level file: %s\n", fxlf.c_str() ); #endif FILE* fxfp = fopen( fxlf.c_str(), "w"); if (fxfp) { fputs(f2s((*state_iter).fx_level).c_str(), fxfp); fclose(fxfp); } #endif vxe->set_amp((*state_iter).fx_level); fx_alpha = 5.0f; }
void vsx_widget_timeline::move_time(vsx_vector world) { if (owner->engine_status == VSX_ENGINE_STOPPED) { float f = (world.x+size.x/2)/(size.x); if (f < 0) f = 0; else if (f > 1) f = 1; float c_time = owner->tstart+f*(owner->tend - owner->tstart); if (c_time < 0) c_time = 0; float a = (c_time-owner->tstart)/(owner->tend-owner->tstart); //printf("a: %f\n",a); if (a > 0.95) { //dd_time = (0.001)*(owner->tend-owner->tstart); //owner->tend += dd_time; //owner->tstart += dd_time; //c_time = owner->tstart+(owner->tend-owner->tstart)*0.851; //owner->curtime + dd_time*2; auto_move_dir = 1; owner->update_time_from_engine = false; a_dist = a-0.95; } else if (a < 0.05) { //dd_time = (0.001)*(owner->tend-owner->tstart); //owner->tend -= dd_time; //owner->tstart -= dd_time; //c_time = owner->tstart+(owner->tend-owner->tstart)*0.149; auto_move_dir = -1; a_dist = 0.05-a; owner->update_time_from_engine = false; } else { auto_move_dir = 0; owner->curtime = c_time; command_q_b.add_raw("time_set "+f2s(owner->curtime)); parent->vsx_command_queue_b(this); owner->update_time_from_engine = false; } //owner->check_timeline(); } else { auto_move_dir = 0; owner->update_time_from_engine = true; } }
void vsx_window_object_inspector::vsx_command_process_b(vsx_command_s *t) { if (k_focus == component_rename_edit || t->cmd == "component_rename_button") { if (inspected->widget_type == VSX_WIDGET_TYPE_COMPONENT) { vsx_widget_component* cc = (vsx_widget_component*)inspected; vsx_string curname = ""; vsx_string newname = ""; // if (cc->parent_name != "") { // curname += cc->parent_name+"."; // newname += cc->parent_name+"."; // } newname += ((vsx_widget_base_edit*)component_rename_edit)->get_string(); command_q_b.add_raw("component_rename " +cc->name+" "+newname); cc->server->vsx_command_queue_b(this); } else if (inspected->widget_type == VSX_WIDGET_TYPE_ANCHOR) { //printf("sending\n"); command_q_b.add_raw( "pa_ren "+ // command ((vsx_widget_anchor*)inspected)->component->name+" "+ // component ((vsx_widget_anchor*)inspected)->name+" "+ ((vsx_widget_base_edit*)component_rename_edit)->get_string()+" "+ i2s(((vsx_widget_anchor*)inspected)->io) ); ((vsx_widget_component*)((vsx_widget_anchor*)inspected)->component)->server->vsx_command_queue_b(this); } } if (t->cmd == "component_timing_ok") { label2->title = vsx_string("run time: ")+t->parts[2] + " seconds\noutput time:" + t->parts[3] + " seconds\n"; label2->title = label2->title + "% of total frame time: "+f2s( (s2f(t->parts[2])+s2f(t->parts[3]))*100.0f / s2f(t->parts[4]),3); } //if (t->cmd == "cancel") { visible = 0; return; } //if (((vsx_widget_2d_edit*)edit1)->value.str().size()) //{ //command_q_b.add(name,((vsx_widget_2d_edit*)edit1)->value.str()); //parent->vsx_command_queue_b(this); //((vsx_widget_2d_edit*)edit1)->value.str(""); //((vsx_widget_2d_edit*)edit1)->value.clear(); //} //visible = 0; }
double f3s(double x1, double x2, double y1, double y2, double b1, double b2, double z ) { double p; if (x2 < x1 || y2 < y1 || b2 < b1) { /* cat("Bad input parameters, upper limits less than lower limits\n"); p = NA; */ /* cng - make a big number to be subtracted and yield ndv */ /* p = 1000.0 */ p = 1000.0; } else if (x1 < 0 || y1 < 0 || b1 < 0) { /* cat("Bad input parameters, Variables cannot be negative\n"); p = NA; */ p = 1000.; } else { if(y1 == y2 || b1 == b2) { /* degenerate on y or b - reverts to additive convolution */ p = f2s(x1,x2,y1*b1,y2*b2,z); } else { if(x2 == x1) { p = fa(y1, y2, b1, b2, z - x1); } else { p = (fai(y1, y2, b1, b2, z - x1) - fai(y1, y2, b1, b2, z - x2)) / (x2 - x1); } } } return p; }
bool app_draw(int id) { if (id == 0) { my_draw.draw(); } else { if (dual_monitor) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer vxe->process_message_queue(&internal_cmd_in,&internal_cmd_out); vxe->render(); glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Reset The Modelview Matrix glEnable(GL_BLEND); ++frame_counter; ++delta_frame_counter; float dt = time2.dtime(); delta_frame_time+= dt; total_time += dt; if (delta_frame_counter == 100) { delta_fps = 100.0f/delta_frame_time; delta_frame_counter = 0; delta_frame_time = 0.0f; } glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0,0,0,0.4f); glBegin(GL_QUADS); // Draw A Quad glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right glVertex3f( 1.0f,0.92f, 0.0f); // Bottom Right glVertex3f(-1.0f,0.92f, 0.0f); // Bottom Left glEnd(); // Done Drawing The Quad myf.print(vsx_vector(-1.0f,0.92f)," Fc "+i2s(frame_counter)+" Fps "+f2s(delta_fps)+" T "+f2s(total_time)+" Tfps "+f2s(frame_counter/total_time)+" MC "+i2s(vxe->get_num_modules())+" VSX Ultra (c) Vovoid",0.07); } } return true; }
double Qmatrix::operator()(int64_t a) const { return max_elem_in_row_[f2s(f2s_maps_[0], a)]; }
double Qmatrix::operator()(int64_t a, int64_t b) const { return Q_(f2s(f2s_maps_[0], a), f2s(f2s_maps_[1], b)); }
void Render::updateGamePlay() { //Cow collision detection: if (Render::detectCollision(osg::BoundingSphere(cowTransform->getBound()), osg::BoundingSphere(tor1Tr->getBound())) && missileCollison==false) { missileCollison = true; ball1->setColor(osg::Vec4(0.0f,1.0f,0.0f,0.0f)); Logger::getInstance()->log("Cow collision with ball #1"); std::cout<<"Cow impacts ball #1\n"; } if (Render::detectCollision(osg::BoundingSphere(cowTransform->getBound()), osg::BoundingSphere(tor2Tr->getBound())) && missileCollison==false) { missileCollison = true; ball2->setColor(osg::Vec4(0.0f,1.0f,0.0f,0.0f)); Logger::getInstance()->log("Cow collision with ball #2"); std::cout<<"Cow impacts ball #2\n"; } if (Render::detectCollision(osg::BoundingSphere(cowTransform->getBound()), osg::BoundingSphere(tor3Tr->getBound())) && missileCollison==false) { missileCollison = true; ball3->setColor(osg::Vec4(0.0f,1.0f,0.0f,0.0f)); Logger::getInstance()->log("Cow collision with ball #3"); std::cout<<"Cow impacts ball #3\n"; } if((cowPosition.z() < 0) && missileCollison==false) { //these ones should be radius of ball missileCollison = true; std::cout<<"Cow impacts ground\n"; Logger::getInstance()->log("Cow impacts ground\n"); } if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor1Tr->getBound()))) { ball1->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f)); Logger::getInstance()->log("Collision with ball #1"); } if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor2Tr->getBound()))) { ball2->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f)); Logger::getInstance()->log("Collision with ball #2"); } if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor3Tr->getBound()))) { ball3->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f)); Logger::getInstance()->log("Collision with ball #3"); } float frictionScalar; if(friction==true) frictionScalar = Constants::getInstance()->frictionConstant;//*sqrt(pow(modelVelocity.x(),2)+pow(modelVelocity.y(),2)+pow(modelVelocity.z(),2)); else frictionScalar = 0; float mass = Constants::getInstance()->helicopter->mass; float axForce = (sin(osg::DegreesToRadians(helicopterOrientation.y_theta))*rotorForce)//magnitude of rotor initially this direction *cos(osg::DegreesToRadians(helicopterOrientation.z_theta))//transform for when heli turns +(sin(osg::DegreesToRadians(helicopterOrientation.x_theta))*rotorForce)//magnitude of rotor initially in other direction *sin(osg::DegreesToRadians(helicopterOrientation.z_theta))//transform for when heli turns - frictionScalar*modelVelocity.x();//friction portion float ayForce = -(((sin(osg::DegreesToRadians(helicopterOrientation.x_theta))*rotorForce)//same as for axForce *cos(osg::DegreesToRadians(helicopterOrientation.z_theta)) +(sin(osg::DegreesToRadians(helicopterOrientation.y_theta))*rotorForce) *sin(osg::DegreesToRadians(helicopterOrientation.z_theta))) - frictionScalar*modelVelocity.y()); float azForce = cos(osg::DegreesToRadians(helicopterOrientation.x_theta))*cos(osg::DegreesToRadians(helicopterOrientation.y_theta))*rotorForce + aGrav*mass - frictionScalar*modelVelocity.z(); float xAcc = axForce/mass; float yAcc = ayForce/mass; float zAcc = azForce/mass; float delta = 0.0235; //viewer.getFrameStamp()->getReferenceTime() - last; last = viewer.getFrameStamp()->getReferenceTime(); float xPos = modelPosition.x() + (modelVelocity.x()*delta) + (0.5)*xAcc*(pow(delta,2)); float xVel = (modelVelocity.x() + xAcc*delta)*0.99999999999; float yPos = modelPosition.y() + (modelVelocity.y()*delta) + (0.5)*yAcc*(pow(delta,2)); float yVel = (modelVelocity.y() + yAcc*delta)*0.99999999999; float zPos = modelPosition.z() + (modelVelocity.z()*delta) + (0.5)*zAcc*(pow(delta,2)); float zVel = (modelVelocity.z() + zAcc*delta)*0.99999999999; if(zPos < 1){ //these ones should be radius of ball if(zVel < -3)//THIS VALUE IS SUBJECT TO CHANGE { crash=true; Logger::getInstance()->log("Collison with ground"); } else { Logger::getInstance()->log("Successful landing"); } zPos = 1; zVel *= 0; } hud.crashed(crash); Logger* logger = Logger::getInstance(); string something = f2s(xPos); logger->log("X Pos: " + f2s(xPos) + " Y Pos: " + f2s(yPos) + " Z Pos: " + f2s(zPos)); logger->log("X Vel: " + f2s(xVel) + " Y Vel: " + f2s(yVel) +" Z Vel: " + f2s(zVel)); logger->log("X Acc: " + f2s(xAcc) + " Y Acc: " + f2s(yAcc) +" Z Acc: " + f2s(zAcc)); logger->log("Throttle Position: " + f2s(rotorForce/Constants::getInstance()->baseThrottle)); modelPosition.set(osg::Vec3d(xPos, yPos, zPos)); modelVelocity.set(osg::Vec3f(xVel, yVel, zVel)); helicopterTransform->setPosition(modelPosition); //m3: missile if(fire == true) { if(fireTimer==Constants::getInstance()->fireRate) { cowVelocity.set(osg::Vec3f((sin(osg::DegreesToRadians(helicopterOrientation.z_theta)))*Constants::getInstance()->missile->Airspeed + (modelVelocity.x()*delta), -((cos(osg::DegreesToRadians(helicopterOrientation.z_theta)))*Constants::getInstance()->missile->Airspeed + (modelVelocity.y()*delta)), (sin(-(osg::DegreesToRadians(helicopterOrientation.x_theta+5))))*Constants::getInstance()->missile->Airspeed + (-modelVelocity.z()*delta))); cowPosition.set(osg::Vec3d(cowPosition.x() + cowVelocity.x()*delta,cowPosition.y() + cowVelocity.y()*delta,cowPosition.z() + cowVelocity.z()*delta)); cowTransform->setPosition(cowPosition); } if(fireTimer<=Constants::getInstance()->fireRate && fireTimer>0) { cowPosition.set(osg::Vec3d(cowPosition.x() + cowVelocity.x()*delta,cowPosition.y() + cowVelocity.y()*delta,cowPosition.z() + cowVelocity.z()*delta)); cowTransform->setPosition(cowPosition); } fireTimer--; if(fireTimer<=0) { missileCollison = false; fireTimer=Constants::getInstance()->fireRate; fire=false; } } else { cowTransform->setPosition(modelPosition); cowPosition = modelPosition; } // orientation helicopterTransform->setAttitude( osg::Quat( osg::DegreesToRadians(90 + helicopterOrientation.x_theta),osg::Vec3f(1,0,0), osg::DegreesToRadians(helicopterOrientation.y_theta),osg::Vec3f(0,1,0), osg::DegreesToRadians(helicopterOrientation.z_theta),osg::Vec3f(0,0,1) ) ); // hud hud.updateText(xPos, yPos, zPos, xVel, yVel, zVel, xAcc, yAcc, zAcc, helicopterOrientation.x_theta , helicopterOrientation.y_theta, helicopterOrientation.z_theta, axForce, ayForce, azForce, cowVelocity.x(), cowVelocity.y(), cowVelocity.z(),helicopterOrientation.x_theta+5); if(ScriptRunner::getInstance()->getStatus()){ ScriptRunner::getInstance()->doCommand(); } }
/* function to compute stability index with potentially uncertain parameters for a specific grid cell */ double sindexcell(double s, double a, double c1, double c2, double t1, double t2, double x1, double x2, double r, double *sat) { /* c1, c2 bounds on dimensionless cohesion t1,t2 bounds on friction angle x1,x2 bounds on wetness parameter q/T r Density ratio s slope angle a specific catchment area */ double cs, ss, w1, w2, fs2, fs1, cdf1, cdf2, y1, y2, as, si; /* cng - added this to prevent division by zero */ if (s == 0.0) { *sat = 3.0; return 10; } /* DGT - The slope in the GIS grid file is the tangent of the angle */ s = atan(s); /* t1 and t2 input as angle must be converted to tan */ t1 = tan(t1); t2 = tan(t2); cs = cos(s); ss = sin(s); if(x1 > x2) { /* Error these are wrong way round - switch them */ w1 = x2; /* Using w1 as a temp variable */ x2 = x1; x1 = w1; } /* Wetness is coded between 0 and 1.0 based on the lower T/q parameter (this is conservative). If wetness based on lower T/q is > 1.0 and wetness based on upper T/q <1.0, then call it the "threshold saturation zone" and hard code it to 2.0. Then if wetness based on upper T/q >1.0, then call it the "saturation zone" and hard code it to 3.0. Lower T/q correspounds to upper q/T = x = x2 -> w2 */ w2 = x2*a/ss; w1 = x1*a/ss; *sat = w2; if(w2 > 1.0) { w2 = 1.0; *sat = 2.0; } if(w1 > 1.0) { w1 = 1.0; *sat = 3.0; } fs2 = fs(s,w1,c2,t2,r); if (fs2 < 1) /* always unstable */ { si = 0; } else { fs1 = fs(s,w2,c1,t1,r); if(fs1 >= 1) /* Always stable */ { si = fs1; } else { if(w1 == 1) /* region 1 */ { si = 1-f2s(c1/ss,c2/ss,cs*(1-r)/ss*t1,cs*(1-r)/ss*t2,1); } else { if(w2 == 1) /* region 2 */ { as = a/ss; y1 = cs/ss*(1-r); y2 = cs/ss*(1-x1*as*r); cdf1 = (x2*as-1)/(x2*as-x1*as)*f2s(c1/ss,c2/ss,cs*(1-r)/ss*t1,cs*(1-r)/ss*t2,1); cdf2 = (1-x1*as)/(x2*as-x1*as)*f3s(c1/ss,c2/ss,y1,y2,t1,t2,1); si = 1-cdf1-cdf2; } else /* region 3 */ { as = a/ss; y1 = cs/ss*(1-x2*as*r); y2 = cs/ss*(1-x1*as*r); si = 1-f3s(c1/ss,c2/ss,y1,y2,t1,t2,1); } } } } /* cng - need to limit the size spread for arcview since it has difficulties with equal intervals over a large range of numbers */ if (si > 10.0) si = 10.0; return si; }
void vsx_widget_timeline::i_draw() { parentpos = parent->get_pos_p(); float time_diff = owner->tend - owner->tstart; totalsize = (owner->tend - owner->tstart); float y_mid = parentpos.y+pos.y; float y_size = size.y; if (a_focus == this) y_size *= 3.0f; float y_size_half = y_size * 0.5f; if (auto_move_dir) { //float c_time = owner->curtime; float curtime = owner->curtime + auto_move_dir*dtime*time_diff*10.0f*a_dist;//totalsize*0.01; float tstart = owner->tstart + auto_move_dir*dtime*time_diff*10.0f*a_dist;//totalsize*0.01; float tend = owner->tend + auto_move_dir*dtime*time_diff*10.0f*a_dist;//totalsize*0.01; if (curtime >= 0) { owner->curtime = curtime; owner->tstart = tstart; owner->tend = tend; } command_q_b.add_raw("time_set "+f2s(owner->curtime)); parent->vsx_command_queue_b(this); } glBegin(GL_QUADS); if (owner->tstart < 0) { glColor4f(0.4,0.3,0.3f,0.5f); ff = size.x*(fabs(owner->tstart)/totalsize); glVertex2f(parentpos.x+pos.x-size.x*0.5f, y_mid+y_size_half); glVertex2f(parentpos.x+pos.x-size.x*0.5f+ff, y_mid+y_size_half); glVertex2f(parentpos.x+pos.x-size.x*0.5f+ff, y_mid-y_size_half); glVertex2f(parentpos.x+pos.x-size.x*0.5f, y_mid-y_size_half); if (owner->tend > 0) { glColor4f(0.3,0.4,0.3,0.5f); glVertex2f(parentpos.x+pos.x-size.x*0.5f+ff, y_mid+y_size_half); glVertex2f(parentpos.x+pos.x+size.x*0.5f, y_mid+y_size_half); glVertex2f(parentpos.x+pos.x+size.x*0.5f, y_mid-y_size_half); glVertex2f(parentpos.x+pos.x-size.x*0.5f+ff, y_mid-y_size_half); } } else { glColor4f(0.3,0.4,0.3,0.5f); glVertex2f(parentpos.x+pos.x-size.x*0.5f, y_mid+y_size_half); glVertex2f(parentpos.x+pos.x+size.x*0.5f, y_mid+y_size_half); glVertex2f(parentpos.x+pos.x+size.x*0.5f, y_mid-y_size_half); glVertex2f(parentpos.x+pos.x-size.x*0.5f, y_mid-y_size_half); } glEnd(); if (a_focus == this) { glColor3f(1.0f,1.0f,1.0f); } else glColor3f(0.5f,0.5f,0.5f); draw_box_border(vsx_vector(parentpos.x+pos.x-size.x*0.5,y_mid-y_size_half), vsx_vector(size.x,y_size), dragborder*0.5); levelstart = ((float)z_round(owner->tstart) - owner->tstart)/totalsize; //printf("levelstart: %f\n",levelstart); levelstart = 0; myf.color.a = 0.8f; float one_div_totalsize_times_sizex = 1.0f / totalsize * size.x; for (int i = (int)owner->tstart; i < (int)(owner->tend)+1; ++i) { glColor3f(0.5,0.5,0.5); float x = (float)(i-owner->tstart) * one_div_totalsize_times_sizex; if (x > 0) { x += parentpos.x+pos.x - size.x*0.5f+levelstart*size.x; glBegin(GL_LINES); glVertex2f(x,y_mid+y_size*0.416666667f); glVertex2f(x,y_mid-y_size*0.416666667f); glEnd(); myf.print_center(vsx_vector(x,y_mid), i2s(i),0.005); } } glColor3f(1,1,1); float f = ((owner->curtime-owner->tstart)/(owner->tend-owner->tstart))*size.x; glBegin(GL_LINES); glVertex2f(parentpos.x+pos.x-size.x*0.5f+f,y_mid+y_size*0.416666667); glVertex2f(parentpos.x+pos.x-size.x*0.5f+f,y_mid-y_size*0.416666667); glEnd(); // ************************************************************ // sound waveform display // ************************************************************ if (show_wave_data) { vsx_widget_server* server = (vsx_widget_server*)owner->get_server(); vsx_engine* engine = (vsx_engine*)(server->engine); if (engine->engine_info.param_float_arrays.size() >= 4 && a_focus == this) { vsx_engine_float_array *full_pcm_data_l; vsx_engine_float_array *full_pcm_data_r; full_pcm_data_l = engine->engine_info.param_float_arrays[2]; full_pcm_data_r = engine->engine_info.param_float_arrays[3]; if (full_pcm_data_l->array.size() > 0) { // assuming we have 44100 samples per second float x_start = parentpos.x+pos.x-size.x*0.5f; float x_end = parentpos.x+pos.x+size.x*0.5f; float t_start = owner->tstart; float t_end = owner->tend; size_t data_end = (size_t) (t_end * 44100.0f); if (owner->tstart < 0) { x_start += fabs(t_start / (t_end - t_start)) * size.x; //data_end -= fabs(t_start) * 44100.0f; t_start = 0.0f; } size_t data_start = (size_t) (t_start * 44100.0f); size_t data_count = data_end - data_start; float x_dist = x_end - x_start; double x_diff = (double)x_dist / (double)data_count; // printf("data_start: %d\n", data_start); //printf("data_end: %d\n", data_end); //printf("data_count: %d\n", data_count); glColor4f(1.0f,0.2f,0.2f,0.15f); double x_pos = x_start; glBegin(GL_LINE_STRIP); for ( size_t i = data_start; i < data_end; i++ ) { glVertex2f(x_pos, y_mid + (*full_pcm_data_l).array[i] * y_size_half ); x_pos += x_diff; } glEnd(); glColor4f(0.2f,1.0f,0.2f,0.1f); x_pos = x_start; glBegin(GL_LINE_STRIP); for ( size_t i = data_start; i < data_end; i++ ) { glVertex2f(x_pos, y_mid + (*full_pcm_data_r).array[i] * y_size_half ); x_pos += x_diff; } glEnd(); } // pcm data pool size } } vsx_widget::i_draw(); }
void draw() { if (record_movie) { vxe->set_constant_frame_progression(1.0f / 60.0f); vxe->play(); } if (desktop) { desktop->vsx_command_process_f(); } if (first) { intro = new vsx_logo_intro; } dt = gui_t.dtime(); gui_f_time += dt; gui_g_time += dt; float f_wait; bool run_always = false; if (desktop) { if (desktop->global_framerate_limit == -1) { run_always = true; } else { f_wait = 1.0f/desktop->global_framerate_limit; } } else { f_wait = 1.0f/100.0f; } if (run_always || gui_f_time > f_wait) { ++frame_count; if (desktop) { desktop->dtime = gui_f_time; desktop->time += desktop->dtime; desktop->frames = frame_count; } gui_fullscreen_fpstimer += gui_f_time; current_fps = f2s(round(1.0f/gui_f_time),2); if (gui_fullscreen_fpstimer > 1) { vsx_string h = fpsstring + " @ "+ current_fps+ "fps"; gui_fullscreen_fpstimer = 0; } gui_f_time = 0; if (!*gui_prod_fullwindow) { if (desktop) { desktop->init_frame(); desktop->draw(); desktop->draw_2d(); } } if (!dual_monitor) { vxe->process_message_queue(&internal_cmd_in,&internal_cmd_out); } if (*gui_prod_fullwindow) { glDepthMask(GL_TRUE); glClearColor(0.0f,0.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); #ifndef NO_INTRO if (vxe->e_state == VSX_ENGINE_STOPPED) { //intro->draw(true); } #endif if (vxe && !dual_monitor) { vxe->render(); glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glEnable(GL_BLEND); ++frame_counter; ++delta_frame_counter; delta_frame_time+= dt; total_time += dt; if (delta_frame_counter == 100) { delta_fps = 100.0f/delta_frame_time; delta_frame_counter = 0; delta_frame_time = 0.0f; } if (gui_prod_fullwindow_helptext) { glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0,0,0,0.4f); glBegin(GL_QUADS); // Draw A Quad glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right glVertex3f( 1.0f,0.92f, 0.0f); // Bottom Right glVertex3f(-1.0f,0.92f, 0.0f); // Bottom Left glEnd(); // Done Drawing The Quad myf.print(vsx_vector(-1.0f,0.92f)," Fc "+i2s(frame_counter)+" Fps "+f2s(delta_fps)+" T "+f2s(total_time)+" Tfps "+f2s(frame_counter/total_time)+" MC "+i2s(vxe->get_num_modules())+" VSX Ultra (c) 2003-2010 Vovoid - Alt+T=toggle this text, Ctrl+Alt+P=screenshot (data dir), Alt+F=performance mode ",0.03f); } } if (desktop && desktop->performance_mode) { glClear(GL_DEPTH_BUFFER_BIT); desktop->init_frame(); desktop->draw(); desktop->draw_2d(); } } #ifndef NO_INTRO //intro->draw(); #endif if (!first && !desktop) { pgv.iterations = -1; } pgv.process_garbage(); if (first) { if (!dual_monitor) { vxe->init(); vxe->start(); } load_desktop_a(); first = false; } } else { int zz = (int)((f_wait-gui_f_time)*1000.0f); if (zz < 0) zz = 0; //printf("zz%d ",zz); //Sleep(zz); } //------------------------------------------------------------------ // movie recording //------------------------------------------------------------------ if (record_movie) { GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); char* pixeldata = (char*)malloc( viewport[2] * viewport[3] * 3 ); char* pixeldata_flipped = (char*)malloc( viewport[2] * viewport[3] * 3 ); take_screenshot = false; glReadPixels(0,0,viewport[2],viewport[3],GL_RGB,GL_UNSIGNED_BYTE, (GLvoid*)pixeldata); int x3 = viewport[2]*3; int hi = viewport[3]; for (int y = 0; y < hi; y++) { for (int x = 0; x < x3; x++) { pixeldata_flipped[y*x3+x] = pixeldata[ (hi-y)*x3+x]; } } CJPEGTest jpeg; jpeg.m_nResX = viewport[2]; jpeg.m_nResY = viewport[3]; jpeg.m_pBuf = (unsigned char*)pixeldata_flipped; //char filename[32768]; #if PLATFORM_FAMILY == PLATFORM_FAMILY_UNIX if (access((vsx_get_data_path()+"videos").c_str(),0) != 0) mkdir((vsx_get_data_path()+"/videos").c_str(),0700); //sprintf(filename, "%sscreenshots/%d_%d_%d_rgb.jpg",vsx_get_data_path().c_str(),(int)time(0),viewport[2],viewport[3]); #endif vsx_string err; char mfilename[32]; sprintf(mfilename, "%05d", movie_frame_count); jpeg.SaveJPEG( vsx_get_data_path()+"videos"+DIRECTORY_SEPARATOR+vsx_string(mfilename)+"_"+ i2s(viewport[2]) + "_" + i2s(viewport[3])+".jpg", err, 100 ); jpeg.m_pBuf = 0; free(pixeldata); free(pixeldata_flipped); movie_frame_count++; } //------------------------------------------------------------------ // screenshots //------------------------------------------------------------------ if (take_screenshot) { GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); char* pixeldata = (char*)malloc( viewport[2] * viewport[3] * 3 ); char* pixeldata_flipped = (char*)malloc( viewport[2] * viewport[3] * 3 ); take_screenshot = false; glReadPixels(0,0,viewport[2],viewport[3],GL_RGB,GL_UNSIGNED_BYTE, (GLvoid*)pixeldata); int x3 = viewport[2]*3; int hi = viewport[3]; for (int y = 0; y < hi; y++) { for (int x = 0; x < x3; x++) { pixeldata_flipped[y*x3+x] = pixeldata[ (hi-y)*x3+x]; } } CJPEGTest jpeg; jpeg.m_nResX = viewport[2]; jpeg.m_nResY = viewport[3]; jpeg.m_pBuf = (unsigned char*)pixeldata_flipped; //char filename[32768]; #if PLATFORM_FAMILY == PLATFORM_FAMILY_UNIX if (access((vsx_get_data_path()+"screenshots").c_str(),0) != 0) mkdir((vsx_get_data_path()+"/screenshots").c_str(),0700); //sprintf(filename, "%sscreenshots/%d_%d_%d_rgb.jpg",vsx_get_data_path().c_str(),(int)time(0),viewport[2],viewport[3]); #endif /*FILE* fp = fopen(filename,"wb"); fwrite(pixeldata_flipped, 1, viewport[2] * viewport[3] * 3, fp); fclose(fp);*/ vsx_string err; jpeg.SaveJPEG( vsx_get_data_path()+"screenshots"+DIRECTORY_SEPARATOR+i2s(time(0))+"_"+ i2s(viewport[2]) + "_" + i2s(viewport[3])+".jpg", err, 100 ); jpeg.m_pBuf = 0; free(pixeldata); free(pixeldata_flipped); } } // ::draw()
void Render::updateGamePlay() { if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor1Tr->getBound()))) { ball1->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f)); Logger::getInstance()->log("Collision with ball #1"); } if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor2Tr->getBound()))) { ball2->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f)); Logger::getInstance()->log("Collision with ball #2"); } if (Render::detectCollision(osg::BoundingSphere(helicopterTransform->getBound()), osg::BoundingSphere(tor3Tr->getBound()))) { ball3->setColor(osg::Vec4(1.0f,0.0f,0.0f,0.0f)); Logger::getInstance()->log("Collision with ball #3"); } float frictionScalar = Constants::getInstance()->frictionConstant*sqrt(pow(modelVelocity.x(),2)+pow(modelVelocity.y(),2)+pow(modelVelocity.z(),2)); float mass = Constants::getInstance()->helicopter->mass; float axForce = helicopterThrust.x() - frictionScalar*modelVelocity.x(); float ayForce = helicopterThrust.y() - frictionScalar*modelVelocity.y(); float azForce = aGrav*mass + helicopterThrust.z() - frictionScalar*modelVelocity.z(); float xAcc = axForce/mass; float yAcc = ayForce/mass; float zAcc = azForce/mass; float delta = viewer.getFrameStamp()->getReferenceTime() - last; last = viewer.getFrameStamp()->getReferenceTime(); float xPos = modelPosition.x() + (modelVelocity.x()*delta) + (0.5)*xAcc*(pow(delta,2)); float xVel = (modelVelocity.x() + xAcc*delta)*0.99999999999; float yPos = modelPosition.y() + (modelVelocity.y()*delta) + (0.5)*yAcc*(pow(delta,2)); float yVel = (modelVelocity.y() + yAcc*delta)*0.99999999999; float zPos = modelPosition.z() + (modelVelocity.z()*delta) + (0.5)*zAcc*(pow(delta,2)); float zVel = (modelVelocity.z() + zAcc*delta)*0.99999999999; if(zPos < 1){ //these ones should be radius of ball zPos = 1; zVel *= 0.8; zVel = -zVel; } Logger* logger = Logger::getInstance(); string something = f2s(xPos); logger->log("X Pos: " + f2s(xPos) + " Y Pos: " + f2s(yPos) + " Z Pos: " + f2s(zPos)); logger->log("X Vel: " + f2s(xVel) + " Y Vel: " + f2s(yVel) +" Z Vel: " + f2s(zVel)); logger->log("X Acc: " + f2s(xAcc) + " Y Acc: " + f2s(yAcc) +" Z Acc: " + f2s(zAcc)); logger->log("Throttle Position: " + f2s(rotorForce/Constants::getInstance()->baseThrottle)); modelPosition.set(osg::Vec3d(xPos, yPos, zPos)); modelVelocity.set(osg::Vec3f(xVel, yVel, zVel)); helicopterTransform->setPosition(modelPosition); if(ScriptRunner::getInstance()->getStatus()){ ScriptRunner::getInstance()->doCommand(); } }