]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/tturrets/system/system_scoreprocs.qc
sv_cheats 1: show all players on team radar
[divverent/nexuiz.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     float d_score;      // Distance score\r
40     //float da_score;   // Distance from aimpoint score\r
41     float a_score;      // Angular score\r
42     float m_score;      // missile score\r
43     float p_score;      // player score\r
44 \r
45     float ikr;          // ideal kill range\r
46 \r
47     if(!e_target) return 0;\r
48 \r
49     //if (e_target == e_turret.enemy) s_score = 1;\r
50 \r
51     if (e_turret.tur_defend)\r
52     {\r
53         d_dist = vlen(real_origin(e_target) - e_turret.tur_defend.origin);\r
54         ikr = vlen(e_turret.origin - e_turret.tur_defend.origin);\r
55         d_score = 1 - d_dist / e_turret.target_range;\r
56     }\r
57     else\r
58     {\r
59         // Make a normlized value base on the targets distance from our optimal killzone\r
60         ikr = e_turret.target_range_optimal;\r
61         d_score = min(ikr,tvt_dist) / max(ikr,tvt_dist);\r
62     }\r
63 \r
64     /*\r
65     // Determine the maximum time it could take this turrent to aim at someting.\r
66     max_aim_delay = (max(e_turret.aim_maxrot,e_turret.aim_maxpitch) / e_turret.aim_speed * 2);\r
67 \r
68     // Find out how long it would take to aim at this taget.\r
69     aim_delay = (thadf+0.01) / e_turret.aim_speed;\r
70 \r
71     // Turn this info into a normalized value.\r
72     aim_delay = (min(max_aim_delay,aim_delay) / max_aim_delay);\r
73     a_score = 1 - aim_delay;\r
74     */\r
75 \r
76     //a_score = 1 - (tvt_thadf / max(e_turret.aim_maxrot,e_turret.aim_maxpitch));\r
77     a_score = 1 - tvt_thadf / e_turret.aim_maxrot;\r
78 \r
79     if ((e_turret.target_select_missilebias > 0) && (e_target.flags & FL_PROJECTILE))\r
80         m_score = 1;\r
81 \r
82     if ((e_turret.target_select_playerbias > 0) && (e_target.flags & FL_CLIENT))\r
83         p_score = 1;\r
84 \r
85     d_score = max(d_score,0);\r
86     a_score = max(a_score,0);\r
87     m_score = max(m_score,0);\r
88     p_score = max(p_score,0);\r
89 \r
90     score = (d_score * e_turret.target_select_rangebias) +\r
91             (a_score * e_turret.target_select_anglebias) +\r
92             (m_score * e_turret.target_select_missilebias) +\r
93             (p_score * e_turret.target_select_playerbias);\r
94 \r
95     if(e_turret.target_range_fire < vlen(e_turret.tur_shotorg - real_origin(e_target)))\r
96         score *= 0.1;\r
97 \r
98 #ifdef TURRET_DEBUG\r
99     string sd,sv,sa,sm,sp,ss;\r
100     string sdt,svt,sat,smt,spt;\r
101 \r
102     sd = ftos(d_score);\r
103     d_score *= e_turret.target_select_rangebias;\r
104     sdt = ftos(d_score);\r
105 \r
106     //sv = ftos(v_score);\r
107     //v_score *= e_turret.target_select_samebias;\r
108     //svt = ftos(v_score);\r
109 \r
110     sa = ftos(a_score);\r
111     a_score *= e_turret.target_select_anglebias;\r
112     sat = ftos(a_score);\r
113 \r
114     sm = ftos(m_score);\r
115     m_score *= e_turret.target_select_missilebias;\r
116     smt = ftos(m_score);\r
117 \r
118     sp = ftos(p_score);\r
119     p_score *= e_turret.target_select_playerbias;\r
120     spt = ftos(p_score);\r
121 \r
122 \r
123     ss = ftos(score);\r
124     bprint("^3Target scores^7 \[  ",e_turret.netname, "  \] ^3for^7 \[  ", e_target.netname,"  \]\n");\r
125     bprint("^5Range:\[  ",sd,  "  \]^2+bias:\[  ",sdt,"  \]\n");\r
126     //bprint("^5Volly:\[  ",sv,  "  \]^2+bias:\[  ",svt,"  \]\n");\r
127     bprint("^5Angle:\[  ",sa,  "  \]^2+bias:\[  ",sat,"  \]\n");\r
128     bprint("^5Missile:\[  ",sm,"  \]^2+bias:\[  ",smt,"  \]\n");\r
129     bprint("^5Player:\[  ",sp, "  \]^2+bias:\[  ",spt,"  \]\n");\r
130     bprint("^3Total (w/bias):\[^1",ss,"\]\n");\r
131 \r
132 #endif\r
133 \r
134     return score;\r
135 }\r
136 \r
137 /*\r
138 float turret_stdproc_targetscore_close(entity e_turret,entity e_target)\r
139 {\r
140     return 1 - (tvt_dist / e_turret.target_range);\r
141 }\r
142 \r
143 float turret_stdproc_targetscore_far (entity e_turret,entity e_target)\r
144 {\r
145     return  tvt_dist / e_turret.target_range;\r
146 }\r
147 \r
148 float turret_stdproc_targetscore_optimal(entity e_turret,entity e_target)\r
149 {\r
150     return  min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);\r
151 }\r
152 \r
153 float turret_stdproc_score_angular(entity e_turret,entity e_target)\r
154 {\r
155     return 1 - (tvt_thadf / e_turret.aim_maxrot);\r
156 }\r
157 \r
158 float turret_stdproc_targetscore_defend(entity e_turret,entity e_target)\r
159 {\r
160     return 0;\r
161     //min(e_target.origin,e_turret.tur_defend.origin) / max(e_target.origin,e_turret.tur_defend.origin);\r
162 }\r
163 */\r