1#include "onslaught.qh"
2
3#ifndef MENUQC
4REGISTER_NET_LINKED(ENT_ONSCAMERA)
5#endif
6
7#ifdef CSQC
8
9entity generator_camera;
10NET_HANDLE(ENT_ONSCAMERA, bool isnew)
11{
12	this.origin_x = ReadCoord();
13	this.origin_y = ReadCoord();
14	this.origin_z = ReadCoord();
15	setorigin(this, this.origin);
16
17	this.angles_x = ReadAngle();
18	this.angles_y = ReadAngle();
19	this.angles_z = ReadAngle();
20
21	this.drawmask  = MASK_NORMAL;
22	setmodel(this, MDL_Null); // give it a size for clientcamera
23	setsize(this, '-1 -1 -1', '1 1 1');
24
25	generator_camera = this;
26	return true;
27}
28
29REGISTER_MUTATOR(cl_ons, true);
30
31float ons_roundlost;
32vector generator_origin;
33vector autocvar_cl_eventchase_generator_viewoffset = '0 0 80';
34float autocvar_cl_eventchase_generator_distance = 400;
35MUTATOR_HOOKFUNCTION(cl_ons, WantEventchase)
36{
37	ons_roundlost = STAT(ROUNDLOST);
38	entity gen = NULL;
39	if(ons_roundlost)
40	{
41		IL_EACH(g_onsgenerators, it.health <= 0,
42		{
43			gen = it;
44			break;
45		});
46		if(!gen)
47			ons_roundlost = false; // don't enforce the 3rd person camera if there is no dead generator to show
48	}
49
50	if(ons_roundlost)
51	{
52		generator_origin = gen.origin;
53		return true;
54	}
55	return false;
56}
57
58MUTATOR_HOOKFUNCTION(cl_ons, CustomizeEventchase)
59{
60	if(ons_roundlost)
61	{
62		M_ARGV(0, vector) = generator_camera.origin;
63		M_ARGV(1, vector) = autocvar_cl_eventchase_generator_viewoffset;
64		M_ARGV(0, float) = autocvar_cl_eventchase_generator_distance;
65		return true;
66	}
67	return false;
68}
69
70#endif
71