void TestGLCanvas::OnKeyDown(wxKeyEvent& event) { float angle = 5.0; switch ( event.GetKeyCode() ) { case WXK_RIGHT: Spin( 0.0, -angle ); break; case WXK_LEFT: Spin( 0.0, angle ); break; case WXK_DOWN: Spin( -angle, 0.0 ); break; case WXK_UP: Spin( angle, 0.0 ); break; case WXK_SPACE: if ( m_spinTimer.IsRunning() ) m_spinTimer.Stop(); else m_spinTimer.Start( 25 ); break; default: event.Skip(); return; } }
void wxGridCellNumberEditor::BeginEdit(int row, int col, wxGrid* grid) { // first get the value wxGridTableBase *table = grid->GetTable(); if ( table->CanGetValueAs(row, col, wxGRID_VALUE_NUMBER) ) { m_value = table->GetValueAsLong(row, col); } else { m_value = 0; wxString sValue = table->GetValue(row, col); if (! sValue.ToLong(&m_value) && ! sValue.empty()) { wxFAIL_MSG( wxT("this cell doesn't have numeric value") ); return; } } #if wxUSE_SPINCTRL if ( HasRange() ) { Spin()->SetValue((int)m_value); Spin()->SetFocus(); } else #endif { DoBeginEdit(GetString()); } }
void CObject::UpdateMovement (void) { if (info.nType == OBJ_MARKER) RotateMarker (); switch (info.movementType) { case MT_NONE: break; //this doesn't move case MT_PHYSICS: DoPhysicsSim (); lightManager.SetPos (OBJ_IDX (this)); #if 1 RequestEffects (MOVE_LIGHTNINGS); #else lightningManager.MoveForObject (this); #endif if (info.nType == OBJ_PLAYER) UpdateShipSound (); break; //move by physics case MT_SPINNING: Spin (); break; } }
/* * Calibrate the delay loop. * This will initialize s_spinCountPerTick, which indicates * how many iterations of the loop are executed per timer tick. */ static void Calibrate_Delay(void) { Disable_Interrupts(); /* Install temporarily interrupt handler */ Install_IRQ(TIMER_IRQ, &Timer_Calibrate); Enable_IRQ(TIMER_IRQ); Enable_Interrupts(); /* Wait a few ticks */ while (g_numTicks < CALIBRATE_NUM_TICKS) ; /* * Execute the spin loop. * The temporary interrupt handler will overwrite the * loop counter when the next tick occurs. */ Spin(INT_MAX); Disable_Interrupts(); /* * Mask out the timer IRQ again, * since we will be installing a real timer interrupt handler. */ Disable_IRQ(TIMER_IRQ); Enable_Interrupts(); }
void CPartSnowFlake::Think( float flTime ) { if( m_flBrightness < 130.0 && !m_bTouched ) m_flBrightness += 4.5; Fade( flTime ); Spin( flTime ); if( m_flSpiralTime <= gEngfuncs.GetClientTime() ) { m_bSpiral = !m_bSpiral; m_flSpiralTime = gEngfuncs.GetClientTime() + UTIL_RandomLong( 2, 4 ); } else { } if( m_bSpiral && !m_bTouched ) { const float flDelta = flTime - g_Environment.GetOldTime(); const float flSpin = sin( flTime * 5.0 + reinterpret_cast<int>( this ) ); m_vOrigin = m_vOrigin + m_vVelocity * flDelta; m_vOrigin.x += ( flSpin * flSpin ) * 0.3; } else { CalculateVelocity( flTime ); } CheckCollision( flTime ); }
int main() { Init_ADC(); ConsoleInit_Serial(); WriteByte((char) 0xB7); int i; while (1) { int frontleft = Get_ADC_Val("P15"); int backleft = Get_ADC_Val("P18"); ConsoleWrite((char)frontleft); ConsoleWrite((char)backleft); if (frontleft > (backleft + 200)) { Spin(-0.5f); } if (backleft > (frontleft + 200)) { Spin(0.5f); } Forward(0.1f); } }
void wxGridCellNumberEditor::Reset() { #if wxUSE_SPINCTRL if ( HasRange() ) { Spin()->SetValue((int)m_value); } else #endif { DoReset(GetString()); } }
int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "usage: cpu <string>\n"); exit(1); } char *str = argv[1]; while (1) { printf("%s\n", str); Spin(1); } return 0; }
/* * Spin for at least given number of microseconds. * FIXME: I'm sure this implementation leaves a lot to * be desired. */ void Micro_Delay(int us) { int num = us * s_spinCountPerTick; int denom = US_PER_TICK; int numSpins = num / denom; int rem = num % denom; if (rem > 0) ++numSpins; Debug("Micro_Delay(): num=%d, denom=%d, spin count = %d\n", num, denom, numSpins); Spin(numSpins); }
int main(int argc, char *argv[]) { int *p = malloc(sizeof(int)); assert(p != NULL); printf("(%d) memory address of p: %08x\n", getpid(), (unsigned) p); *p = 0; while(1) { Spin(1); *p = *p + 1; printf("(%d) p: %d\n", getpid(), *p); } return 0; }
// update the trackball state using the current mouse state void Trackball::Update() { V3f *v; // SPIN+DRAG (first two buttons) translates the origin of rotation if (mouse.buttonsPressed == SPIN+DRAG) { v = &p3f_origin; mouse.buttonsPressed = DRAG; } else v = &v3f_trans; // If the user drags the mouse, Spin or [O]Trans are updated. If no // mouse buttons are pressed, just keep on applying the previous spin // rotation, over and over. switch (mouse.buttonsPressed) { case SPIN: Spin(); // updates Spin, which we then apply. qRot = qSpin * qRot; isChanged = true; break; case DRAG: //qRot = qSpin * qRot; *v += V3f(mouse.dx, mouse.dy, 0.); isChanged = true; break; case ZOOM: //qRot = qSpin * qRot; scale *= 1+.001*(mouse.du+mouse.dv); isChanged = true; break; case SPIN+ZOOM: v3f_trans (0,0,0); qSpin(1,0,0,0); p3f_origin(0,0,0); qRot (1,0,0,0); break; case DRAG+ZOOM: scale=1; break; case SPIN+DRAG+ZOOM: v3f_trans (0,0,0); qSpin(1,0,0,0); p3f_origin(0,0,0); qRot (1,0,0,0); scale=1; break; default: //qRot = qSpin * qRot; break; } transformed = !isChanged; } // Update
bool wxGridCellNumberEditor::EndEdit(int WXUNUSED(row), int WXUNUSED(col), const wxGrid* WXUNUSED(grid), const wxString& oldval, wxString *newval) { long value = 0; wxString text; #if wxUSE_SPINCTRL if ( HasRange() ) { value = Spin()->GetValue(); if ( value == m_value ) return false; text.Printf(wxT("%ld"), value); } else // using unconstrained input #endif // wxUSE_SPINCTRL { text = Text()->GetValue(); if ( text.empty() ) { if ( oldval.empty() ) return false; } else // non-empty text now (maybe 0) { if ( !text.ToLong(&value) ) return false; // if value == m_value == 0 but old text was "" and new one is // "0" something still did change if ( value == m_value && (value || !oldval.empty()) ) return false; } } m_value = value; if ( newval ) *newval = text; return true; }
// return the value in the spin control if it is there (the text control otherwise) wxString wxGridCellNumberEditor::GetValue() const { wxString s; #if wxUSE_SPINCTRL if ( HasRange() ) { long value = Spin()->GetValue(); s.Printf(wxT("%ld"), value); } else #endif { s = Text()->GetValue(); } return s; }
task main() { waitForStart(); while(true) { getJoystickSettings(joystick); Drive(Left, Right); // joystick1 drive Arm(Lift); // joystick2 arm Spin(); // joystick2 basket spin FlagSpin(); // joystick2 and 1 flag AtonAarm(); // joystick2 aton arm Wrist(); // joystick2 wrist Assist(assist); if (joy2Btn(10)) // arm speed control { // starts slow i = i + 1; wait1Msec(500); } } }
bool hhSlots::HandleSingleGuiCommand(idEntity *entityGui, idLexer *src) { idToken token; if (!src->ReadToken(&token)) { return false; } if (token == ";") { return false; } if (token.Icmp("spin") == 0) { BecomeActive(TH_MISC3); StartSound( "snd_spin", SND_CHANNEL_ANY ); Spin(); } else if (token.Icmp("incbet") == 0) { IncBet(); } else if (token.Icmp("decbet") == 0) { DecBet(); } else if (token.Icmp("reset") == 0) { Reset(); } else if (token.Icmp("restart") == 0) { bCanSpin = 1; bCanIncBet = 1; bCanDecBet = 1; PlayerCredits = spawnArgs.GetInt("credits"); Bet = PlayerBet = 1; UpdateView(); } else { src->UnreadToken(&token); return false; } return true; }
LRESULT Cube_Textured::CubeInputProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { LRESULT result = 0; switch (message) { case WM_LBUTTONDOWN: { mouseLDown = true; mouseStart.x = GET_X_LPARAM(lParam); mouseStart.y = GET_Y_LPARAM(lParam); result = WM_LBUTTONDOWN; } break; case WM_LBUTTONUP: { mouseLDown = false; result = WM_LBUTTONUP; } break; case WM_MOUSEMOVE: { if (mouseLDown) { POINT mouseCurrent; mouseCurrent.x = GET_X_LPARAM(lParam); mouseCurrent.y = GET_Y_LPARAM(lParam); int deltaX = mouseCurrent.x - mouseStart.x; int deltaY = mouseCurrent.y - mouseStart.y; Spin(deltaX / 100.f, deltaY / 100.f); mouseStart = mouseCurrent; result = WM_MOUSEMOVE; } } break; } return result; }
// Read takes an iHandle, an address and a length and return the actual // Length read. Returns -1 if the operaction failed. CICell Read(CICell ihandle, long addr, long length) { CIArgs ciArgs; long actual; long ret; ciArgs.service = "read"; ciArgs.nArgs = 3; ciArgs.nReturns = 1; ciArgs.args.read.ihandle = ihandle; ciArgs.args.read.addr = addr; ciArgs.args.read.length = length; ret = CallCI(&ciArgs); if (ret != 0) return kCIError; actual = ciArgs.args.read.actual; // Spin the wait cursor. Spin(); return actual; }
void Photon::HopDropSpinInTissue(MCMLModel * model) { /* Set a step size, move the photon, drop some weight, choose a new photon direction for propagation. When a step size is long enough for the photon to hit an interface, this step is divided into two steps. First, move the photon to the boundary free of absorption or scattering, then decide whether the photon is reflected or transmitted. Then move the photon in the current or transmission medium with the unfinished stepsize to interaction site. If the unfinished stepsize is still too long, repeat the above process. */ StepSizeInTissue(model); if (HitBoundary(model)) { Hop(); // move to boundary plane CrossOrNot(model); } else { Hop(); Drop(model); Spin(model->layerObj.layer[layer].g); } }
void vtkInteractorStyleQuench::OnMouseMove() { _mouse_moved = true; vtkRenderWindowInteractor *rwi = this->Interactor; int x = rwi->GetEventPosition()[0]; int y = rwi->GetEventPosition()[1]; int dx = rwi->GetEventPosition()[0] - rwi->GetLastEventPosition()[0]; int dy = rwi->GetEventPosition()[1] - rwi->GetLastEventPosition()[1]; this->FindPokedRenderer(x,y); //If we are still drawing a gesture, continue doing so if(_interaction_mode == INTERACTION_DRAW_GESTURE) { _GestureInteractor->AddPoint(x,y); //NotifyAllListeners(PEvent ( new EventRefreshViz(true) ) ); //CurrentRenderer->GetRenderWindow()->Render(); return; } if (_interaction_mode == INTERACTION_PATHWAYS) { _pathwayViz->OnMouseMove(x, abs(y)); } /* if(_left_button_down && _pathwayViz->OnMouseMove(x,abs(y))) { cerr << "mode selector moved." << endl; return; //Mode selector panel moved }*/ if (_interaction_mode == INTERACTION_ROI_EDIT) { _voiEditor->OnMouseMove(x,abs(y)); } /* if(_editing_voi && (_left_button_down || _right_button_down) && _voiEditor->OnMouseMove(x,abs(y))) return; //ROI editing in process. */ else { switch (this->State) { case VTKIS_ROTATE: Rotate(); InvokeEvent(vtkCommand::InteractionEvent, NULL); break; case VTKIS_PAN: Pan(); InvokeEvent(vtkCommand::InteractionEvent, NULL); break; case VTKIS_DOLLY: { double *center = CurrentRenderer->GetCenter(); double dyf = MotionFactor * (double)(dy) / (double)(center[1]); double scale = pow((double)1.1, dyf); Dolly(scale); _voiViz->Dolly(scale); CurrentRenderer->GetRenderWindow()->Render(); } InvokeEvent(vtkCommand::InteractionEvent, NULL); break; case VTKIS_SPIN: Spin(); InvokeEvent(vtkCommand::InteractionEvent, NULL); //this->frame->RefreshViz (); break; //default: // if(_Scene->GetPathwayViz()->PickManipulationTools(x,y) != -1) // frame->RefreshViz(); // break; } } }
//メソッド:void 競技走行する() void ExtraStageLookUp::ExtraRun() { /* 停止部分 */ int stopTime = m_pDeviceInterface->m_pCClock->now(); DV dv_now; while(1){ dv_now = m_pDeviceValueGet->DeviceValueGetter(); if(m_pDeviceInterface->m_pCClock->now() - stopTime < 1500){ dv_now = m_pRunningCalculation->RunningCalculate(dv_now, 0); m_pMotorDrive->TailMotorDrive(3); ev3_lcd_draw_string("EXrun section0start", 0, 70); } else if(m_pDeviceInterface->m_pCClock->now() - stopTime < 2000){ dv_now.GYRO_OFFSET = -10; dv_now = m_pRunningCalculation->RunningCalculate(dv_now, 0); m_pMotorDrive->TailMotorDrive(80); ev3_lcd_draw_string("EXrun section0 < 3500", 0, 80); } else{ break; } m_pMotorDrive->LRMotorDrive(dv_now.Lmotor_pwm, dv_now.Rmotor_pwm); m_pDeviceInterface->m_pCClock->sleep(3); /* 4msec周期起動 */ } ev3_lcd_draw_string("EXrun fin", 0, 90); // float fTailAngle = m_fTailAngleStand; // しっぽ立ち上がり int nLmotor = 20; int nRmotor = 20; // int16_t nDistance = 9999; m_uStartTime = m_pDeviceInterface->m_pCClock->now(); // 開始時間 //ログ出力 char* cLogBuff = m_pUIGet->GetBlueT()->pcLogBuff; sprintf(cLogBuff,"ExtraStageLookUp::ExtraRun go 1: %lu,%d,%d,sizeof(int)=%d\n", GetElapsedTime(), nLmotor, nRmotor, sizeof(int) ); m_pUIGet->WriteLog(cLogBuff); //BBBBBBBBBBB // テストデータ取得 // Spin( 'N', 3600, fTailAngle ); // // PauseEt( 3000, fTailAngle); // ポーズ // // // 5000mm 進む // MoveDist( 'N', 5000, fTailAngle, nLmotor, nRmotor ); // PauseEt(3000, fTailAngle); // ポーズ //BBBBBBBBBBB // PauseEt(500, fTailAngle); // ポーズ // // 0 しっぽを出しながら止まる // MoveDist( 'N', 100, fTailAngle, 5 ); // ① → //ゲートまで近づく // GoGate('R', fTailAngle); GoGate('N', fTailAngle); PauseEt(500, fTailAngle); // ポーズ // ② → //走行体をリンボー fTailAngle = Limbo( 'N', fTailAngle); PauseEt(500, fTailAngle); // ポーズ // ゲートを潜る為、230mm 進む MoveDist( 'N', 230, fTailAngle, 10 ); PauseEt(500, fTailAngle); // ポーズ // ③ U // Uターン 180度回転 Spin(185, fTailAngle); PauseEt(500, fTailAngle); // ポーズ // 戻り // ③ ← // ゲートを潜る、330mm 戻る MoveDist( 'N', 330, fTailAngle, 10 ); PauseEt(500, fTailAngle); // ポーズ // ④ U // 再度Uターン -180度回転 Spin(-185, fTailAngle); PauseEt(500, fTailAngle); // ポーズ // ④ → // ゲートを潜る、360mm 進む MoveDist( 'N', 360, fTailAngle, 20 ); // ⑤ → // トレースを可能とする為に上体を起こす fTailAngle = StandUpTail(fTailAngle); // しっぽを立てる PauseEt(2222, fTailAngle); // ポーズ PauseEt(2222, fTailAngle); // ポーズ // // // トレースを確実に行う為に故意に右側にはみ出す // Spin(-10, fTailAngle); // -10度回転 // PauseEt(500, fTailAngle); // ポーズ // MoveDist( 'N', 40, fTailAngle, 10 ); // 3cm進む // PauseEt(500, fTailAngle); // ポーズ // ⑥ → // ガレージまで走る!! // 距離 m_nFinalRunDist // ■■<最終調整が必要> // トレース走行 // MoveDist( 'R', m_nFinalRunDist, fTailAngle, 10 ); MoveDist( 'N', m_nFinalRunDist, fTailAngle, 10 ); MoveDist( 'N', 50, fTailAngle, 5 ); // 急停止すると倒れる場合があるので減速走行 // ゲートイン fTailAngle = StandUpTailFine(fTailAngle); // しっぽを思い切り立てる PauseEt(4000, fTailAngle); // ポーズ // ゲートに届かなかった場合を考慮して、微速前進とポーズを繰り返す // ※ゲートイン判定が出た後は、ゲートにぶつかってもお構いなしなはず for( int i=0 ; i< 5 ; i++ ){ MoveDist( 'N', 30, fTailAngle, 5 ); // ゲートまで再度トライ PauseEt(4000, fTailAngle); // ポーズ } MoveDist( 'N', 30, fTailAngle, 5 ); // ゲートまで再度トライ // Ending(); PauseEt(5000, fTailAngle); // ポーズ }
/////////////////////////////////////////////////// // Quagmire - that case above getting to long and spells are gonna have a lot of cases of their own // Cofruben - Reorganised this a little. void Mob::SpellEffect(Mob* caster, Spell* spell, int8 caster_level, bool partialResist) { //Spells not loaded! if(!spells_handler.SpellsLoaded()) return; //Spell not loaded! if(!spell) return; //Yeahlight: Caster was not supplied if(!caster) return; int i = 0; const int16 spell_id = spell->GetSpellID(); const char* teleport_zone = spell->GetSpellTeleportZone(); // 1. Is it a buff? If so, handle its time based effects. if (spell->IsBuffSpell()) spells_handler.HandleBuffSpellEffects(caster, this, spell); // 2. Handle its single-time effect. for (i = 0; i < EFFECT_COUNT; i++) { TSpellEffect effect_id = spell->GetSpellEffectID(i); if(effect_id == SE_Blank || effect_id == 0xFF) continue; int8 formula = spell->GetSpellFormula(i); sint16 base = spell->GetSpellBase(i); sint16 max = spell->GetSpellMax(i); sint32 amount = spells_handler.CalcSpellValue(spell, i, caster_level); //Yeahlight: This is an NPC and had a detremental spell casted upon it if(this->IsNPC() && (spell->IsDetrimentalSpell() || spell->IsUtilitySpell())) { CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): aggroing %s because of the spell effect!", spell->GetSpellName(), this->GetName()); //Yeahlight: Generate hate based on the spells's effect type sint16 tempHate = GetSpellHate(effect_id, spell->GetMinLevel(), false, amount); if(tempHate) { this->CastToNPC()->AddToHateList(caster, 0, tempHate); } } switch(effect_id) { case SE_CurrentHP: case SE_CurrentHPOnce: { sint32 OldHP = this->GetHP(); sint32 damage = amount; //Yeahlight: Partial resist calculations if(partialResist) { damage = damage / 2; damage = damage * (float)((float)(rand()%90 + 10) / 100.00f); if(caster->IsClient() && caster->CastToClient()->GetDebugMe()) caster->Message(YELLOW, "Debug: Your direct damage spell resist has been upgrade to a partial resist."); } this->ChangeHP(caster, damage, spell_id); sint32 NewHP = this->GetHP(); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You changed %s's hp by %+i.", spell->GetSpellName(), this->GetName(), damage); break; } case SE_MovementSpeed: { //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Movement Speed spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_AttackSpeed: { //Yeahlight: There should not be any work to be done here CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Attack Speed spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Invisibility: { this->SetInvisible(true); //Yeahlight: Castee has a pet; remove it if(GetPet()) { Mob* myPet = GetPet(); //Yeahlight: Castee's pet is an NPC if(myPet->IsNPC()) { //Yeahlight: Castee's pet is a charmed NPC if(myPet->CastToNPC()->IsCharmed()) { myPet->CastToNPC()->BuffFadeByEffect(SE_Charm); } //Yeahlight: Castee's pet is a summoned NPC else { myPet->Depop(); } } //Yeahlight: Castee's pet is a charmed PC else if(myPet->IsClient() && myPet->CastToClient()->IsCharmed()) { myPet->CastToClient()->BuffFadeByEffect(SE_Charm); } } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an invisibility spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_CurrentMana: { SetMana(GetMana() + amount); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a mana recovery spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_AddFaction: { //Yeahlight: Only continue if the target is an NPC and the caster is a PC if(this->IsNPC() && caster->IsClient()) { caster->CastToClient()->SetCharacterFactionLevelModifier(this->CastToNPC()->GetPrimaryFactionID(), amount); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an add faction spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Stun: { if (IsClient()) { CastToClient()->Stun(base); } else if(IsNPC()) { //Yeahlight: NPC is immune to stun effects if(CastToNPC()->GetCannotBeStunned()) { if(caster->IsClient()) { caster->Message(RED, "Your target is immune to the stun portion of this effect"); } } else { CastToNPC()->Stun(base); } } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a stun spell, amount: %i.", spell->GetSpellName(), base); break; } case SE_Charm: { //Yeahlight: Can only charm a non-pet and the caster may only have one pet if(this->GetOwner() == NULL && caster->GetPet() == NULL && caster != this) { //Yeahlight: Flag the NPC as a pet if(this->IsNPC()) { caster->SetPet(this); this->SetOwnerID(caster->GetID()); this->CastToNPC()->SetCharmed(true); this->SetPetOrder(SPO_Follow); if(caster->IsClient()) caster->CastToClient()->SendCharmPermissions(); this->CastToNPC()->WhipeHateList(); this->CastToNPC()->StartTaunting(); } else if(this->IsClient()) { if(caster->IsNPC()) { caster->SetPet(this); this->SetOwnerID(caster->GetID()); Mob* myTarget = caster->CastToNPC()->GetHateTop(); if(!myTarget) myTarget = caster->CastToMob(); this->SetTarget(myTarget); this->animation = 0; this->delta_heading = 0; this->delta_x = 0; this->delta_y = 0; this->delta_z = 0; this->SendPosUpdate(true, PC_UPDATE_RANGE, false); this->CastToClient()->charmPositionUpdate_timer->Start(200); this->CastToClient()->SetCharmed(true); this->SendAppearancePacket(this->GetID(), SAT_Position_Update, SAPP_Lose_Control, false); this->SetPetOrder(SPO_Follow); } else if(caster->IsClient()) { caster->SetPet(this); this->SetOwnerID(caster->GetID()); this->SetTarget(caster); this->animation = 0; this->delta_heading = 0; this->delta_x = 0; this->delta_y = 0; this->delta_z = 0; this->SendPosUpdate(true, PC_UPDATE_RANGE, false); this->CastToClient()->charmPositionUpdate_timer->Start(200); this->CastToClient()->SetCharmed(true); this->SendAppearancePacket(this->GetID(), SAT_Position_Update, SAPP_Lose_Control, false); this->SetPetOrder(SPO_Follow); caster->CastToClient()->SendCharmPermissions(); } } } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a charm spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Fear: { //Yeahlight: Victim is a PC if(this->IsClient()) { this->CastToClient()->SetFeared(true); this->SendAppearancePacket(this->GetID(), SAT_Position_Update, SAPP_Lose_Control, false); this->CastToClient()->GetFearDestination(GetX(), GetY(), GetZ()); } //Yeahlight: Victim is an NPC else if(this->IsNPC()) { this->CastToNPC()->SetFeared(true); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a fear spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Stamina: { CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a stamina spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_BindAffinity: { //Yeahlight: Target of the bind affinity spell is a client if(this->IsClient()) { this->CastToClient()->SetBindPoint(); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Bind Affinity spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Gate: { if(IsClient()) CastToClient()->GoToBind(); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a gate spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_CancelMagic: { for(int i = 0; i < 15; i++) { //Yeahlight: Buff must exist and the buff may not have any poison or disease counters if(buffs[i].spell && buffs[i].spell->IsValidSpell() && buffs[i].casterlevel <= (caster_level + base) && buffs[i].spell->GetDiseaseCounters() == 0 && buffs[i].spell->GetPoisonCounters() == 0) { this->BuffFadeBySlot(i, true); break; } } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a cancel magic spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_InvisVsUndead: { this->SetInvisibleUndead(true); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an Invis VS Undead spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_InvisVsAnimals: { this->SetInvisibleAnimal(true); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an Invis VS Animal spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Mez: { // Pinedepain // When a mezz spell is casted, we mesmerize this mob Mesmerize(); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a mesmerize spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_SummonItem: { if(this->IsClient()) { if(amount == 0) this->CastToClient()->SummonItem(base, 1); else this->CastToClient()->SummonItem(base, (amount > 20) ? 20 : amount); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a summon item spell: %i.", spell->GetSpellName(), base); break; } case SE_NecPet: case SE_SummonPet: { if (this->GetPetID() != 0) { Message(RED, "You\'ve already got a pet."); break; } this->MakePet(teleport_zone); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Summon pet / nec pet spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_DivineAura: { this->SetInvulnerable(true); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Divine Aura, amount: %i.", spell->GetSpellName(), amount); break; } case SE_ShadowStep: { //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Shadow Step spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Rune: { //Yeahlight: Flag entity with rune for damage calculations hasRuneOn = true; CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Rune spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Levitate: { this->SendAppearancePacket(0, SAT_Levitate, 2, true); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a levitate spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_SummonCorpse: { bool permit = false; Mob* corpseOwner = target; //Yeahlight: The target of this spell is not a PC or the caster is targeting themself if(!target || (target && !target->IsClient()) || target == this) { corpseOwner = this; permit = true; } //Yeahlight: Can only summon a PC's corpse if(corpseOwner && corpseOwner->IsClient()) { //Yeahlight: PCs must be grouped to summon a corpse if(!permit) { Group* targetGroup = entity_list.GetGroupByClient(corpseOwner->CastToClient()); Group* myGroup = NULL; if(this->IsClient()) myGroup = entity_list.GetGroupByClient(this->CastToClient()); //Yeahlight: Caster is in a group and they share the same group as the target if(myGroup != NULL && myGroup == targetGroup) permit = true; } //Yeahlight: Caster may proceed with the summon if(permit) { Corpse *corpse = entity_list.GetCorpseByOwner(corpseOwner->CastToClient()); //Yeahlight: Corpse has been located if(corpse) { corpse->Summon(corpseOwner->CastToClient(), caster->CastToClient(), true); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a summon corpse spell: %s.", spell->GetSpellName(), this->GetName()); } //Yeahlight: There is no corpse available else { //Yeahlight: Caster failed to locate his/her corpse if(caster == corpseOwner) { caster->Message(RED, "You do not have a corpse in this zone."); } //Yeahlight: Caster failed to locate their target's corpse else { caster->Message(RED, "Your target does not have a corpse in this zone."); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): Summon corpse: you can't sense the corpse: %i.", spell->GetSpellName()); } } else { //Yeahlight: TODO: This is not the correct message Message(RED, "You and your target must be in the same group to perform this action."); } } break; } case SE_Illusion: { SendIllusionPacket(base, GetDefaultGender(base, GetBaseGender()), GetTexture(), GetHelmTexture()); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an illusion spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Identify: { //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an identify spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_WipeHateList: { //Yeahlight: NOTE: Do NOT wipe the rampage list here; that never goes away until the mob resets if(this->IsNPC()) { //Yeahlight: TODO: I don't remember this message, look into this entity_list.MessageClose(this, true, DEFAULT_MESSAGE_RANGE, DARK_BLUE, "My mind fogs. Who are my friends? Who are my enemies?... it was all so clear a moment ago..."); this->CastToNPC()->WhipeHateList(); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a whipe hate list spell, amount: %i.", spell->GetSpellName(), amount); } break; } case SE_SpinTarget: { Spin(caster, spell); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a spin target spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_EyeOfZomm: { //Yeahlignt: Only produce eyes of zomm for PCs if(this->IsClient()) { if(this->CastToClient()->myEyeOfZomm == 0) MakeEyeOfZomm(this); else Message(RED, "You may only have one eye of zomm out at a time!"); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Eye Of Zomm spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_ReclaimPet: { //Yeahlight: Target of the spell is an uncharmed NPC, has an owner and the owner is the caster of the spell if(IsNPC() && CastToNPC()->IsCharmed() == false && GetOwnerID() && caster->GetID() == GetOwnerID()) { //Yeahlight: TODO: Research this formula caster->SetMana(caster->GetMana()+(GetLevel()*4)); if(caster->IsClient()) { caster->CastToClient()->SetPet(0); } SetOwnerID(0); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a reclaim pet spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_FeignDeath: { if(this->IsClient()) this->CastToClient()->FeignDeath(this->CastToClient()->GetSkill(ABJURATION)); break; } case SE_VoiceGraft: { //Yeahlight: Only allow voice graft to be casted on NPCs (we don't want PCs griefing other charmed PCs with /say) if(IsNPC() && caster->IsClient() && CastToNPC()->GetOwner() == caster) { caster->CastToClient()->SetVoiceGrafting(true); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a voice graft spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Revive: { //Yeahlight: Handled in client_process.cpp CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a revive spell, amount: %i, corpse: %s.", spell->GetSpellName(), amount, this->GetName()); break; } case SE_Teleport: { char teleport_zone_char[64]; if(this->IsClient()) strcpy(teleport_zone_char, teleport_zone); this->CastToClient()->MovePC(teleport_zone_char, spell->GetSpellBase(1), spell->GetSpellBase(0), spell->GetSpellBase(2), false, false); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a teleport spell to %s (%f, %f, %f).", spell->GetSpellName(), teleport_zone, spell->GetSpellBase(1), spell->GetSpellBase(0), spell->GetSpellBase(2)); break; } case SE_Translocate: { bool permit = false; Mob* translocatee = CastToMob(); //Enraged: The target of this spell is an NPC. //if(translocatee && !translocatee->IsClient()) //{ // //Enraged: TODO: This is not the correct message? // Message(RED, "You cannot cast that spell on your current target."); // break; //} //Enraged: The target of this spell is the caster. //TODO: Can players target themselves with translocate spells? if(translocatee && (translocatee == this)) permit = true; //Enraged: Check if the targetted client is in the casters group. //TODO: Translocate only worked on group players, right? if(!permit && translocatee) { Group* translocateeGroup = entity_list.GetGroupByClient(translocatee->CastToClient()); Group* casterGroup = NULL; if(this->IsClient()) casterGroup = entity_list.GetGroupByClient(this->CastToClient()); //Enraged: The translocatee is in a group and they share the same group as the target if(casterGroup != NULL && casterGroup == translocateeGroup) permit = true; } //Enraged: Target is clear to be translocated. if(permit) { CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a translocation spell on %s.", spell->GetSpellName(), translocatee->GetName()); //TODO: Translocate code here translocatee->CastToClient()->SendTranslocateConfirmation(caster, spell); } else { //The translocatee was not in the casters group. //Enraged: TODO: This is not the correct message Message(RED, "You can only cast that spell on players in your group."); } break; } case SE_InfraVision: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an infravision spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_UltraVision: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an ultravision spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_BindSight: CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a bind sight spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_SeeInvis: SetCanSeeThroughInvis(true); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a see invis spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_WaterBreathing: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted an water breathing spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_SenseDead: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a sense dead spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_SenseSummoned: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a sense summoned spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_TrueNorth: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a true north spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_SenseAnimals: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a sense animals spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_DamageShield: //Yeahlight: There should not be any work to be done here CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a damage shield spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_Sentinel: CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a sentinel spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_LocateCorpse: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a locate corpse spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_ModelSize: { //Yeahlight: Grow/Shrink float newSize = (GetSize() * (float)base) / 100.00f; //Yeahlight: Size of a gnome (minimum) if(newSize < 3) newSize = 3; //Yeahlight: Size of an ogre (maximum) else if(newSize > 9) newSize = 9; this->size = newSize; this->SendAppearancePacket(GetID(), SAT_Size, GetSize(), true); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a model size spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Root: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a root spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_Blind: //Yeahlight: Handled client side CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a blind spell, amount: %i.", spell->GetSpellName(), amount); break; case SE_DiseaseCounter: { //Yeahlight: Spell is a cure disease spell if(amount < 0) { //Yeahlight: Iterate through all the debuffs on the target and check for the chance to cure it for(int i = 0; i < 15; i++) { if(buffs[i].spell && buffs[i].diseasecounters) { buffs[i].diseasecounters = buffs[i].diseasecounters + amount; if(buffs[i].diseasecounters <= 0) BuffFadeBySlot(i, true); break; } } } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a disease counter spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_PoisonCounter: { //Yeahlight: Spell is a cure poison spell if(amount < 0) { //Yeahlight: Iterate through all the debuffs on the target and check for the chance to cure it for(int i = 0; i < 15; i++) { if(buffs[i].spell && buffs[i].poisoncounters) { buffs[i].poisoncounters = buffs[i].poisoncounters + amount; if(buffs[i].poisoncounters <= 0) BuffFadeBySlot(i, true); break; } } } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a poison counter spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_Calm: { //Yeahlight: Only add/remove hate from NPCs if(this->IsNPC()) { this->CastToNPC()->AddToHateList(caster, 0, amount); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a calm hate spell, amount: %i.", spell->GetSpellName(), amount); break; } case SE_WeaponProc: { Spell* spell = spells_handler.GetSpellPtr(base); //Yeahlight: Legit spell proc bonus found if(spell) SetBonusProcSpell(spell); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell name = %s): Weapon proc bonus of spell ID %i.", spell->GetSpellName(), base); break; } case SE_StopRain: { zone->zone_weather = 0; zone->weatherSend(); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::ApplySpellsBonuses(spell name = %s): You casted a stop rain spell, amount: %i.", spell->GetSpellName(), base); break; } case SE_CallOfHero: { //Yeahlight: Call of the Hero may only be used on PCs int32 zoneid = 0; if(this->IsClient()) this->CastToClient()->MovePC(zoneid, caster->GetX(), caster->GetY(), caster->GetZ(), false, true); else caster->Message(RED, "This spell may only be cast on players."); CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::ApplySpellsBonuses(spell name = %s): You casted a call of the hero spell, amount: %i.", spell->GetSpellName(), base); break; } case SE_CallPet: { //Yeahlight: This spell line may only be used on NPC pets if(GetPet() && GetPet()->IsNPC()) { GetPet()->CastToNPC()->GMMove(GetX(), GetY(), GetZ(), GetHeading()); GetPet()->pStandingPetOrder = SPO_Follow; } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::ApplySpellsBonuses(spell name = %s): You casted a call pet spell, amount: %i.", spell->GetSpellName(), base); break; } case SE_DeathSave: { //Yeahlight: Only apply divine intervention to players if(this->IsClient()) { sint16 successChance = 0; float baseChance = 0.00f; switch(base) { //Yeahlight: Death Pact (CLR: 51) case 1: { baseChance = 0.10f; break; } //Yeahlight: Divine Intervention (CLR: 60) case 2: { baseChance = 0.30f; break; } default: { baseChance = 0.10f; } } //Yeahlight: The target's CHA is calculated into the bonus save chance successChance = (((float)CastToClient()->GetCHA() * 0.0005f) + baseChance) * 100; //Yeahlight: The worst possible save chance is the spell's base chance if(successChance < baseChance) successChance = baseChance; else if(successChance > 100) successChance = 100; this->CastToClient()->SetDeathSave(successChance); } CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::ApplySpellsBonuses(spell name = %s): You casted a death save spell, amount: %i.", spell->GetSpellName(), base); break; } case SE_Succor: { //Yeahlight: There should be nothing to do here CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::ApplySpellsBonuses(spell name = %s): You casted a succor spell, amount: %i.", spell->GetSpellName(), base); break; } case 0xFE: case 0xFF: case SE_Harmony: case SE_ChangeFrenzyRad: case SE_Lull: case SE_TotalHP: case SE_ArmorClass: case SE_MagnifyVision: case SE_ATK: case SE_STR: case SE_DEX: case SE_AGI: case SE_STA: case SE_INT: case SE_WIS: case SE_CHA: case SE_ResistFire: case SE_ResistCold: case SE_ResistPoison: case SE_ResistDisease: case SE_ResistMagic: { // Buffs are handeled elsewhere break; } default: { CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): unknown effect (%i) for amount: %i.", spell->GetSpellName(), effect_id, amount); break; } } } if(this->IsClient()) this->CastToClient()->Save(); }
void TestGLCanvas::OnSpinTimer(wxTimerEvent& WXUNUSED(event)) { Spin(0.0, 4.0); }
void RepRap::Init() { // All of the following init functions must execute reasonably quickly before the watchdog times us out platform->Init(); gCodes->Init(); network->Init(); webserver->Init(); move->Init(); heat->Init(); #if SUPPORT_ROLAND roland->Init(); #endif #if SUPPORT_SCANNER scanner->Init(); #endif printMonitor->Init(); Platform::EnableWatchdog(); // do this after all init calls are made active = true; // must do this before we start the network, else the watchdog may time out platform->MessageF(HOST_MESSAGE, "%s Version %s dated %s\n", FIRMWARE_NAME, VERSION, DATE); // Run the configuration file const char *configFile = platform->GetConfigFile(); platform->Message(HOST_MESSAGE, "\nExecuting "); if (platform->GetMassStorage()->FileExists(platform->GetSysDir(), configFile)) { platform->MessageF(HOST_MESSAGE, "%s...", platform->GetConfigFile()); } else { platform->MessageF(HOST_MESSAGE, "%s (no configuration file found)...", platform->GetDefaultFile()); configFile = platform->GetDefaultFile(); } if (gCodes->RunConfigFile(configFile)) { while (gCodes->IsDaemonBusy()) { // GCodes::Spin will read the macro and ensure DoingFileMacro returns false when it's done Spin(); } platform->Message(HOST_MESSAGE, "Done!\n"); } else { platform->Message(HOST_MESSAGE, "Error, not found\n"); } processingConfig = false; // Enable network (unless it's disabled) network->Activate(); // Need to do this here, as the configuration GCodes may set IP address etc. if (!network->IsEnabled()) { platform->Message(HOST_MESSAGE, "Network disabled.\n"); } #ifndef __RADDS__ hsmci_set_idle_func(hsmciIdle); #endif platform->MessageF(HOST_MESSAGE, "%s is up and running.\n", FIRMWARE_NAME); fastLoop = FLT_MAX; slowLoop = 0.0; lastTime = platform->Time(); }
void hhSlots::Event_Spin() { Spin(); }