// Engine Funktion - Kamera script
var camera_distance = 75;
var cam_height = 0;
var bone_height = 0;
function handle_camera()
{
// Vectoren
VECTOR temp;
VECTOR anker;
VECTOR tempvect;
// Durch bewegen der Maus wird die Kamera gesteuert, aber nur unter bestimmten Umständen
if(key_d == 0 && key_a == 0 && key_shift == 1){character.pan -= mouse_force.x * 10 * time_step;}
else if(key_shift == 0){character.pan -= mouse_force.x * 10 * time_step;}
// Kamera hoch und runter blicken lassen
cam_height -= mouse_force.y * 8 * time_step;
cam_height = clamp(cam_height,-50,50);
// Kamera Anker (Ankerpunkt der Kamera, orientiert sich am Spieler)
anker.x = character.x + 25 * sin(character.pan);
anker.y = character.y - 25 * cos(character.pan);
anker.z = character.z + 35;
// Kamera orientiert sich am Ankerpunkt
camera.x = anker.x - camera_distance * cos(character.pan);
camera.y = anker.y - camera_distance * sin(character.pan);
camera.z = anker.z + cam_height;
// Kamera blickt in die Richtung des Ankerpunktes (Also gleichzeitig in Spielerrichtung)
vec_set(temp,anker.x);
vec_sub(temp, camera.x);
vec_to_angle(camera.pan, temp);
// Billige Kamera Kollision
trace_mode = IGNORE_ME | IGNORE_PASSABLE;
result = trace(my.x,camera.x);
if(result > 0) { vec_set(camera.x,target.x); }
// Steuerung der Rückenbones für Zielmodus
if(mouse_right == 1 && character.move_mode == 1)
{
bone_height = cam_height;
ent_bonerotate_parent(character,"Bone1",vector(0,-bone_height,0));
}
if(mouse_right == 0)
{
if(bone_height > 0)
{
ent_bonerotate_parent(character,"Bone1",vector(0,-bone_height,0));
bone_height -= 20 * time_step;
}
if(bone_height < 0)
{
ent_bonerotate_parent(character,"Bone1",vector(0,-bone_height,0));
bone_height += 20 * time_step;
}
}
}