EntityParent

Blitz3D Forums/Blitz3D Beginners Area/EntityParent

Here's a smooth 3rd person camera system I used some time ago...

Type SysCam
	Field cx#,cy#,cz#, yaw#
	Field cam
End Type

Global Camera.Syscam

Function LoadCamera()
	DebugLog "Initializing Camera System"
	Camera.Syscam = New Syscam
	Camera\Cam = CreateCamera()
	CameraRange Camera\Cam, 1, 9000
	CameraZoom Camera\Cam, 1
	CameraClsMode Camera\Cam, 0, 1
End Function

Function UnloadCamera()
	For Camera.Syscam = Each Syscam
		FreeEntity Camera\Cam
		Delete(Camera)
	Next
End Function
		
Function ChaseCam(entity, spd# = 0.1)
	TFormVector 0, 30.5 - (GraphicsHeight() / 2 - Camera\cy - MouseZ()) * 0.05, - 80 - MouseZ(), entity, 0
	ex# = EntityX(entity, True)
	ey# = EntityY(entity, True)
	ez# = EntityZ(entity, True)
	nx# = ex + TFormedX()
	ny# = ey + TFormedY()
	nz# = ez + TFormedZ()
	dx# = nx - ex
	dy# = ny - ey
	dz# = nz - ez
	
	hit = LinePick(ex, ey, ez, dx, dy, dz, 1)
	If hit
	nx = PickedX()
	ny = PickedY()
	nz = PickedZ()
	EndIf
	
	Camera\cx = Camera\cx + (nx - Camera\cx) * spd
	Camera\cy = Camera\cy + (ny - Camera\cy) * spd
	Camera\cz = Camera\cz + (nz - Camera\cz) * spd
	Camera\yaw# = EntityYaw(Camera\cam)
    PositionEntity Camera\cam, Camera\cx, Camera\cy, Camera\cz
	PointEntity Camera\cam, entity, 0	
End Function

Function CurveValue#(newvalue#,oldvalue#,increments)
	If increments>1 oldvalue#=oldvalue#-(oldvalue#-newvalue#)/increments
	If increments<=1 oldvalue=newvalue
	Return oldvalue#
End Function