void SystemView::render(const Transform4x4f& parentTrans)
{
	if(size() == 0)
		return;  // nothing to render

	Transform4x4f trans = getTransform() * parentTrans;

	auto systemInfoZIndex = mSystemInfo.getZIndex();
	auto minMax = std::minmax(mCarousel.zIndex, systemInfoZIndex);

	renderExtras(trans, INT16_MIN, minMax.first);
	renderFade(trans);

	if (mCarousel.zIndex > mSystemInfo.getZIndex()) {
		renderInfoBar(trans);
	} else {
		renderCarousel(trans);
	}

	renderExtras(trans, minMax.first, minMax.second);

	if (mCarousel.zIndex > mSystemInfo.getZIndex()) {
		renderCarousel(trans);
	} else {
		renderInfoBar(trans);
	}

	renderExtras(trans, minMax.second, INT16_MAX);
}
void GameFadeEffect::render(kuto::Graphics2D& g) const
{
	switch (state_) {
	case kStateEncountFlash:
		renderBattleFlash(g);
		break;
	case kStateFadeOut:
		switch (type_) {
		case kTypeFade:
			renderFade(g, (float)counter_ / 30.f);
			break;
		case kTypeRandomBlock:
		case kTypeRandomBlockTopDown:
		case kTypeRandomBlockBottomUp:
			renderRandomBlock(g, (float)counter_ / 30.f);
			break;
		case kTypeBlind:
			renderBlind(g, (float)counter_ / 30.f);
			break;
		case kTypeStripeVertical:
			renderStripeVertical(g, (float)counter_ / 30.f);
			break;
		case kTypeStripeHorizontal:
			renderStripeHorizontal(g, (float)counter_ / 30.f);
			break;
		case kTypeHoleShrink:
			renderHoleShrink(g, (float)counter_ / 30.f);
			break;
		case kTypeHoleExpand:
			renderHoleExpand(g, (float)counter_ / 30.f);
			break;
		case kTypeImmediate:
			break;
		case kTypeNothing:
			break;
		default:
			renderFade(g, (float)counter_ / 30.f);
			break;
		}
		break;
	case kStateFadeOutEnd:
		renderFade(g, 1.f);
		break;
	case kStateFadeIn:
		switch (type_) {
		case kTypeFade:
			renderFade(g, 1.f - (float)counter_ / 30.f);
			break;
		case kTypeRandomBlock:
		case kTypeRandomBlockTopDown:
		case kTypeRandomBlockBottomUp:
			renderRandomBlock(g, 1.f - (float)counter_ / 30.f);
			break;
		case kTypeBlind:
			renderBlind(g, 1.f - (float)counter_ / 30.f);
			break;
		case kTypeStripeVertical:
			renderStripeVertical(g, 1.f - (float)counter_ / 30.f);
			break;
		case kTypeStripeHorizontal:
			renderStripeHorizontal(g, 1.f - (float)counter_ / 30.f);
			break;
		case kTypeHoleShrink:
			renderHoleShrink(g, 1.f - (float)counter_ / 30.f);
			break;
		case kTypeHoleExpand:
			renderHoleExpand(g, 1.f - (float)counter_ / 30.f);
			break;
		case kTypeImmediate:
			break;
		case kTypeNothing:
			break;
		default:
			renderFade(g, 1.f - (float)counter_ / 30.f);
			break;
		}
		break;
	default: break;
	}
}