#include "stdafx.h"
#include "ChestModel.h"
#include "ModelPart.h"

ChestModel::ChestModel()
{
	lid = ((new ModelPart(this, 0, 0)))->setTexSize(64, 64);
	lid->addBox(0.0f, -5.0f, -14.0f, 14, 5, 14, 0.0f);
	lid->x = 1;
	lid->y = 7;
	lid->z = 15;

	lock = ((new ModelPart(this, 0, 0)))->setTexSize(64, 64);
	lock->addBox(-1.0f, -2.0f, -15.0f, 2, 4, 1, 0.0f);
	lock->x = 8;
	lock->y = 7;
	lock->z = 15;

	bottom = ((new ModelPart(this, 0, 19)))->setTexSize(64, 64);
	bottom->addBox(0.0f, 0.0f, 0.0f, 14, 10, 14, 0.0f);
	bottom->x = 1;
	bottom->y = 6;
	bottom->z = 1;


	// 4J added - compile now to avoid random performance hit first time cubes are rendered
	lid->compile(1.0f/16.0f);
	lock->compile(1.0f/16.0f);
	bottom->compile(1.0f/16.0f);
}

void ChestModel::render(bool usecompiled)
{
	lock->xRot = lid->xRot;

	lock->render(1 / 16.0f, usecompiled);
	bottom->render(1 / 16.0f, usecompiled);

	// 4J - moved lid to last and added z-bias to avoid glitching caused by z-fighting between the area of overlap between the lid & bottom of the chest
	glPolygonOffset(-0.3f, -0.3f);
	lid->render(1 / 16.0f, usecompiled);
	glPolygonOffset(0.0f, 0.0f);
}