Пример #1
0
void wxTimeSpinCtrl::OnSpinDown(wxSpinEvent &ev)
{
#ifdef __WXMSW__
	m_txt->SetFocus();
#endif
	DoSpin(-1);
}
Пример #2
0
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();
}
Пример #3
0
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;
	}
}
Пример #4
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: {
				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;
}
Пример #5
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;
}
Пример #6
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;
}