void COutlookFrame::ResetInterface(CDocument* pDocument, bool bRestoreContext) { if (m_pInterface != NULL) { // Destroy Interface m_pViewActive = NULL; // OnSetFocus workaround m_pInterface->DestroyNode(); delete m_pInterface; m_pInterface = NULL; } // Create Interface CreateInterface(); m_pInterface->CreateNode(this, pDocument); if (!bRestoreContext) { m_pInterface->ClearContext(); } m_pInterface->RestoreContext(false); m_pInterface->CheckRestrictions(); if (projectUtilities::OutbarIconsAreSmall()) OnUixSmallicon(); else OnUixLargeicon(); RecalcLayout(); m_wndControlBar.SendMessage(WM_NCPAINT); CRect rect; m_wndControlBar.GetClientRect(rect); m_wndControlBar.SendMessage(WM_SIZE, 0, MAKELPARAM(rect.Width(), rect.Height())); }
Context* Context::Create(const HWND i_renderingWindow) { IDirect3D9* direct3dInterface = nullptr; IDirect3DDevice9* direct3dDevice = nullptr; if (!CreateInterface(direct3dInterface) || !CreateDevice(direct3dInterface, i_renderingWindow, direct3dDevice) || !SetSamplerState(direct3dDevice) ) goto OnError; Context *context = new Context(i_renderingWindow); if (context) { context->direct3dDevice = direct3dDevice; context->direct3dInterface = direct3dInterface; } else { Lame::UserOutput::Display("Failed to create Direct3D Context, due to insufficient memory.", "Context Loading Error"); } return context; OnError: if (direct3dInterface) { if (direct3dDevice) { direct3dDevice->Release(); direct3dDevice = nullptr; } direct3dInterface->Release(); direct3dInterface = nullptr; } return nullptr; }
int main(int argc, char *argv[]) { int usock = 0, tapfd = 0; if (argv[1] == NULL) { sayhelp(); return 1; } if (!ReadServerSetup(argv[1])) return 1; if ((tapfd = CreateInterface(SrvSetup.type, SrvSetup.ifname)) < 0) return 1; if ((usock = CreateMainSocket()) < 0) return 1; InitializeServer(usock); while (1) DoWorkMultiplexed(tapfd, usock); return 0; }
bool Graphics::Init(const HWND i_mainWindow) { if (!CreateInterface(i_mainWindow)) { return false; } // Create an interface to a Direct3D device if (CreateDevice(i_mainWindow)) { s_mainWindow = i_mainWindow; } else { goto OnError; } for (DWORD i = 0; i < 8; ++i) { s_direct3dDevice->SetSamplerState(i, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); s_direct3dDevice->SetSamplerState(i, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); s_direct3dDevice->SetSamplerState(i, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); } m_light_1->Initialize(); g_font->Initialize(s_direct3dDevice, 20.0f); debug_menu = new DebugMenu(s_direct3dDevice); float *camSpeed = new float; camSpeed = &mainCamera_->camSpeed; #ifdef _DEBUG debug_menu->CreateSlider("Speed: ", 20.0f, 30.0f, camSpeed); //debug_menu->CreateSlider("TurnSpeed: ", 20.0f, 30.0f, camSpeed); debug_menu->CreateButton("Reset Cam:", &ResetCamera); debug_menu->CreateText("FPS: ", "60.0"); debug_menu->CreateDebugCube(); debug_menu->CreateDebugSphere(); bool *flyCamFlag = new bool; flyCamFlag = &mainCamera_->flyCam_; debug_menu->CreateCheckBox("FlyCam: ", flyCamFlag); #endif mainCamera_->Initialize(s_direct3dDevice, s_mainWindow); mainCamera_->Initialize(s_direct3dDevice, s_mainWindow); default_material = new Material("data/Models/Mario_Material.txt"); default_material->Initialize(s_direct3dDevice, s_mainWindow, m_light_1); mainCamera_->SetConstantTable(default_material->GetConstantTableVertex(), default_material->GetConstantTableFragment()); return true; OnError: ShutDown(); return false; }
void *InterfaceManager::GetInterface(SteamInterface_t interfaceID) { if (Instances.find(interfaceID) == Instances.end()) { Instances[interfaceID] = CreateInterface(interfaceID); } return Instances[interfaceID]; }
~ModuleBase() { int retCode = 0; patches = reinterpret_cast<IPatchManager*>(CreateInterface(PATCHMANAGER_INTERFACE_LATEST, &retCode)); if (modulePatches) { patches->EnablePatchSet(modulePatches, false); modulePatches = nullptr; } }
void* CSteamBase::GetInterface(SteamInterface_t interfaceID) { // note the WTF in std::map - I still prefer the BCL if (_instances.find(interfaceID) == _instances.end()) { // not found yet, so create it _instances[interfaceID] = CreateInterface(interfaceID); } return _instances[interfaceID]; }
/* ------------------------------------------------------------------------- * Function : AddInterface * Description: Add an OLSR-enabled network interface to the list of BMF-enabled * network interfaces * Input : newIntf - network interface to add * Output : none * Return : none * Data Used : none * ------------------------------------------------------------------------- */ void AddInterface(struct interface *newIntf) { /* int nOpened; */ assert(newIntf != NULL); /* nOpened = */ (void)CreateInterface(newIntf->int_name, newIntf); //OLSR_PRINTF(1, "%s: opened %d sockets\n", PLUGIN_NAME, nOpened); } /* AddInterface */
STDMETHOD( CreateInstance )( IUnknown* pUnkOuter, REFIID riid, void** ppvObject ) { InterfaceType* pInterface = CreateInterface(); if( pInterface ) { HRESULT hr = pInterface->QueryInterface( riid, ppvObject ); pInterface->Release(); return hr; } return E_OUTOFMEMORY; }
void* CSteamBase::GetInterface(SteamInterface_t interfaceID) { for (size_t i = 0; i < _instances.size(); i++) { if (_instances[i].interface == interfaceID) { return _instances[i].instance; } } SteamInterface2_s temp; temp.interface = interfaceID; temp.instance = CreateInterface(interfaceID); _instances.push_back(temp); return temp.instance; }
void SimpleDeviceWindow::Play() { CreateNativeWindow(); CreateInterface(); CreateDevice(); Init3D(); m_timer.Reset(); while(!m_exit) { m_timer.Set(); MessageLoop(); Render(m_timer.m_elapsed); } Dispose(); }
ModuleBase(const std::string& moduleName) { this->moduleName = moduleName; int retCode = 0; commands = reinterpret_cast<ICommands*>(CreateInterface(COMMANDS_INTERFACE_LATEST, &retCode)); if (retCode != 0) throw std::runtime_error("Failed to create commands interface"); logger = reinterpret_cast<IDebugLog*>(CreateInterface(DEBUGLOG_INTERFACE_LATEST, &retCode)); if (retCode != 0) throw std::runtime_error("Failed to create debug log interface"); engine = reinterpret_cast<IEngine*>(CreateInterface(ENGINE_INTERFACE_LATEST, &retCode)); if (retCode != 0) throw std::runtime_error("Failed to create engine interface"); patches = reinterpret_cast<IPatchManager*>(CreateInterface(PATCHMANAGER_INTERFACE_LATEST, &retCode)); if (retCode != 0) throw std::runtime_error("Failed to create patch manager interface"); utils = reinterpret_cast<IUtils*>(CreateInterface(UTILS_INTERFACE_LATEST, &retCode)); if (retCode != 0) throw std::runtime_error("Failed to create utils interface"); }
/* * Main procedure. Creates game controller, user interface and OpenGL context. */ int main(int argc, char *argv[]) { // Create window CreateInterface(); // Create OpenGL Context GLContext g; // Create game controller GameController game_controller(g); // Start game loop StartGameLoop(game_controller, g); return 0; }
void IPProbe::ShowInterface () { if ( !IsInterfaceVisible () ) CreateInterface (); int pid = SvbLookupPID ( this ); char name_go [64]; char name_display [64]; char name_close [64]; UplinkSnprintf ( name_go, sizeof ( name_go ), "probe_go %d", pid ); UplinkSnprintf ( name_display, sizeof ( name_display ), "probe_display %d", pid ); UplinkSnprintf ( name_close, sizeof ( name_close ), "probe_close %d", pid ); EclButtonBringToFront ( name_go ); EclButtonBringToFront ( name_display ); EclButtonBringToFront ( name_close ); }
void SecurityBypass::ShowInterface () { if ( !IsInterfaceVisible () ) CreateInterface (); int pid = SvbLookupPID ( this ); char main [32]; char pause [32]; char close [32]; char title [32]; char status [32]; UplinkSnprintf ( main, sizeof ( main ), "sbypass_main %d", pid ); UplinkSnprintf ( pause, sizeof ( pause ), "sbypass_pause %d", pid ); UplinkSnprintf ( close, sizeof ( close ), "sbypass_close %d", pid ); UplinkSnprintf ( title, sizeof ( title ), "sbypass_title %d", pid ); UplinkSnprintf ( status, sizeof ( status ), "sbypass_status %d", pid ); /********** Patched by François Gagné **********/ if ( ShouldDraw ( pid ) ) { EclButtonBringToFront ( main ); EclButtonBringToFront ( pause ); EclButtonBringToFront ( close ); EclButtonBringToFront ( title ); EclButtonBringToFront ( status ); } else { EclButtonSendToBack ( status ); EclButtonSendToBack ( title ); EclButtonSendToBack ( close ); EclButtonSendToBack ( pause ); EclButtonSendToBack ( main ); } }
void Decypher::ShowInterface () { if ( !IsInterfaceVisible () ) CreateInterface (); int pid = SvbLookupPID ( this ); char stitle [128]; char sborder [128]; char sprogress [128]; char sclose [128]; UplinkSnprintf ( stitle, sizeof ( stitle ), "decypher_title %d", pid ); UplinkSnprintf ( sborder, sizeof ( sborder ), "decypher_border %d", pid ); UplinkSnprintf ( sprogress, sizeof ( sprogress ), "decypher_progress %d", pid ); UplinkSnprintf ( sclose, sizeof ( sclose ), "decypher_close %d", pid ); EclButtonBringToFront ( stitle ); EclButtonBringToFront ( sborder ); EclButtonBringToFront ( sprogress ); EclButtonBringToFront ( sclose ); }
/* * Main program */ int main(int argc, char* argv[]) { Arg args[10]; int n = 0; Pixel fg, bg; Display *display; int time; char *str; int i; XtSetArg(args[n], XmNallowShellResize, True); n++; toplevel = XtVaAppInitialize(&app_context, APP_CLASS, NULL, 0, &argc, argv, fallback_resources, NULL); app_class_quark = XrmStringToQuark(APP_CLASS); app_quark = XrmStringToQuark(argv[0]); mainW = CreateInterface("main", toplevel); /* First try the resource database, then use the fallbacks below */ str = XGetDefault(XtDisplay(toplevel), APP_CLASS, "updateTime"); if (str == NULL) str = XGetDefault(XtDisplay(toplevel), argv[0], "updateTime"); if (str == NULL) updateTime = 2000; else updateTime = atoi(str); str = XGetDefault(XtDisplay(toplevel), APP_CLASS, "deleteCommand"); if (str == NULL) str = XGetDefault(XtDisplay(toplevel), argv[0], "deleteCommand"); if (str == NULL) deleteCommand = "rm %s"; else deleteCommand = str; /* Find the widgets in the hierarchy */ dirOM = XtNameToWidget(mainW, "*dirOM"); dirLabel = (Widget *) XtMalloc(sizeof(Widget) * ndirLabel); for (i = 0; i < ndirLabel; i++) { char buf[16]; sprintf(buf, "*l%d", i); dirLabel[i] = XtNameToWidget(mainW, buf); paths[i] = NULL; } fileviewer = XtNameToWidget(mainW, "*container"); gotoDialog = XtNameToWidget(mainW, "*gotoDialog"); displayLabel = XtNameToWidget(mainW, "*Where"); XtVaGetValues(fileviewer, XmNforeground, &bg, XmNbackground, &fg, NULL, NULL); XtManageChild(mainW); /* Install our special error handler */ XSetErrorHandler((XErrorHandler) ErrorHandler); /* Add the UTM callbacks on the container area */ XtAddCallback(fileviewer, XmNdestinationCallback, (XtCallbackProc) targetDestinationCallback, NULL); XtAddCallback(fileviewer, XmNconvertCallback, (XtCallbackProc) targetConvertCallback, NULL); XtAddCallback(XtParent(fileviewer), XmNresizeCallback, fixViewerSize, NULL); readdirCB(fileviewer, ".", NULL); XtRealizeWidget(toplevel); XmContainerRelayout(fileviewer); XtAppAddTimeOut(app_context, updateTime, UpdateDir, (XtPointer) 0); XtAppMainLoop(app_context); return 0; /* make compiler happy */ }
Benchmark::Benchmark() : Window(5,5,300,170,"Benchmark") { listener = NULL; ignoreindex = 0; CreateInterface(); }
bool CAutoResearch::EventProcess(const Event &event) { CPowerContainerObject* power; Math::Vector pos, speed; Error message; Math::Point dim; float angle; CAuto::EventProcess(event); if ( m_engine->GetPause() ) return true; if ( event.type == EVENT_UPDINTERFACE ) { if ( m_object->GetSelect() ) CreateInterface(true); } if ( m_object->GetSelect() ) // center selected? { Error err = ERR_UNKNOWN; if ( event.type == EVENT_OBJECT_RTANK ) err = StartAction(RESEARCH_TANK); if ( event.type == EVENT_OBJECT_RFLY ) err = StartAction(RESEARCH_FLY); if ( event.type == EVENT_OBJECT_RTHUMP ) err = StartAction(RESEARCH_THUMP); if ( event.type == EVENT_OBJECT_RCANON ) err = StartAction(RESEARCH_CANON); if ( event.type == EVENT_OBJECT_RTOWER ) err = StartAction(RESEARCH_TOWER); if ( event.type == EVENT_OBJECT_RPHAZER ) err = StartAction(RESEARCH_PHAZER); if ( event.type == EVENT_OBJECT_RSHIELD ) err = StartAction(RESEARCH_SHIELD); if ( event.type == EVENT_OBJECT_RATOMIC ) err = StartAction(RESEARCH_ATOMIC); if( err != ERR_OK && err != ERR_UNKNOWN ) m_main->DisplayError(err, m_object); if( err != ERR_UNKNOWN ) return false; } if ( event.type != EVENT_FRAME ) return true; m_progress += event.rTime*m_speed; m_timeVirus -= event.rTime; if ( m_object->GetVirusMode() ) // contaminated by a virus? { if ( m_timeVirus <= 0.0f ) { m_timeVirus = 0.1f+Math::Rand()*0.3f; } return true; } UpdateInterface(event.rTime); EventProgress(event.rTime); angle = m_time*0.1f; m_object->SetPartRotationY(1, angle); // rotates the antenna angle = (30.0f+sinf(m_time*0.3f)*20.0f)*Math::PI/180.0f; m_object->SetPartRotationZ(2, angle); // directs the antenna if ( m_phase == ALP_WAIT ) { FireStopUpdate(m_progress, false); // extinguished return true; } if ( m_phase == ALP_SEARCH ) { FireStopUpdate(m_progress, true); // flashes if ( m_progress < 1.0f ) { if ( m_object->GetPower() == nullptr || !m_object->GetPower()->Implements(ObjectInterfaceType::PowerContainer) ) // more battery? { SetBusy(false); UpdateInterface(); m_phase = ALP_WAIT; m_progress = 0.0f; m_speed = 1.0f/1.0f; return true; } power = dynamic_cast<CPowerContainerObject*>(m_object->GetPower()); power->SetEnergyLevel(1.0f-m_progress); if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time ) { m_lastParticle = m_time; pos = m_object->GetPosition(); pos.x += (Math::Rand()-0.5f)*6.0f; pos.z += (Math::Rand()-0.5f)*6.0f; pos.y += 11.0f; speed.x = (Math::Rand()-0.5f)*2.0f; speed.z = (Math::Rand()-0.5f)*2.0f; speed.y = Math::Rand()*20.0f; dim.x = Math::Rand()*1.0f+1.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIVAPOR); } } else { m_main->MarkResearchDone(m_research, m_object->GetTeam()); // research done m_eventQueue->AddEvent(Event(EVENT_UPDINTERFACE)); UpdateInterface(); m_main->DisplayError(INFO_RESEARCH, m_object); message = ERR_OK; if ( m_research == RESEARCH_TANK ) message = INFO_RESEARCHTANK; if ( m_research == RESEARCH_FLY ) message = INFO_RESEARCHFLY; if ( m_research == RESEARCH_THUMP ) message = INFO_RESEARCHTHUMP; if ( m_research == RESEARCH_CANON ) message = INFO_RESEARCHCANON; if ( m_research == RESEARCH_TOWER ) message = INFO_RESEARCHTOWER; if ( m_research == RESEARCH_PHAZER ) message = INFO_RESEARCHPHAZER; if ( m_research == RESEARCH_SHIELD ) message = INFO_RESEARCHSHIELD; if ( m_research == RESEARCH_ATOMIC ) message = INFO_RESEARCHATOMIC; if ( message != ERR_OK ) { m_main->DisplayError(message, m_object); } SetBusy(false); UpdateInterface(); m_phase = ALP_WAIT; m_progress = 0.0f; m_speed = 1.0f/1.0f; } } return true; }
bool CAutoFactory::EventProcess(const Event &event) { ObjectType type; CObject* fret; CObject* vehicle; Math::Matrix* mat; CPhysics* physics; Math::Vector pos, speed; Math::Point dim; float zoom, angle, prog; int i; CAuto::EventProcess(event); if ( m_engine->GetPause() ) return true; if ( m_object->GetSelect() ) // factory selected? { if ( event.type == EVENT_UPDINTERFACE ) { CreateInterface(true); } type = OBJECT_NULL; if ( event.type == EVENT_OBJECT_FACTORYwa ) type = OBJECT_MOBILEwa; if ( event.type == EVENT_OBJECT_FACTORYta ) type = OBJECT_MOBILEta; if ( event.type == EVENT_OBJECT_FACTORYfa ) type = OBJECT_MOBILEfa; if ( event.type == EVENT_OBJECT_FACTORYia ) type = OBJECT_MOBILEia; if ( event.type == EVENT_OBJECT_FACTORYws ) type = OBJECT_MOBILEws; if ( event.type == EVENT_OBJECT_FACTORYts ) type = OBJECT_MOBILEts; if ( event.type == EVENT_OBJECT_FACTORYfs ) type = OBJECT_MOBILEfs; if ( event.type == EVENT_OBJECT_FACTORYis ) type = OBJECT_MOBILEis; if ( event.type == EVENT_OBJECT_FACTORYwc ) type = OBJECT_MOBILEwc; if ( event.type == EVENT_OBJECT_FACTORYtc ) type = OBJECT_MOBILEtc; if ( event.type == EVENT_OBJECT_FACTORYfc ) type = OBJECT_MOBILEfc; if ( event.type == EVENT_OBJECT_FACTORYic ) type = OBJECT_MOBILEic; if ( event.type == EVENT_OBJECT_FACTORYwi ) type = OBJECT_MOBILEwi; if ( event.type == EVENT_OBJECT_FACTORYti ) type = OBJECT_MOBILEti; if ( event.type == EVENT_OBJECT_FACTORYfi ) type = OBJECT_MOBILEfi; if ( event.type == EVENT_OBJECT_FACTORYii ) type = OBJECT_MOBILEii; if ( event.type == EVENT_OBJECT_FACTORYrt ) type = OBJECT_MOBILErt; if ( event.type == EVENT_OBJECT_FACTORYrc ) type = OBJECT_MOBILErc; if ( event.type == EVENT_OBJECT_FACTORYrr ) type = OBJECT_MOBILErr; if ( event.type == EVENT_OBJECT_FACTORYrs ) type = OBJECT_MOBILErs; if ( event.type == EVENT_OBJECT_FACTORYsa ) type = OBJECT_MOBILEsa; Error err = StartAction(type); if( err != ERR_OK && err != ERR_GENERIC ) m_displayText->DisplayError(err, m_object); if( err != ERR_GENERIC ) return false; } if ( event.type != EVENT_FRAME ) return true; m_progress += event.rTime*m_speed; EventProgress(event.rTime); if ( m_phase == AFP_WAIT ) { if ( m_progress >= 1.0f ) { m_phase = AFP_WAIT; // still waiting ... m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == AFP_CLOSE_S ) { if ( m_progress < 1.0f ) { for ( i=0 ; i<9 ; i++ ) { zoom = 0.30f+(m_progress-0.5f+i/16.0f)*2.0f*0.70f; if ( zoom < 0.30f ) zoom = 0.30f; if ( zoom > 1.00f ) zoom = 1.00f; m_object->SetZoomZ( 1+i, zoom); m_object->SetZoomZ(10+i, zoom); } } else { for ( i=0 ; i<9 ; i++ ) { m_object->SetZoomZ( 1+i, 1.0f); m_object->SetZoomZ(10+i, 1.0f); } SoundManip(2.0f, 1.0f, 1.2f); m_phase = AFP_CLOSE_T; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == AFP_CLOSE_T ) { if ( m_progress < 1.0f ) { for ( i=0 ; i<9 ; i++ ) { angle = -m_progress*(Math::PI/2.0f)+Math::PI/2.0f; m_object->SetAngleZ( 1+i, angle); m_object->SetAngleZ(10+i, -angle); } } else { for ( i=0 ; i<9 ; i++ ) { m_object->SetAngleZ( 1+i, 0.0f); m_object->SetAngleZ(10+i, 0.0f); } m_channelSound = m_sound->Play(SOUND_FACTORY, m_object->GetPosition(0), 0.0f, 1.0f, true); m_sound->AddEnvelope(m_channelSound, 1.0f, 1.0f, 2.0f, SOPER_CONTINUE); m_sound->AddEnvelope(m_channelSound, 1.0f, 1.0f, 11.0f, SOPER_CONTINUE); m_sound->AddEnvelope(m_channelSound, 0.0f, 1.0f, 2.0f, SOPER_STOP); m_phase = AFP_BUILD; m_progress = 0.0f; m_speed = 1.0f/15.0f; } } if ( m_phase == AFP_BUILD ) { if ( m_progress == 0.0f ) { if ( !CreateVehicle() ) { fret = SearchFret(); // transform metal? if ( fret != 0 ) { fret->SetLock(false); // metal usable again } if ( m_channelSound != -1 ) { m_sound->FlushEnvelope(m_channelSound); m_sound->AddEnvelope(m_channelSound, 0.0f, 1.0f, 1.0f, SOPER_STOP); m_channelSound = -1; } m_phase = AFP_OPEN_T; m_progress = 0.0f; m_speed = 1.0f/2.0f; return true; } } if ( m_progress < 1.0f ) { if ( m_type == OBJECT_MOBILErt || m_type == OBJECT_MOBILErc || m_type == OBJECT_MOBILErr || m_type == OBJECT_MOBILErs ) { prog = 1.0f-m_progress*1.5f; if ( prog < 0.0f ) prog = 0.0f; } else { prog = 1.0f-m_progress; } angle = powf(prog*10.0f, 2.0f)+m_object->GetAngleY(0); vehicle = SearchVehicle(); if ( vehicle != 0 ) { vehicle->SetAngleY(0, angle+Math::PI); vehicle->SetZoom(0, m_progress); } fret = SearchFret(); // transform metal? if ( fret != 0 ) { fret->SetZoom(0, 1.0f-m_progress); } if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time ) { m_lastParticle = m_time; #if 0 pos = m_fretPos; pos.x += (Math::Rand()-0.5f)*20.0f; pos.z += (Math::Rand()-0.5f)*20.0f; pos.y += 1.0f; speed.x = (Math::Rand()-0.5f)*12.0f; speed.z = (Math::Rand()-0.5f)*12.0f; speed.y = Math::Rand()*12.0f; dim.x = Math::Rand()*12.0f+10.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, PARTIBLUE, 1.0f, 0.0f, 0.0f); #else mat = m_object->GetWorldMatrix(0); pos = Math::Vector(-12.0f, 20.0f, -4.0f); // position of chimney pos = Math::Transform(*mat, pos); pos.y += 2.0f; pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; speed.x = 0.0f; speed.z = 0.0f; speed.y = 6.0f+Math::Rand()*6.0f; dim.x = Math::Rand()*1.5f+1.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTISMOKE3, 4.0f); #endif } } else { m_displayText->DisplayError(INFO_FACTORY, m_object); SoundManip(2.0f, 1.0f, 1.2f); fret = SearchFret(); // transform metal? if ( fret != 0 ) { fret->DeleteObject(); // removes the metal delete fret; } m_vehicle = vehicle = SearchVehicle(); if ( vehicle != 0 ) { physics = vehicle->GetPhysics(); if ( physics != 0 ) { physics->SetFreeze(false); // can move } vehicle->SetLock(false); // vehicle useable //? vehicle->GetPhysics()->GetBrain()->StartTaskAdvance(16.0f); vehicle->SetAngleY(0, m_object->GetAngleY(0)+Math::PI); vehicle->SetZoom(0, 1.0f); } m_main->CreateShortcuts(); m_phase = AFP_OPEN_T; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == AFP_OPEN_T ) { if ( m_progress < 1.0f ) { for ( i=0 ; i<9 ; i++ ) { angle = -(1.0f-m_progress)*(Math::PI/2.0f)+Math::PI/2.0f; m_object->SetAngleZ( 1+i, angle); m_object->SetAngleZ(10+i, -angle); } if ( m_lastParticle+m_engine->ParticleAdapt(0.1f) <= m_time ) { m_lastParticle = m_time; pos = m_fretPos; pos.x += (Math::Rand()-0.5f)*10.0f; pos.z += (Math::Rand()-0.5f)*10.0f; pos.y += Math::Rand()*10.0f; speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = 2.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGLINT, 2.0f, 0.0f, 0.0f); } } else { for ( i=0 ; i<9 ; i++ ) { m_object->SetAngleZ( 1+i, Math::PI/2.0f); m_object->SetAngleZ(10+i, -Math::PI/2.0f); } SoundManip(3.0f, 1.0f, 0.5f); m_phase = AFP_OPEN_S; m_progress = 0.0f; m_speed = 1.0f/3.0f; } } if ( m_phase == AFP_OPEN_S ) { if ( m_progress < 1.0f ) { for ( i=0 ; i<9 ; i++ ) { zoom = 0.30f+((1.0f-m_progress)-0.5f+i/16.0f)*2.0f*0.70f; if ( zoom < 0.30f ) zoom = 0.30f; if ( zoom > 1.00f ) zoom = 1.00f; m_object->SetZoomZ( 1+i, zoom); m_object->SetZoomZ(10+i, zoom); } if ( m_lastParticle+m_engine->ParticleAdapt(0.1f) <= m_time ) { m_lastParticle = m_time; pos = m_fretPos; pos.x += (Math::Rand()-0.5f)*10.0f; pos.z += (Math::Rand()-0.5f)*10.0f; pos.y += Math::Rand()*10.0f; speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = 2.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGLINT, 2.0f, 0.0f, 0.0f); } } else { for ( i=0 ; i<9 ; i++ ) { m_object->SetZoomZ( 1+i, 0.30f); m_object->SetZoomZ(10+i, 0.30f); } if ( m_program != nullptr ) { CBrain* brain = m_vehicle->GetBrain(); if ( brain != nullptr ) { brain->SendProgram(0, const_cast<const char*>(m_program)); brain->SetScriptRun(0); brain->RunProgram(0); } } SetBusy(false); UpdateInterface(); m_phase = AFP_WAIT; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } return true; }
bool CAutoFactory::EventProcess(const Event &event) { ObjectType type; CObject* cargo; CObject* vehicle; Math::Matrix* mat; CPhysics* physics; Math::Vector pos, speed; Math::Point dim; float zoom, angle, prog; int i; CAuto::EventProcess(event); if ( m_engine->GetPause() ) return true; if ( m_object->GetSelect() ) // factory selected? { if ( event.type == EVENT_UPDINTERFACE ) { CreateInterface(true); } type = ObjectTypeFromFactoryButton(event.type); Error err = StartAction(type); if( err != ERR_OK && err != ERR_UNKNOWN ) m_main->DisplayError(err, m_object); if( err != ERR_UNKNOWN ) return false; } if ( event.type != EVENT_FRAME ) return true; m_progress += event.rTime*m_speed; EventProgress(event.rTime); if ( m_phase == AFP_WAIT ) { if ( m_progress >= 1.0f ) { m_phase = AFP_WAIT; // still waiting ... m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == AFP_CLOSE_S ) { if ( m_progress < 1.0f ) { for ( i=0 ; i<9 ; i++ ) { zoom = 0.30f+(m_progress-0.5f+i/16.0f)*2.0f*0.70f; if ( zoom < 0.30f ) zoom = 0.30f; if ( zoom > 1.00f ) zoom = 1.00f; m_object->SetPartScaleZ( 1+i, zoom); m_object->SetPartScaleZ(10+i, zoom); } } else { for ( i=0 ; i<9 ; i++ ) { m_object->SetPartScaleZ( 1+i, 1.0f); m_object->SetPartScaleZ(10+i, 1.0f); } SoundManip(2.0f, 1.0f, 1.2f); m_phase = AFP_CLOSE_T; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == AFP_CLOSE_T ) { if ( m_progress < 1.0f ) { for ( i=0 ; i<9 ; i++ ) { angle = -m_progress*(Math::PI/2.0f)+Math::PI/2.0f; m_object->SetPartRotationZ( 1+i, angle); m_object->SetPartRotationZ(10+i, -angle); } } else { for ( i=0 ; i<9 ; i++ ) { m_object->SetPartRotationZ( 1+i, 0.0f); m_object->SetPartRotationZ(10+i, 0.0f); } m_channelSound = m_sound->Play(SOUND_FACTORY, m_object->GetPosition(), 0.0f, 1.0f, true); m_sound->AddEnvelope(m_channelSound, 1.0f, 1.0f, 2.0f, SOPER_CONTINUE); m_sound->AddEnvelope(m_channelSound, 1.0f, 1.0f, 11.0f, SOPER_CONTINUE); m_sound->AddEnvelope(m_channelSound, 0.0f, 1.0f, 2.0f, SOPER_STOP); m_phase = AFP_BUILD; m_progress = 0.0f; m_speed = 1.0f/15.0f; } } if ( m_phase == AFP_BUILD ) { if ( m_progress == 0.0f ) { if ( !CreateVehicle() ) { cargo = SearchCargo(); // transform metal? if ( cargo != nullptr ) { cargo->SetLock(false); // metal usable again } if ( m_channelSound != -1 ) { m_sound->FlushEnvelope(m_channelSound); m_sound->AddEnvelope(m_channelSound, 0.0f, 1.0f, 1.0f, SOPER_STOP); m_channelSound = -1; } m_phase = AFP_OPEN_T; m_progress = 0.0f; m_speed = 1.0f/2.0f; return true; } } if ( m_progress < 1.0f ) { if ( m_type == OBJECT_MOBILErt || m_type == OBJECT_MOBILErc || m_type == OBJECT_MOBILErr || m_type == OBJECT_MOBILErs ) { prog = 1.0f-m_progress*1.5f; if ( prog < 0.0f ) prog = 0.0f; } else { prog = 1.0f-m_progress; } angle = powf(prog*10.0f, 2.0f)+m_object->GetRotationY(); vehicle = SearchVehicle(); if ( vehicle != nullptr ) { vehicle->SetRotationY(angle+Math::PI); vehicle->SetScale(m_progress); } cargo = SearchCargo(); // transform metal? if ( cargo != nullptr ) { cargo->SetScale(1.0f-m_progress); } if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time ) { m_lastParticle = m_time; mat = m_object->GetWorldMatrix(0); pos = Math::Vector(-12.0f, 20.0f, -4.0f); // position of chimney pos = Math::Transform(*mat, pos); pos.y += 2.0f; pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; speed.x = 0.0f; speed.z = 0.0f; speed.y = 6.0f+Math::Rand()*6.0f; dim.x = Math::Rand()*1.5f+1.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTISMOKE3, 4.0f); } } else { m_main->DisplayError(INFO_FACTORY, m_object); SoundManip(2.0f, 1.0f, 1.2f); cargo = SearchCargo(); // transform metal? if ( cargo != nullptr ) { CObjectManager::GetInstancePointer()->DeleteObject(cargo); } vehicle = SearchVehicle(); if ( vehicle != nullptr ) { assert(vehicle->Implements(ObjectInterfaceType::Movable)); physics = dynamic_cast<CMovableObject*>(vehicle)->GetPhysics(); physics->SetFreeze(false); // can move vehicle->SetLock(false); // vehicle useable vehicle->SetRotationY(m_object->GetRotationY()+Math::PI); vehicle->SetScale(1.0f); if ( !m_program.empty() ) { if (vehicle->Implements(ObjectInterfaceType::Programmable) && vehicle->Implements(ObjectInterfaceType::ProgramStorage)) { Program* program = dynamic_cast<CProgramStorageObject*>(vehicle)->AddProgram(); if (boost::regex_search(m_program, boost::regex("^[A-Za-z0-9_]+$"))) // Public function name? { std::string code = "extern void object::Start_"+m_program+"()\n{\n\t\n\t//Automatically generated by object.factory()\n\t"+m_program+"();\n\t\n}\n"; program->script->SendScript(code.c_str()); } else if (boost::regex_search(m_program, boost::regex("\\.txt$"))) // File name (with .txt extension)? { program->script->ReadScript(m_program.c_str()); } else // Program code? { program->script->SendScript(m_program.c_str()); } dynamic_cast<CProgrammableObject*>(vehicle)->RunProgram(program); } } } m_main->CreateShortcuts(); m_phase = AFP_OPEN_T; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == AFP_OPEN_T ) { if ( m_progress < 1.0f ) { for ( i=0 ; i<9 ; i++ ) { angle = -(1.0f-m_progress)*(Math::PI/2.0f)+Math::PI/2.0f; m_object->SetPartRotationZ( 1+i, angle); m_object->SetPartRotationZ(10+i, -angle); } if ( m_lastParticle+m_engine->ParticleAdapt(0.1f) <= m_time ) { m_lastParticle = m_time; pos = m_cargoPos; pos.x += (Math::Rand()-0.5f)*10.0f; pos.z += (Math::Rand()-0.5f)*10.0f; pos.y += Math::Rand()*10.0f; speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = 2.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGLINT, 2.0f, 0.0f, 0.0f); } } else { for ( i=0 ; i<9 ; i++ ) { m_object->SetPartRotationZ( 1+i, Math::PI/2.0f); m_object->SetPartRotationZ(10+i, -Math::PI/2.0f); } SoundManip(3.0f, 1.0f, 0.5f); m_phase = AFP_OPEN_S; m_progress = 0.0f; m_speed = 1.0f/3.0f; } } if ( m_phase == AFP_OPEN_S ) { if ( m_progress < 1.0f ) { for ( i=0 ; i<9 ; i++ ) { zoom = 0.30f+((1.0f-m_progress)-0.5f+i/16.0f)*2.0f*0.70f; if ( zoom < 0.30f ) zoom = 0.30f; if ( zoom > 1.00f ) zoom = 1.00f; m_object->SetPartScaleZ( 1+i, zoom); m_object->SetPartScaleZ(10+i, zoom); } if ( m_lastParticle+m_engine->ParticleAdapt(0.1f) <= m_time ) { m_lastParticle = m_time; pos = m_cargoPos; pos.x += (Math::Rand()-0.5f)*10.0f; pos.z += (Math::Rand()-0.5f)*10.0f; pos.y += Math::Rand()*10.0f; speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = 2.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGLINT, 2.0f, 0.0f, 0.0f); } } else { for ( i=0 ; i<9 ; i++ ) { m_object->SetPartScaleZ( 1+i, 0.30f); m_object->SetPartScaleZ(10+i, 0.30f); } SetBusy(false); UpdateInterface(); m_phase = AFP_WAIT; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } return true; }
/* ------------------------------------------------------------------------- * Function : CreateBmfNetworkInterfaces * Description: Create a list of TBmfInterface objects, one for each network * interface on which BMF runs * Input : skipThisIntf - network interface to skip, if seen * Output : none * Return : fail (-1) or success (0) * Data Used : none * ------------------------------------------------------------------------- */ int CreateBmfNetworkInterfaces(struct interface *skipThisIntf) { int skfd; struct ifconf ifc; int numreqs = 30; struct ifreq *ifr; int n; int nOpenedSockets = 0; /* Clear input descriptor set */ FD_ZERO(&InputSet); skfd = socket(PF_INET, SOCK_DGRAM, 0); if (skfd < 0) { BmfPError("no inet socket available to retrieve interface list"); return -1; } /* Retrieve the network interface configuration list */ ifc.ifc_buf = NULL; for (;;) { ifc.ifc_len = sizeof(struct ifreq) * numreqs; ifc.ifc_buf = realloc(ifc.ifc_buf, ifc.ifc_len); if (ioctl(skfd, SIOCGIFCONF, &ifc) < 0) { BmfPError("ioctl(SIOCGIFCONF) error"); close(skfd); free(ifc.ifc_buf); return -1; } if ((unsigned)ifc.ifc_len == sizeof(struct ifreq) * numreqs) { /* Assume it overflowed; double the space and try again */ numreqs *= 2; assert(numreqs < 1024); continue; /* for (;;) */ } break; /* for (;;) */ } /* for (;;) */ close(skfd); /* For each item in the interface configuration list... */ ifr = ifc.ifc_req; for (n = ifc.ifc_len / sizeof(struct ifreq); --n >= 0; ifr++) { struct interface *olsrIntf; union olsr_ip_addr ipAddr; /* Skip the BMF network interface itself */ //if (strncmp(ifr->ifr_name, EtherTunTapIfName, IFNAMSIZ) == 0) //{ // continue; /* for (n = ...) */ //} /* ...find the OLSR interface structure, if any */ ipAddr.v4 = ((struct sockaddr_in *)ARM_NOWARN_ALIGN(&ifr->ifr_addr))->sin_addr; olsrIntf = if_ifwithaddr(&ipAddr); if (skipThisIntf != NULL && olsrIntf == skipThisIntf) { continue; /* for (n = ...) */ } if (olsrIntf == NULL && !IsNonOlsrBmfIf(ifr->ifr_name)) { /* Interface is neither OLSR interface, nor specified as non-OLSR BMF * interface in the BMF plugin parameter list */ continue; /* for (n = ...) */ } if (!IsNonOlsrBmfIf(ifr->ifr_name)) { //If the interface is not specified in the configuration file then go ahead continue; /* for (n = ...) */ } //TODO: asser if->ifr_name is not talking OLSR //nOpenedSockets += CreateInterface(ifr->ifr_name, olsrIntf); nOpenedSockets += CreateInterface(ifr->ifr_name, NULL); } /* for (n = ...) */ free(ifc.ifc_buf); if (BmfInterfaces == NULL) { //OLSR_PRINTF(1, "%s: could not initialize any network interface\n", PLUGIN_NAME); } else { //OLSR_PRINTF(1, "%s: opened %d sockets\n", PLUGIN_NAME, nOpenedSockets); } return 0; } /* CreateBmfNetworkInterfaces */
ViewExpression::ViewExpression(MainFrame *parent,wxSize s):wxWindow(parent,wxID_ANY,wxDefaultPosition,s,wxBORDER_SIMPLE),DocumentObserver(parent->GetDocument()),_parent(parent) { _textColor = wxColor(0,0,0); _backColor = wxColor(255,255,255); CreateInterface(); }
AlgorithmDocumentFrame::AlgorithmDocumentFrame(MainFrame *parent):DocumentFrame(parent, "Algorithm Document", wxDefaultPosition, wxDefaultSize) { CreateInterface(); }
//------------------------------------------------------------------------------ GmatBase* DataInterfaceFactory::CreateObject(const std::string &ofType, const std::string &withName) { return CreateInterface(ofType, withName); }
bool CAutoBase::EventProcess(const Event &event) { Math::Matrix* mat; Event newEvent; CObject* pObj; Math::Vector pos, speed, vibCir, iPos; Math::Point dim, p; float angle, dist, time, h, len, vSpeed; int i, max; CAuto::EventProcess(event); if ( m_engine->GetPause() ) return true; begin: iPos = m_object->GetPosition(0); if ( m_phase == ABP_START ) { if ( m_param != PARAM_STOP && // not placed on the ground? m_param != PARAM_FIXSCENE ) { FreezeCargo(true); // freeze whole cargo } if ( m_param == PARAM_STOP ) // raises the ground? { m_phase = ABP_WAIT; m_progress = 0.0f; m_speed = 1.0f/2.0f; for ( i=0 ; i<8 ; i++ ) { m_object->SetAngleZ(1+i, Math::PI/2.0f-124.0f*Math::PI/180.0f); m_object->SetAngleX(10+i, -10.0f*Math::PI/180.0f); m_object->SetAngleX(18+i, 10.0f*Math::PI/180.0f); m_object->SetPosition(10+i, Math::Vector(23.5f, 0.0f, -11.5f)); m_object->SetPosition(18+i, Math::Vector(23.5f, 0.0f, 11.5f)); } pObj = m_main->GetSelectObject(); m_main->SelectObject(pObj); m_camera->SetControllingObject(pObj); if ( pObj == 0 ) { m_camera->SetType(Gfx::CAM_TYPE_BACK); } else { m_camera->SetType(pObj->GetCameraType()); m_camera->SetDist(pObj->GetCameraDist()); } m_main->StartMusic(); } if ( m_param == PARAM_FIXSCENE ) // raises the ground? { m_phase = ABP_WAIT; m_progress = 0.0f; m_speed = 1.0f/2.0f; for ( i=0 ; i<8 ; i++ ) { m_object->SetAngleZ(1+i, Math::PI/2.0f-124.0f*Math::PI/180.0f); m_object->SetAngleX(10+i, -10.0f*Math::PI/180.0f); m_object->SetAngleX(18+i, 10.0f*Math::PI/180.0f); m_object->SetPosition(10+i, Math::Vector(23.5f, 0.0f, -11.5f)); m_object->SetPosition(18+i, Math::Vector(23.5f, 0.0f, 11.5f)); } } if ( m_param == PARAM_LANDING ) // Landing? { m_phase = ABP_LAND; m_progress = 0.0f; m_speed = 1.0f/BASE_LAND_TIME; m_main->SetMovieLock(true); // blocks everything until the end of the landing m_bMotor = true; // lights the jet engine m_camera->SetType(Gfx::CAM_TYPE_SCRIPT); pos = m_pos; pos.x -= 150.0f; m_terrain->AdjustToFloor(pos); pos.y += 10.0f; m_camera->SetScriptEye(pos); m_posSound = pos; pos = m_object->GetPosition(0); pos.y += 300.0f+50.0f; m_camera->SetScriptLookat(pos); m_camera->FixCamera(); m_engine->SetFocus(2.0f); m_engine->SetFogStart(0.9f); if ( m_soundChannel == -1 ) { m_soundChannel = m_sound->Play(SOUND_FLY, m_posSound, 0.3f, 2.0f, true); m_sound->AddEnvelope(m_soundChannel, 1.0f, 0.5f, BASE_LAND_TIME, SOPER_CONTINUE); m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.5f, 2.0f, SOPER_STOP); } m_main->StartMusic(); } if ( m_param == PARAM_PORTICO ) // gate on the porch? { pos = m_object->GetPosition(0); m_finalPos = pos; pos.z += BASE_PORTICO_TIME_MOVE*5.0f; // back pos.y += 10.0f; // rises (the gate) m_object->SetPosition(0, pos); MoveCargo(); // all cargo moves m_phase = ABP_PORTICO_MOVE; m_progress = 0.0f; m_speed = 1.0f/BASE_PORTICO_TIME_MOVE; m_main->StartMusic(); } if ( m_param == PARAM_TRANSIT1 || m_param == PARAM_TRANSIT2 || m_param == PARAM_TRANSIT3 ) // transit in space? { m_phase = ABP_TRANSIT_MOVE; m_progress = 0.0f; m_speed = 1.0f/BASE_TRANSIT_TIME; m_object->SetAngleZ(0, -Math::PI/2.0f); pos = m_object->GetPosition(0); pos.y += 10000.0f; // in space m_finalPos = pos; m_object->SetPosition(0, pos); m_main->SetMovieLock(true); // blocks everything until the end of the landing m_bMotor = true; // lights the jet engine m_camera->SetType(Gfx::CAM_TYPE_SCRIPT); pos.x += 1000.0f; pos.z -= 60.0f; pos.y += 80.0f; m_camera->SetScriptEye(pos); m_posSound = pos; m_camera->FixCamera(); m_engine->SetFocus(1.0f); BeginTransit(); mat = m_object->GetWorldMatrix(0); speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = 10.0f; dim.y = dim.x; pos = Math::Vector(42.0f, -2.0f, 17.0f); pos = Transform(*mat, pos); m_partiChannel[0] = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTILENS1, BASE_TRANSIT_TIME+1.0f, 0.0f, 0.0f); pos = Math::Vector(17.0f, -2.0f, 42.0f); pos = Transform(*mat, pos); m_partiChannel[1] = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTILENS1, BASE_TRANSIT_TIME+1.0f, 0.0f, 0.0f); pos = Math::Vector(42.0f, -2.0f, -17.0f); pos = Transform(*mat, pos); m_partiChannel[2] = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTILENS1, BASE_TRANSIT_TIME+1.0f, 0.0f, 0.0f); pos = Math::Vector(17.0f, -2.0f, -42.0f); pos = Transform(*mat, pos); m_partiChannel[3] = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTILENS1, BASE_TRANSIT_TIME+1.0f, 0.0f, 0.0f); pos = Math::Vector(-42.0f, -2.0f, 17.0f); pos = Transform(*mat, pos); m_partiChannel[4] = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTILENS1, BASE_TRANSIT_TIME+1.0f, 0.0f, 0.0f); pos = Math::Vector(-17.0f, -2.0f, 42.0f); pos = Transform(*mat, pos); m_partiChannel[5] = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTILENS1, BASE_TRANSIT_TIME+1.0f, 0.0f, 0.0f); pos = Math::Vector(-42.0f, -2.0f, -17.0f); pos = Transform(*mat, pos); m_partiChannel[6] = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTILENS1, BASE_TRANSIT_TIME+1.0f, 0.0f, 0.0f); pos = Math::Vector(-17.0f, -2.0f, -42.0f); pos = Transform(*mat, pos); m_partiChannel[7] = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTILENS1, BASE_TRANSIT_TIME+1.0f, 0.0f, 0.0f); if ( m_soundChannel == -1 ) { m_soundChannel = m_sound->Play(SOUND_FLY, m_posSound, 0.0f, 1.2f, true); m_sound->AddEnvelope(m_soundChannel, 1.0f, 1.0f, BASE_TRANSIT_TIME*0.55f, SOPER_CONTINUE); m_sound->AddEnvelope(m_soundChannel, 0.3f, 0.8f, BASE_TRANSIT_TIME*0.45f, SOPER_STOP); } } } if ( event.type == EVENT_UPDINTERFACE ) { if ( m_object->GetSelect() ) CreateInterface(true); } if ( event.type == EVENT_OBJECT_BTAKEOFF ) { return TakeOff(true); } if ( event.type != EVENT_FRAME ) return true; if ( m_phase == ABP_WAIT ) return true; m_progress += event.rTime*m_speed; if ( m_phase == ABP_LAND ) { if ( m_progress < 1.0f ) { pos = m_pos; pos.y += powf(1.0f-m_progress, 2.0f)*300.0f; m_object->SetPosition(0, pos); MoveCargo(); // all cargo moves vibCir.z = sinf(m_time*Math::PI* 2.01f)*(Math::PI/150.0f)+ sinf(m_time*Math::PI* 2.51f)*(Math::PI/200.0f)+ sinf(m_time*Math::PI*19.01f)*(Math::PI/400.0f); vibCir.x = sinf(m_time*Math::PI* 2.03f)*(Math::PI/150.0f)+ sinf(m_time*Math::PI* 2.52f)*(Math::PI/200.0f)+ sinf(m_time*Math::PI*19.53f)*(Math::PI/400.0f); vibCir.y = 0.0f; vibCir *= Math::Min(1.0f, (1.0f-m_progress)*3.0f); m_object->SetCirVibration(vibCir); pos = m_pos; pos.x -= 150.0f; m_terrain->AdjustToFloor(pos); pos.y += 10.0f; m_camera->SetScriptEye(pos); pos = m_object->GetPosition(0); pos.y += 50.0f; m_camera->SetScriptLookat(pos); m_engine->SetFocus(1.0f+(1.0f-m_progress)); if ( m_lastParticle+m_engine->ParticleAdapt(0.10f) <= m_time ) { m_lastParticle = m_time; // Dust thrown to the ground. pos = m_pos; pos.x += (Math::Rand()-0.5f)*10.0f; pos.z += (Math::Rand()-0.5f)*10.0f; angle = Math::Rand()*(Math::PI*2.0f); dist = m_progress*50.0f; p = Math::RotatePoint(angle, dist); speed.x = p.x; speed.z = p.y; speed.y = 0.0f; dim.x = (Math::Rand()*15.0f+15.0f)*m_progress; dim.y = dim.x; if ( dim.x >= 1.0f ) { m_particle->CreateParticle(pos, speed, dim, Gfx::PARTICRASH, 2.0f, 0.0f, 2.0f); } // Particles are ejected from the jet engine. pos = m_object->GetPosition(0); pos.y += 6.0f; h = m_terrain->GetHeightToFloor(pos)/300.0f; speed.x = (Math::Rand()-0.5f)*(80.0f-50.0f*h); speed.z = (Math::Rand()-0.5f)*(80.0f-50.0f*h); speed.y = -(Math::Rand()*(h+1.0f)*40.0f+(h+1.0f)*40.0f); dim.x = Math::Rand()*2.0f+2.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 2.0f, 10.0f, 2.0f); // Black smoke from the jet engine. if ( m_progress > 0.8f ) { pos = m_pos; pos.x += (Math::Rand()-0.5f)*8.0f; pos.z += (Math::Rand()-0.5f)*8.0f; pos.y += 3.0f; speed.x = (Math::Rand()-0.5f)*8.0f; speed.z = (Math::Rand()-0.5f)*8.0f; speed.y = 0.0f; dim.x = Math::Rand()*4.0f+4.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTISMOKE3, 4.0f, 0.0f, 2.0f); } } } else { m_bMotor = false; // put out the reactor m_object->SetPosition(0, m_pos); // setting down m_object->SetCirVibration(Math::Vector(0.0f, 0.0f, 0.0f)); MoveCargo(); // all cargo moves // Impact with the ground. max = static_cast<int>(50.0f*m_engine->GetParticleDensity()); for ( i=0 ; i<max ; i++ ) { angle = Math::Rand()*(Math::PI*2.0f); p = Math::RotatePoint(angle, 46.0f); pos = m_pos; pos.x += p.x; pos.z += p.y; speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = Math::Rand()*10.0f+10.0f; dim.y = dim.x; time = Math::Rand()*2.0f+1.5f; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTICRASH, time, 0.0f, 2.0f); } //? m_camera->StartEffect(CE_CRASH, m_pos, 1.0f); m_camera->StartEffect(Gfx::CAM_EFFECT_EXPLO, m_pos, 2.0f); m_engine->SetFocus(1.0f); m_sound->Play(SOUND_BOUM, m_posSound, 0.6f, 0.5f); m_phase = ABP_OPENWAIT; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == ABP_OPENWAIT ) { if ( m_progress < 1.0f ) { if ( m_lastParticle+m_engine->ParticleAdapt(0.10f) <= m_time ) { m_lastParticle = m_time; // Black smoke from the reactor. pos = m_pos; pos.x += (Math::Rand()-0.5f)*8.0f; pos.z += (Math::Rand()-0.5f)*8.0f; pos.y += 3.0f; speed.x = (Math::Rand()-0.5f)*8.0f; speed.z = (Math::Rand()-0.5f)*8.0f; speed.y = 0.0f; dim.x = Math::Rand()*4.0f+4.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTISMOKE3, 4.0f, 0.0f, 2.0f); } } else { m_soundChannel = m_sound->Play(SOUND_MANIP, m_posSound, 0.0f, 0.3f, true); m_sound->AddEnvelope(m_soundChannel, 0.3f, 0.3f, 1.0f, SOPER_CONTINUE); m_sound->AddEnvelope(m_soundChannel, 0.3f, 1.0f, BASE_DOOR_TIME-1.5f, SOPER_CONTINUE); m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.3f, 1.0f, SOPER_STOP); m_phase = ABP_OPEN; m_progress = 0.0f; m_speed = 1.0f/BASE_DOOR_TIME; } } if ( m_phase == ABP_OPEN ) { if ( m_progress < 1.0f ) { angle = -m_progress*124.0f*Math::PI/180.0f; for ( i=0 ; i<8 ; i++ ) { m_object->SetAngleZ(1+i, Math::PI/2.0f+angle); } if ( m_param != PARAM_PORTICO ) { angle = m_progress*Math::PI*2.0f; p = Math::RotatePoint(angle, -150.0f); pos = m_pos; pos.x += p.x; pos.z += p.y; m_terrain->AdjustToFloor(pos); pos.y += 10.0f; pos.y += m_progress*40.0f; m_camera->SetScriptEye(pos); m_engine->SetFogStart(0.9f-(0.9f-m_fogStart)*m_progress); } } else { for ( i=0 ; i<8 ; i++ ) { m_object->SetAngleZ(1+i, Math::PI/2.0f-124.0f*Math::PI/180.0f); } // Clash the doors with the ground. max = static_cast<int>(20.0f*m_engine->GetParticleDensity()); for ( i=0 ; i<max ; i++ ) { angle = Math::Rand()*(20.0f*Math::PI/180.0f)-(10.0f*Math::PI/180.0f); angle += (Math::PI/4.0f)*(rand()%8); p = Math::RotatePoint(angle, 74.0f); pos = m_pos; pos.x += p.x; pos.z += p.y; speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = Math::Rand()*8.0f+8.0f; dim.y = dim.x; time = Math::Rand()*2.0f+1.5f; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTICRASH, time, 0.0f, 2.0f); } m_soundChannel = m_sound->Play(SOUND_MANIP, m_posSound, 0.3f, 1.5f, true); m_sound->AddEnvelope(m_soundChannel, 0.3f, 1.5f, BASE_DOOR_TIME2, SOPER_CONTINUE); m_sound->AddEnvelope(m_soundChannel, 0.0f, 1.5f, 0.5f, SOPER_STOP); m_phase = ABP_OPEN2; m_progress = 0.0f; m_speed = 1.0f/BASE_DOOR_TIME2; } } if ( m_phase == ABP_OPEN2 ) { if ( m_progress < 1.0f ) { len = 7.0f-m_progress*(7.0f+11.5f); for ( i=0 ; i<8 ; i++ ) { m_object->SetPosition(10+i, Math::Vector(23.5f, 0.0f, len)); m_object->SetPosition(18+i, Math::Vector(23.5f, 0.0f, -len)); m_object->SetAngleX(10+i, -10.0f*Math::PI/180.0f*m_progress); m_object->SetAngleX(18+i, 10.0f*Math::PI/180.0f*m_progress); } if ( m_param != PARAM_PORTICO ) { angle = m_progress*Math::PI/2.0f; p = Math::RotatePoint(angle, -150.0f); pos = m_pos; pos.x += p.x; pos.z += p.y; m_terrain->AdjustToFloor(pos); pos.y += 10.0f; pos.y += m_progress*40.0f; m_camera->SetScriptEye(pos); m_engine->SetFogStart(0.9f-(0.9f-m_fogStart)*m_progress); } } else { for ( i=0 ; i<8 ; i++ ) { m_object->SetPosition(10+i, Math::Vector(23.5f, 0.0f, -11.5f)); m_object->SetPosition(18+i, Math::Vector(23.5f, 0.0f, 11.5f)); m_object->SetAngleX(10+i, -10.0f*Math::PI/180.0f); m_object->SetAngleX(18+i, 10.0f*Math::PI/180.0f); } m_phase = ABP_LDWAIT; m_progress = 0.0f; m_speed = 1.0f/1.0f; } } if ( m_phase == ABP_LDWAIT ) { if ( m_progress >= 1.0f ) { FreezeCargo(false); // frees all cargo if ( m_param != PARAM_PORTICO ) { m_main->SetMovieLock(false); // you can play! pObj = m_main->GetSelectObject(); m_main->SelectObject(pObj); m_camera->SetControllingObject(pObj); if ( pObj == 0 ) { m_camera->SetType(Gfx::CAM_TYPE_BACK); } else { m_camera->SetType(pObj->GetCameraType()); m_camera->SetDist(pObj->GetCameraDist()); } m_sound->Play(SOUND_BOUM, m_object->GetPosition(0)); m_soundChannel = -1; m_engine->SetFogStart(m_fogStart); } m_bOpen = true; m_phase = ABP_WAIT; m_progress = 0.0f; m_speed = 1.0f/1.0f; } } if ( m_phase == ABP_CLOSE2 ) { if ( m_progress < 1.0f ) { len = 7.0f-(1.0f-m_progress)*(7.0f+11.5f); for ( i=0 ; i<8 ; i++ ) { m_object->SetPosition(10+i, Math::Vector(23.5f, 0.0f, len)); m_object->SetPosition(18+i, Math::Vector(23.5f, 0.0f, -len)); m_object->SetAngleX(10+i, -10.0f*Math::PI/180.0f*(1.0f-m_progress)); m_object->SetAngleX(18+i, 10.0f*Math::PI/180.0f*(1.0f-m_progress)); } } else { for ( i=0 ; i<8 ; i++ ) { m_object->SetPosition(10+i, Math::Vector(23.5f, 0.0f, 7.0f)); m_object->SetPosition(18+i, Math::Vector(23.5f, 0.0f, -7.0f)); m_object->SetAngleX(10+i, 0.0f); m_object->SetAngleX(18+i, 0.0f); } m_soundChannel = m_sound->Play(SOUND_MANIP, m_posSound, 0.0f, 0.3f, true); m_sound->AddEnvelope(m_soundChannel, 0.3f, 0.3f, 1.0f, SOPER_CONTINUE); m_sound->AddEnvelope(m_soundChannel, 0.3f, 1.0f, BASE_DOOR_TIME-1.5f, SOPER_CONTINUE); m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.3f, 1.0f, SOPER_STOP); m_phase = ABP_CLOSE; m_progress = 0.0f; m_speed = 1.0f/BASE_DOOR_TIME; } } if ( m_phase == ABP_CLOSE ) { if ( m_progress < 1.0f ) { angle = -(1.0f-m_progress)*124.0f*Math::PI/180.0f; for ( i=0 ; i<8 ; i++ ) { m_object->SetAngleZ(1+i, Math::PI/2.0f+angle); } } else { for ( i=0 ; i<8 ; i++ ) { m_object->SetAngleZ(1+i, Math::PI/2.0f); } m_bMotor = true; // lights the jet engine // Shock of the closing doors. max = static_cast<int>(20.0f*m_engine->GetParticleDensity()); for ( i=0 ; i<max ; i++ ) { angle = Math::Rand()*Math::PI*2.0f; p = Math::RotatePoint(angle, 32.0f); pos = m_pos; pos.x += p.x; pos.z += p.y; pos.y += 85.0f; speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = Math::Rand()*3.0f+3.0f; dim.y = dim.x; time = Math::Rand()*1.0f+1.0f; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTICRASH, time); } m_sound->Play(SOUND_BOUM, m_object->GetPosition(0)); m_soundChannel = -1; m_bOpen = false; m_phase = ABP_TOWAIT; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == ABP_TOWAIT ) { if ( m_progress < 1.0f ) { if ( m_soundChannel == -1 ) { m_soundChannel = m_sound->Play(SOUND_FLY, m_posSound, 0.0f, 0.5f, true); m_sound->AddEnvelope(m_soundChannel, 1.0f, 0.5f, 2.0f, SOPER_CONTINUE); m_sound->AddEnvelope(m_soundChannel, 0.3f, 2.0f, BASE_TAKO_TIME, SOPER_STOP); } vibCir.z = sinf(m_time*Math::PI*19.01f)*(Math::PI/400.0f); vibCir.x = sinf(m_time*Math::PI*19.53f)*(Math::PI/400.0f); vibCir.y = 0.0f; vibCir *= m_progress*1.0f; m_object->SetCirVibration(vibCir); if ( m_lastParticle+m_engine->ParticleAdapt(0.05f) <= m_time ) { m_lastParticle = m_time; // Particles are ejected from the reactor. pos = m_object->GetPosition(0); pos.y += 6.0f; speed.x = (Math::Rand()-0.5f)*160.0f; speed.z = (Math::Rand()-0.5f)*160.0f; speed.y = -(Math::Rand()*10.0f+10.0f); dim.x = Math::Rand()*2.0f+2.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 2.0f, 10.0f, 2.0f); } m_engine->SetFogStart(m_fogStart+(0.9f-m_fogStart)*m_progress); } else { m_engine->SetFogStart(0.9f); m_phase = ABP_TAKEOFF; m_progress = 0.0f; m_speed = 1.0f/BASE_TAKO_TIME; } } if ( m_phase == ABP_TAKEOFF ) { if ( m_progress < 1.0f ) { pos = m_pos; pos.y += powf(m_progress, 2.0f)*600.0f; m_object->SetPosition(0, pos); MoveCargo(); // all cargo moves vibCir.z = sinf(m_time*Math::PI*19.01f)*(Math::PI/400.0f); vibCir.x = sinf(m_time*Math::PI*19.53f)*(Math::PI/400.0f); vibCir.y = 0.0f; m_object->SetCirVibration(vibCir); pos = m_pos; pos.x -= 110.0f+m_progress*250.0f; m_terrain->AdjustToFloor(pos); pos.y += 10.0f; m_camera->SetScriptEye(pos); pos = m_object->GetPosition(0); pos.y += 50.0f; m_camera->SetScriptLookat(pos); m_engine->SetFocus(1.0f+m_progress); if ( m_lastParticle+m_engine->ParticleAdapt(0.10f) <= m_time ) { m_lastParticle = m_time; // Dust thrown to the ground. pos = m_pos; pos.x += (Math::Rand()-0.5f)*10.0f; pos.z += (Math::Rand()-0.5f)*10.0f; angle = Math::Rand()*(Math::PI*2.0f); dist = (1.0f-m_progress)*50.0f; p = Math::RotatePoint(angle, dist); speed.x = p.x; speed.z = p.y; speed.y = 0.0f; dim.x = (Math::Rand()*10.0f+10.0f)*(1.0f-m_progress); dim.y = dim.x; if ( dim.x >= 1.0f ) { m_particle->CreateParticle(pos, speed, dim, Gfx::PARTICRASH, 2.0f, 0.0f, 2.0f); } // Particles are ejected from the reactor. pos = m_object->GetPosition(0); pos.y += 6.0f; speed.x = (Math::Rand()-0.5f)*40.0f; speed.z = (Math::Rand()-0.5f)*40.0f; time = 5.0f+150.0f*m_progress; speed.y = -(Math::Rand()*time+time); time = 2.0f+m_progress*12.0f; dim.x = Math::Rand()*time+time; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 2.0f, 10.0f, 2.0f); // Black smoke from the reactor. pos = m_object->GetPosition(0); pos.y += 3.0f; speed.x = (Math::Rand()-0.5f)*10.0f*(4.0f-m_progress*3.0f); speed.z = (Math::Rand()-0.5f)*10.0f*(4.0f-m_progress*3.0f); speed.y = 0.0f; dim.x = Math::Rand()*20.0f+20.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTISMOKE3, 10.0f, 0.0f, 2.0f); } } else { m_soundChannel = -1; newEvent.type = EVENT_WIN; m_eventQueue->AddEvent(newEvent); m_phase = ABP_WAIT; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == ABP_PORTICO_MOVE ) // advance of the gate? { if ( m_progress < 1.0f ) { pos = m_object->GetPosition(0); pos.z -= event.rTime*5.0f; m_object->SetPosition(0, pos); MoveCargo(); // all cargo moves } else { m_phase = ABP_PORTICO_WAIT1; m_progress = 0.0f; m_speed = 1.0f/1.0f; } } if ( m_phase == ABP_PORTICO_WAIT1 ) // expectation the gate? { if ( m_progress >= 1.0f ) { m_phase = ABP_PORTICO_DOWN; m_progress = 0.0f; m_speed = 1.0f/BASE_PORTICO_TIME_DOWN; } } if ( m_phase == ABP_PORTICO_DOWN ) // down the gate? { if ( m_progress < 1.0f ) { pos = m_object->GetPosition(0); pos.y -= event.rTime*(10.0f/BASE_PORTICO_TIME_DOWN); m_object->SetPosition(0, pos); MoveCargo(); // all cargo moves } else { // Impact with the ground. max = static_cast<int>(50.0f*m_engine->GetParticleDensity()); for ( i=0 ; i<max ; i++ ) { angle = Math::Rand()*(Math::PI*2.0f); p = Math::RotatePoint(angle, 46.0f); pos = m_pos; pos.x += p.x; pos.z += p.y; speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = Math::Rand()*10.0f+10.0f; dim.y = dim.x; time = Math::Rand()*2.0f+1.5f; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTICRASH, time, 0.0f, 2.0f); } m_phase = ABP_PORTICO_WAIT2; m_progress = 0.0f; m_speed = 1.0f/1.0f; } } if ( m_phase == ABP_PORTICO_WAIT2 ) // expectation the gate? { if ( m_progress >= 1.0f ) { m_phase = ABP_PORTICO_OPEN; m_progress = 0.0f; m_speed = 1.0f/BASE_PORTICO_TIME_OPEN; } } if ( m_phase == ABP_PORTICO_OPEN ) // opening the gate? { if ( m_progress < 1.0f ) { } else { m_phase = ABP_OPEN; m_progress = 0.0f; m_speed = 1.0f/2.0f; } } if ( m_phase == ABP_TRANSIT_MOVE ) // transit in space? { if ( m_progress < 1.0f ) { pos = m_object->GetPosition(0); pos.x += event.rTime*(2000.0f/BASE_TRANSIT_TIME); m_object->SetPosition(0, pos); pos.x += 60.0f; m_camera->SetScriptLookat(pos); } else { m_object->SetAngleZ(0, 0.0f); m_param = PARAM_LANDING; m_phase = ABP_START; m_progress = 0.0f; m_speed = 1.0f/1.0f; EndTransit(); if ( m_soundChannel != -1 ) { m_sound->FlushEnvelope(m_soundChannel); m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.8f, 0.01f, SOPER_STOP); m_soundChannel = -1; } goto begin; } } if ( m_bMotor ) { if ( m_lastMotorParticle+m_engine->ParticleAdapt(0.02f) <= m_time ) { m_lastMotorParticle = m_time; mat = m_object->GetWorldMatrix(0); if ( event.rTime == 0.0f ) { vSpeed = 0.0f; } else { pos = m_object->GetPosition(0); if ( m_phase == ABP_TRANSIT_MOVE ) { vSpeed = (pos.x-iPos.x)/event.rTime; } else { vSpeed = (pos.y-iPos.y)/event.rTime; } if ( vSpeed < 0.0f ) vSpeed *= 1.5f; } pos = Math::Vector(0.0f, 6.0f, 0.0f); speed.x = (Math::Rand()-0.5f)*4.0f; speed.z = (Math::Rand()-0.5f)*4.0f; speed.y = vSpeed*0.8f-(8.0f+Math::Rand()*6.0f); speed += pos; pos = Transform(*mat, pos); speed = Transform(*mat, speed); speed -= pos; dim.x = 4.0f+Math::Rand()*4.0f; dim.y = dim.x; m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIBASE, 3.0f, 0.0f, 0.0f); if ( m_phase == ABP_TRANSIT_MOVE ) { speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = 12.0f; dim.y = dim.x; pos = Math::Vector(0.0f, 7.0f, 0.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 1.0f, 0.0f, 0.0f); speed = Math::Vector(0.0f, 0.0f, 0.0f); dim.x = 4.0f; dim.y = dim.x; pos = Math::Vector(42.0f, 0.0f, 17.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 0.5f, 0.0f, 0.0f); pos = Math::Vector(17.0f, 0.0f, 42.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 0.5f, 0.0f, 0.0f); pos = Math::Vector(42.0f, 0.0f, -17.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 0.5f, 0.0f, 0.0f); pos = Math::Vector(17.0f, 0.0f, -42.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 0.5f, 0.0f, 0.0f); pos = Math::Vector(-42.0f, 0.0f, 17.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 0.5f, 0.0f, 0.0f); pos = Math::Vector(-17.0f, 0.0f, 42.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 0.5f, 0.0f, 0.0f); pos = Math::Vector(-42.0f, 0.0f, -17.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 0.5f, 0.0f, 0.0f); pos = Math::Vector(-17.0f, 0.0f, -42.0f); pos.x += (Math::Rand()-0.5f)*2.0f; pos.z += (Math::Rand()-0.5f)*2.0f; pos = Transform(*mat, pos); m_particle->CreateParticle(pos, speed, dim, Gfx::PARTIGAS, 0.5f, 0.0f, 0.0f); pos = Math::Vector(42.0f, -2.0f, 17.0f); pos = Transform(*mat, pos); m_particle->SetPosition(m_partiChannel[0], pos); pos = Math::Vector(17.0f, -2.0f, 42.0f); pos = Transform(*mat, pos); m_particle->SetPosition(m_partiChannel[1], pos); pos = Math::Vector(42.0f, -2.0f, -17.0f); pos = Transform(*mat, pos); m_particle->SetPosition(m_partiChannel[2], pos); pos = Math::Vector(17.0f, -2.0f, -42.0f); pos = Transform(*mat, pos); m_particle->SetPosition(m_partiChannel[3], pos); pos = Math::Vector(-42.0f, -2.0f, 17.0f); pos = Transform(*mat, pos); m_particle->SetPosition(m_partiChannel[4], pos); pos = Math::Vector(-17.0f, -2.0f, 42.0f); pos = Transform(*mat, pos); m_particle->SetPosition(m_partiChannel[5], pos); pos = Math::Vector(-42.0f, -2.0f, -17.0f); pos = Transform(*mat, pos); m_particle->SetPosition(m_partiChannel[6], pos); pos = Math::Vector(-17.0f, -2.0f, -42.0f); pos = Transform(*mat, pos); m_particle->SetPosition(m_partiChannel[7], pos); } } } if ( m_soundChannel != -1 ) { pos = m_engine->GetEyePt(); m_sound->Position(m_soundChannel, pos); } return true; }
Benchmark::Benchmark(float testtime) : Window(5,5,300,170,"Benchmark") { listener = NULL; CreateInterface(); Start(testtime); }