import "TD.lib"
import "Speed.lib"
import "Keycodes.lib"

rem Double buffer.
set redraw off

rem Init gl window.
if not TD_Init("TD Example", 200, 20, 800, 600, 65.0, 0.1, 16.0, false)
	end
endif

rem Load a background.
if not TD_LoadBackground("assets_rc/sky.jpg") then end
rem Load map.
if not TD_LoadMap("assets_rc/test.bin") then end
rem Set fog.
proc TD_SetFog 0, 0, 0, 0.5, 10.0

model = TD_LoadMD2("assets_rc/Blade.md2", false)
modelTexture = TD_LoadTexture("assets_rc/Blade.jpg"

playerX# = 9.0
playerY# = 0.0
playerZ# = 8.0
playerDirection# = 180.0
playerPitch# = 0.0
camX# = playerX
camY# = playerY + 0.6
camZ# = playerZ
camWantedX# = camX
camWantedY# = camY
camWantedZ# = camZ
shouldDraw = true


moving = false
wasMoving = false
frame = 0
nextFrame = 0
frameParam# = 0.0

do
	rem Need to call this.
	proc TD_Update

	rem Update player.
	plyDY# = -0.05
	plyDX# = 0.0
	plyDZ# = 0.0

	rem Look up/down with page up/down.
	if keydown(104)
		playerPitch = max#(playerPitch - 2.0, -30.0)
	endif
	if keydown(105)
		playerPitch = min#(playerPitch + 2.0, 45.0)
	endif
	rem Walk and turn.
	moving = false
	if keydown(VK_UP)
		plyDX = cos(playerDirection)*0.04
		plyDZ = sin(playerDirection)*0.04
		if wasMoving = false
			frame = 40
			nextFrame = 41
			frameParam = 0.0
			wasMoving = true
		endif
		moving = true
	endif
	if keydown(VK_DOWN)
		plyDX = -cos(playerDirection)*0.04
		plyDZ = -sin(playerDirection)*0.04
		if wasMoving = false
			frame = 40
			nextFrame = 41
			frameParam = 0.0
			wasMoving = true
		endif
		moving = true
	endif
	if keydown(VK_LEFT)
		playerDirection = playerDirection - 2.0
	endif
	if keydown(VK_RIGHT)
		playerDirection = playerDirection + 2.0	
	endif
	
	if moving
		frameParam = frameParam + 0.1
		if frameParam >= 1.0
			frameParam = frameParam - 1.0
			frame = nextFrame
			nextFrame = nextFrame + 1
			if nextFrame > 45 then nextFrame = 40
		endif
	else
		wasMoving = false
		frame = 0
		nextFrame = 0
		frameParam = 0.0
	endif

	proc TD_Move playerX, playerY, playerZ, plyDX, plyDY, plyDZ, 0.3, 1.0, 0.2

	camWantedX = playerX - cos(playerDirection)*1.5
	camWantedZ = playerZ - sin(playerDirection)*1.5
	camWantedY = playerY + 1.5

	camX = camX*0.92 + camWantedX*0.08
	camY = camY*0.92 + camWantedY*0.08
	camZ = camZ*0.92 + camWantedZ*0.08



	rem Draw?
	if shouldDraw
		proc TD_SetCamPosition camX, camY, camZ
		proc TD_SetCamOrientation playerDirection, 20.0 + playerPitch, 0.0
		proc TD_Render false
		proc TD_SetTexture modelTexture
		proc TD_RenderModelIFrame model, playerX, playerY + 0.45, playerZ, 0.02, -playerDirection, 0.0, 0.0, frame, nextFrame, frameParam
		proc TD_Flush
	endif
	shouldDraw = SPD_HoldFrameDraw(60)
until not TD_Running()
proc TD_DeleteModel model

