Beispiel #1
0
static void Action(TAction * a)
{
	TWatch *t;
	TCondition *c;

	for (;;)
	{
		switch (a->action)
		{
		case ACTION_NULL:
			return;

		case ACTION_SOUND:
			SoundPlayAt(a->tileFlags, a->x, a->y);
			break;

		case ACTION_SETTRIGGER:
			Map(a->x, a->y).flags |= TILE_TRIGGER;
			break;

		case ACTION_CLEARTRIGGER:
			Map(a->x, a->y).flags &= ~TILE_TRIGGER;
			break;

		case ACTION_CHANGETILE:
			Map(a->x, a->y).flags = a->tileFlags;
			Map(a->x, a->y).pic = a->tilePic;
			break;

		case ACTION_SETTIMEDWATCH:
			t = FindWatch(a->x);
			if (t) {
				c = t->conditions;
				while (c && c->condition != CONDITION_NULL) {
					if (c->condition ==
					    CONDITION_TIMEDDELAY) {
						c->x = a->y;
						break;
					}
					c++;
				}
				ActivateWatch(t->index);
			}
			break;

		case ACTION_ACTIVATEWATCH:
			ActivateWatch(a->x);
			break;

		case ACTION_DEACTIVATEWATCH:
			DeactivateWatch(a->x);
			break;
		}
		a++;
	}
}
Beispiel #2
0
static void ActionRun(Action *a, CArray *mapTriggers)
{
	int i;
	switch (a->action)
	{
	case ACTION_NULL:
		return;

	case ACTION_SOUND:
		SoundPlayAt(&gSoundDevice, a->a.Sound, a->u.pos);
		break;

	case ACTION_SETTRIGGER:
		for (i = 0; i < (int)mapTriggers->size; i++)
		{
			Trigger *tr = *(Trigger **)CArrayGet(mapTriggers, i);
			if (tr->id == a->u.index)
			{
				tr->isActive = 1;
				break;
			}
		}
		break;

	case ACTION_CLEARTRIGGER:
		for (i = 0; i < (int)mapTriggers->size; i++)
		{
			Trigger *tr = *(Trigger **)CArrayGet(mapTriggers, i);
			if (tr->id == a->u.index)
			{
				tr->isActive = 0;
				break;
			}
		}
		break;

	case ACTION_CHANGETILE:
		{
			Tile *t= MapGetTile(&gMap, a->u.pos);
			t->flags = a->a.tileFlags;
			t->pic = a->tilePic;
			t->picAlt = a->tilePicAlt;
		}
		break;

	case ACTION_ACTIVATEWATCH:
		ActivateWatch(a->u.index);
		break;

	case ACTION_DEACTIVATEWATCH:
		DeactivateWatch(a->u.index);
		break;
	}
}