]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/server/tturrets/system/system_scoreprocs.qc
Include gmqcc binaries for Windows and Linux
[voretournament/voretournament.git] / data / qcsrc / server / tturrets / system / system_scoreprocs.qc
1 /*\r
2 .float target_select_flags; /// target selection flags\r
3 float TFL_TARGETSELECT_NO            = 1;   /// Dont select a target on its own.\r
4 float TFL_TARGETSELECT_LOS           = 2;   /// Need line of sight\r
5 float TFL_TARGETSELECT_PLAYERS       = 4;   /// Players are valid targets\r
6 float TFL_TARGETSELECT_MISSILES      = 8;   /// Missiles are valid targets\r
7 float TFL_TARGETSELECT_TRIGGERTARGET = 16;  /// Responds to turret_trigger_target events\r
8 float TFL_TARGETSELECT_ANGLELIMITS   = 32;  /// Angular limitations of turret head limits target selection\r
9 float TFL_TARGETSELECT_RANGELIMTS    = 64;  /// Range limits apply in targetselection\r
10 float TFL_TARGETSELECT_TEAMCHECK     = 128; /// Consider team own <-> targets team\r
11 float TFL_TARGETSELECT_NOBUILTIN     = 256; /// Cant select targets on its own. needs to be triggerd or slaved.\r
12 float TFL_TARGETSELECT_OWNTEAM       = 512;\r
13 */\r
14 \r
15 float turret_stdproc_targetscore_support(entity e_turret,entity e_target)\r
16 {\r
17     float score;        // Total score\r
18     float s_score,d_score;\r
19 \r
20     if (e_turret.enemy == e_target) s_score = 1;\r
21 \r
22     d_score = min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);\r
23 \r
24     score = (d_score * e_turret.target_select_rangebias) +\r
25             (s_score * e_turret.target_select_samebias);\r
26 \r
27     return score;\r
28 }\r
29 \r
30 /*\r
31 * Generic bias aware score system.\r
32 */\r
33 float turret_stdproc_targetscore_generic(entity e_turret,entity e_target)\r
34 {\r
35     //vector v_tmp;\r
36     float d_dist;       // Defendmode Distance\r
37 \r
38     float score;        // Total score\r
39 \r
40     float d_score;      // Distance score\r
41     float a_score;      // Angular score\r
42     float m_score;      // missile score\r
43     float p_score;      // player score\r
44     //float da_score;   // Distance from aimpoint score\r
45 \r
46     float ikr;          // ideal kill range\r
47 \r
48     if(!e_target) return 0;\r
49 \r
50     //if (e_target == e_turret.enemy) s_score = 1;\r
51 \r
52     if (e_turret.tur_defend)\r
53     {\r
54         d_dist = vlen(real_origin(e_target) - e_turret.tur_defend.origin);\r
55         ikr = vlen(e_turret.origin - e_turret.tur_defend.origin);\r
56         d_score = 1 - d_dist / e_turret.target_range;\r
57     }\r
58     else\r
59     {\r
60         // Make a normlized value base on the targets distance from our optimal killzone\r
61         ikr = e_turret.target_range_optimal;\r
62         d_score = min(ikr,tvt_dist) / max(ikr,tvt_dist);\r
63     }\r
64 \r
65     /*\r
66     // Determine the maximum time it could take this turrent to aim at someting.\r
67     max_aim_delay = (max(e_turret.aim_maxrot,e_turret.aim_maxpitch) / e_turret.aim_speed * 2);\r
68 \r
69     // Find out how long it would take to aim at this taget.\r
70     aim_delay = (thadf+0.01) / e_turret.aim_speed;\r
71 \r
72     // Turn this info into a normalized value.\r
73     aim_delay = (min(max_aim_delay,aim_delay) / max_aim_delay);\r
74     a_score = 1 - aim_delay;\r
75     */\r
76 \r
77     //a_score = 1 - (tvt_thadf / max(e_turret.aim_maxrot,e_turret.aim_maxpitch));\r
78     a_score = 1 - tvt_thadf / e_turret.aim_maxrot;\r
79 \r
80     if ((e_turret.target_select_missilebias > 0) && (e_target.flags & FL_PROJECTILE))\r
81         m_score = 1;\r
82 \r
83     if ((e_turret.target_select_playerbias > 0) && (e_target.flags & FL_CLIENT))\r
84         p_score = 1;\r
85 \r
86     d_score = max(d_score,0);\r
87     a_score = max(a_score,0);\r
88     m_score = max(m_score,0);\r
89     p_score = max(p_score,0);\r
90 \r
91     score = (d_score * e_turret.target_select_rangebias) +\r
92             (a_score * e_turret.target_select_anglebias) +\r
93             (m_score * e_turret.target_select_missilebias) +\r
94             (p_score * e_turret.target_select_playerbias);\r
95 \r
96     if(e_turret.target_range < vlen(e_turret.tur_shotorg - real_origin(e_target)))\r
97     {\r
98         dprint("Wtf?\n");\r
99         score *= 0.001;\r
100     }\r
101 \r
102 #ifdef TURRET_DEBUG\r
103     string sd,sa,sm,sp,ss;\r
104     string sdt,sat,smt,spt;\r
105 \r
106     sd = ftos(d_score);\r
107     d_score *= e_turret.target_select_rangebias;\r
108     sdt = ftos(d_score);\r
109 \r
110     //sv = ftos(v_score);\r
111     //v_score *= e_turret.target_select_samebias;\r
112     //svt = ftos(v_score);\r
113 \r
114     sa = ftos(a_score);\r
115     a_score *= e_turret.target_select_anglebias;\r
116     sat = ftos(a_score);\r
117 \r
118     sm = ftos(m_score);\r
119     m_score *= e_turret.target_select_missilebias;\r
120     smt = ftos(m_score);\r
121 \r
122     sp = ftos(p_score);\r
123     p_score *= e_turret.target_select_playerbias;\r
124     spt = ftos(p_score);\r
125 \r
126 \r
127     ss = ftos(score);\r
128     bprint("^3Target scores^7 \[  ",e_turret.netname, "  \] ^3for^7 \[  ", e_target.netname,"  \]\n");\r
129     bprint("^5Range:\[  ",sd,  "  \]^2+bias:\[  ",sdt,"  \]\n");\r
130     bprint("^5Angle:\[  ",sa,  "  \]^2+bias:\[  ",sat,"  \]\n");\r
131     bprint("^5Missile:\[  ",sm,"  \]^2+bias:\[  ",smt,"  \]\n");\r
132     bprint("^5Player:\[  ",sp, "  \]^2+bias:\[  ",spt,"  \]\n");\r
133     bprint("^3Total (w/bias):\[^1",ss,"\]\n");\r
134 \r
135 #endif\r
136 \r
137     return score;\r
138 }\r
139 \r
140 /*\r
141 float turret_stdproc_targetscore_close(entity e_turret,entity e_target)\r
142 {\r
143     return 1 - (tvt_dist / e_turret.target_range);\r
144 }\r
145 \r
146 float turret_stdproc_targetscore_far (entity e_turret,entity e_target)\r
147 {\r
148     return  tvt_dist / e_turret.target_range;\r
149 }\r
150 \r
151 float turret_stdproc_targetscore_optimal(entity e_turret,entity e_target)\r
152 {\r
153     return  min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);\r
154 }\r
155 \r
156 float turret_stdproc_score_angular(entity e_turret,entity e_target)\r
157 {\r
158     return 1 - (tvt_thadf / e_turret.aim_maxrot);\r
159 }\r
160 \r
161 float turret_stdproc_targetscore_defend(entity e_turret,entity e_target)\r
162 {\r
163     return 0;\r
164     //min(e_target.origin,e_turret.tur_defend.origin) / max(e_target.origin,e_turret.tur_defend.origin);\r
165 }\r
166 */\r