void wxTimeSpinCtrl::OnSpinDown(wxSpinEvent &ev) { #ifdef __WXMSW__ m_txt->SetFocus(); #endif DoSpin(-1); }
void wxTimeSpinCtrl::OnEditKey(wxKeyEvent &ev) { if (!ev.HasModifiers()) { switch(ev.GetKeyCode()) { case WXK_LEFT: { if (!ev.ShiftDown()) { int tp = GetTimePart() + 1; if (tp < 3 || (hasDay && tp == 3)) { Highlight(tp); return; } } break; } case WXK_RIGHT: { if (!ev.ShiftDown()) { int tp = GetTimePart() - 1; if (tp >= 0) { Highlight(tp); return; } } break; } case WXK_UP: DoSpin(1); return; break; case WXK_DOWN: DoSpin(-1); return; break; default: break; } } ev.Skip(); }
void CUnitScript::TickAnims(int deltaTime, AnimType type, std::list< std::list<AnimInfo*>::iterator >& doneAnims) { switch (type) { case AMove: { for (std::list<AnimInfo*>::iterator it = anims[type].begin(); it != anims[type].end(); ++it) { AnimInfo* ai = *it; // NOTE: we should not need to copy-and-set here, because // MoveToward/TurnToward/DoSpin modify pos/rot by reference float3 pos = pieces[ai->piece]->GetPosition(); if (MoveToward(pos[ai->axis], ai->dest, ai->speed / (1000 / deltaTime))) { ai->done = true; doneAnims.push_back(it); } pieces[ai->piece]->SetPosition(pos); unit->localModel->PieceUpdated(ai->piece); } } break; case ATurn: { for (std::list<AnimInfo*>::iterator it = anims[type].begin(); it != anims[type].end(); ++it) { AnimInfo* ai = *it; float3 rot = pieces[ai->piece]->GetRotation(); if (TurnToward(rot[ai->axis], ai->dest, ai->speed / (1000 / deltaTime))) { ai->done = true; doneAnims.push_back(it); } pieces[ai->piece]->SetRotation(rot); unit->localModel->PieceUpdated(ai->piece); } } break; case ASpin: { for (std::list<AnimInfo*>::iterator it = anims[type].begin(); it != anims[type].end(); ++it) { AnimInfo* ai = *it; float3 rot = pieces[ai->piece]->GetRotation(); if (DoSpin(rot[ai->axis], ai->dest, ai->speed, ai->accel, 1000 / deltaTime)) { ai->done = true; doneAnims.push_back(it); } pieces[ai->piece]->SetRotation(rot); unit->localModel->PieceUpdated(ai->piece); } } break; default: { } break; } }
/** * @brief Called by the engine when we are registered as animating. If we return -1 it means that * there is no longer anything animating * @param deltaTime int delta time to update * @return 0 if there are still animations going, -1 else */ int CUnitScript::Tick(int deltaTime) { std::vector<struct AnimInfo *> remove; for (std::list<struct AnimInfo *>::iterator it = anims.begin(); it != anims.end(); ) { struct AnimInfo *ai = *it; bool done = false; switch (ai->type) { case AMove: { float3 pos = pieces[ai->piece]->GetPosition(); done = MoveToward(pos[ai->axis], ai->dest, ai->speed / (1000 / deltaTime)); pieces[ai->piece]->SetPosition(pos); } break; case ATurn: { float3 rot = pieces[ai->piece]->GetRotation(); done = TurnToward(rot[ai->axis], ai->dest, ai->speed / (1000 / deltaTime)); pieces[ai->piece]->SetRotation(rot); } break; case ASpin: { float3 rot = pieces[ai->piece]->GetRotation(); done = DoSpin(rot[ai->axis], ai->dest, ai->speed, ai->accel, 1000 / deltaTime); pieces[ai->piece]->SetRotation(rot); } break; } // Queue for removal (UnblockAll may add new anims) if (done) { remove.push_back(ai); } ++it; } //Tell listeners to unblock? for (std::vector<struct AnimInfo *>::iterator it = remove.begin(); it != remove.end(); ++it) { UnblockAll(*it); //! NOTE: UnblockAll might result in new anims being added } for (std::vector<struct AnimInfo *>::iterator it = remove.begin(); it != remove.end(); ++it) { anims.remove(*it); delete *it; } return anims.empty() ? -1 : 0; }
/** * @brief Called by the engine when we are registered as animating. If we return -1 it means that * there is no longer anything animating * @param deltaTime int delta time to update * @return 0 if there are still animations going, -1 else */ int CUnitScript::Tick(int deltaTime) { std::vector<struct AnimInfo *> remove; for (std::list<struct AnimInfo *>::iterator it = anims.begin(); it != anims.end(); ) { struct AnimInfo *ai = *it; bool done = false; switch (ai->type) { case AMove: done = MoveToward(pieces[ai->piece]->pos[ai->axis], ai->dest, ai->speed / (1000 / deltaTime)); break; case ATurn: done = TurnToward(pieces[ai->piece]->rot[ai->axis], ai->dest, ai->speed / (1000 / deltaTime)); break; case ASpin: done = DoSpin(pieces[ai->piece]->rot[ai->axis], ai->dest, ai->speed, ai->accel, 1000 / deltaTime); break; } // Queue for removal (UnblockAll may add new anims) if (done) { remove.push_back(ai); it = anims.erase(it); } else { ++it; } } //Tell listeners to unblock? for (std::vector<struct AnimInfo *>::iterator it = remove.begin(); it != remove.end(); ++it) { UnblockAll(*it); delete *it; } if (anims.empty()) return -1; else return 0; }
//Called by the engine when we are registered as animating. If we return -1 it means that //there is no longer anything animating int CCobInstance::Tick(int deltaTime) { int done; list<struct AnimInfo *>::iterator it = anims.begin(); list<struct AnimInfo *>::iterator cur; while (it != anims.end()) { //Advance it, so we can erase cur safely cur = it++; done = false; pieces[(*cur)->piece].updated = true; switch ((*cur)->type) { case AMove: done = MoveToward(pieces[(*cur)->piece].coords[(*cur)->axis], (*cur)->dest, (*cur)->speed / (1000 / deltaTime)); break; case ATurn: done = TurnToward(pieces[(*cur)->piece].rot[(*cur)->axis], (*cur)->dest, (*cur)->speed / (1000 / deltaTime)); break; case ASpin: done = DoSpin(pieces[(*cur)->piece].rot[(*cur)->axis], (*cur)->dest, (*cur)->speed, (*cur)->accel, 1000 / deltaTime); break; } //Tell listeners to unblock? if (done) { UnblockAll(*cur); delete *cur; anims.erase(cur); } } if (anims.size() == 0) return -1; else return 0; }