Beispiel #1
0
void Scene::processActorZone(Actor *a) {
	if (!a->isZonable()) {
		return;
	}
	a->_currZone = nullptr;
	for (int j = 0; j < _numZones; ++j) {
		Zone *z = &_zones[j];
		if (z->isActorInside(a)) {
			switch (z->_type) {
			case kCube:
				if (a->_isHero) {
					if (g_twin->getGameType() == GType_LBA2) {
						g_twin->changeScene(z->_snap, z->_info[0], z->_info[1], z->_info[2]);
					} else {
						g_twin->changeScene(z->_info[0], z->_info[1], z->_info[2], z->_info[3]);
					}
				}
				break;
			case kObject:
				if (g_twin->getKey(KeyAction)) {
					a->setAnimation(kAction, true);
					a->_numKeys = 1;
				}
				break;
			case kSceneric:
				a->_currZone = z;
				break;
			}
		}
	}
}