I wanted to try and add a slight delay to the camera movement to give a elastic movement so it's slightly slower than the player when following and then when the player stops the camera continues animating until the player is at the centre.
Also I wanted to be able to move the camera to show upcoming areas etc.
So I tried to attempt this but I am getting a bit confused when it comes to world positions and chunks and offsets...
So in theory I know how to animate a movement. I get the difference between the camera and player and normalise that to get a direction and then move by multiplying the direction and a speed constant along with the delta time of the frame. But when it comes to translating that into world space I have no idea.
I attempted something like:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | if (entity->StorageIndex == worldMode->CameraFollowingEntityIndex) { Vector3 start = worldMode->CameraPosition.Offset; Vector3 end = storedEntity->Position.Offset; float speed = 10.0f; float distance = Length(end - start); Vector3 direction = Normalise(end - start); if(distance > 0) { worldMode->CameraPosition = MapIntoChunkSpace( worldMode->World, worldMode->CameraPosition, start + direction * speed * deltaTime); } } |
But this just results in a bit of a mess. Can anyone explain how I can achieve this?
Am I going about this the right way?