forked from nothke/yugodot
Initial, scripts
This commit is contained in:
60
scripts/CarCamera.cs
Normal file
60
scripts/CarCamera.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public class CarCamera : Camera
|
||||
{
|
||||
[Export] public NodePath carPath;
|
||||
|
||||
CarController car;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
car = GetNode<CarController>(carPath);
|
||||
camPos = Translation;
|
||||
|
||||
var config = new ConfigFile();
|
||||
const string CONFIG_PATH = "config.ini";
|
||||
if (config.Load(CONFIG_PATH) == Error.Ok)
|
||||
{
|
||||
raceSmoothing = float.Parse(config.GetValue("camera", "smoothing_rate", 7).ToString());
|
||||
height = float.Parse(config.GetValue("camera", "height", 3).ToString());
|
||||
distance = float.Parse(config.GetValue("camera", "distance", 6).ToString());
|
||||
}
|
||||
else GD.Print("Couldn't load " + CONFIG_PATH);
|
||||
}
|
||||
|
||||
Vector3 camPos;
|
||||
Vector3 carPos;
|
||||
|
||||
float startSmoothing = 1;
|
||||
float raceSmoothing = 7;
|
||||
float height = 3;
|
||||
float distance = 6;
|
||||
|
||||
public override void _PhysicsProcess(float dt)
|
||||
{
|
||||
Vector3 carForward = car.Transform.basis.z;
|
||||
carPos = car.Translation;
|
||||
|
||||
Vector3 rearTargetPoint = carPos - carForward * distance;
|
||||
rearTargetPoint.y = carPos.y + height;
|
||||
|
||||
float smoothing = car.RaceStarted ? raceSmoothing : startSmoothing;
|
||||
|
||||
camPos = camPos.LinearInterpolate(rearTargetPoint, dt * smoothing);
|
||||
|
||||
/*
|
||||
float limit = 8;
|
||||
Vector3 diff = camPos - carPos;
|
||||
if ((diff).Length() > limit)
|
||||
{
|
||||
camPos = carPos + diff.Normalized() * limit;
|
||||
}*/
|
||||
}
|
||||
|
||||
public override void _Process(float dt)
|
||||
{
|
||||
Translation = camPos;
|
||||
LookAt(carPos, Vector3.Up);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user