#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <exec/types.h>
#include <graphics/modeid.h>
#include <devices/timer.h>

#include "/Shared/EE_precalc.h"
#include "/Shared/EE_view.h"
#include "/Shared/EE_timer.h"
#include "/Shared/EE_sequence.h"
#include "/Shared/EE_fx.h"
#include "/Renderer/EM_structures.h"
#include "TN_render.h"
#include "TN_animation.h"
#include "TN_sequence.h"
#include "/Renderer/EM_reader.h"
#include "/Renderer/EM_render.h"

UBYTE *TN_TextureAdr;
FACE **TN_DepthBuffer;
extern DVIEW *DView;
extern UBYTE *EM_TextureAdr;
LONG TN_RenderFrame(DVIEW *DView, SCENE *Scene)
{
FACE *tmpFace;
LONG VisibleFacesNumber;
LONG i;

	TN_TransformScene(Scene);
	VisibleFacesNumber = TN_CreateDepthBuffer(Scene, TN_DepthBuffer);
	EM_SortDepthBuffer(TN_DepthBuffer, VisibleFacesNumber);

	ClearChunky(DView);

	for(i=0; i<VisibleFacesNumber; i++)
	{
		tmpFace = TN_DepthBuffer[i];

		if(tmpFace->Flags != FF_CLIP)
			EM_RenderFace(tmpFace);
		else
			EM_RenderClipFace(tmpFace);
	}


	SafeRender(DView);
	DView->C2P(DView);

	FrameEvent();
	SwitchView(DView);

	return IAL_OK;
}


LONG TN_Sequence(UBYTE *Object,ANIM_COMMAND *AC,UBYTE *Texture)
{
SCENE *Scene;
LONG i;
	
	Scene = EM_RelocScene(Object,0);

	if((TN_DepthBuffer = calloc(Scene->FNumber+1, sizeof(FACE *))) == NULL)
		return SEQ_MEMORY_PROBLEM;


     EM_TextureAdr=Texture;

 	Scene->Camera->PosX = -212;
 	Scene->Camera->PosY = 0;
	Scene->Camera->PosZ = -170;
	Scene->Camera->RotX = 0;
	Scene->Camera->RotY = 136;
	Scene->Camera->RotZ = 0;

	for(i=0; i<5; i++)
		TN_DoAnim(DView, Scene, AC, TN_RenderFrame);

	EM_FreeScene(Scene);
	free(TN_DepthBuffer);

	return SEQ_OK;
}
