]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/tturrets/system/system_scoreprocs.qc
fix a typo in turret code
[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 s_score;      // samescore (same target as last time)\r
43     float m_score;      // missile score\r
44     float p_score;      // player 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     //s_score = max(s_score,0);\r
88     a_score = max(a_score,0);\r
89     m_score = max(m_score,0);\r
90     p_score = max(p_score,0);\r
91 \r
92     // (s_score * e_turret.target_select_samebias) +\r
93     score = (d_score * e_turret.target_select_rangebias) +\r
94             (a_score * e_turret.target_select_anglebias) +\r
95             (m_score * e_turret.target_select_missilebias) +\r
96             (p_score * e_turret.target_select_playerbias);\r
97 \r
98     if(e_turret.target_range_fire < vlen(e_turret.tur_shotorg_updated - real_origin(e_target)))\r
99         score *= 0.1;\r
100 \r
101 #ifdef TURRET_DEBUG\r
102     string sd,sv,sa,sm,sp,ss;\r
103     string sdt,svt,sat,smt,spt;\r
104 \r
105     sd = ftos(d_score);\r
106     d_score *= e_turret.target_select_rangebias;\r
107     sdt = ftos(d_score);\r
108 \r
109     //sv = ftos(v_score);\r
110     //v_score *= e_turret.target_select_samebias;\r
111     //svt = ftos(v_score);\r
112 \r
113     sa = ftos(a_score);\r
114     a_score *= e_turret.target_select_anglebias;\r
115     sat = ftos(a_score);\r
116 \r
117     sm = ftos(m_score);\r
118     m_score *= e_turret.target_select_missilebias;\r
119     smt = ftos(m_score);\r
120 \r
121     sp = ftos(p_score);\r
122     p_score *= e_turret.target_select_playerbias;\r
123     spt = ftos(p_score);\r
124 \r
125 \r
126     ss = ftos(score);\r
127     bprint("^3Target scores^7 \[  ",e_turret.netname, "  \] ^3for^7 \[  ", e_target.netname,"  \]\n");\r
128     bprint("^5Range:\[  ",sd,  "  \]^2+bias:\[  ",sdt,"  \]\n");\r
129     //bprint("^5Volly:\[  ",sv,  "  \]^2+bias:\[  ",svt,"  \]\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 float turret_stdproc_targetscore_close(entity e_turret,entity e_target)\r
141 {\r
142     return 1 - (tvt_dist / e_turret.target_range);\r
143 }\r
144 \r
145 float turret_stdproc_targetscore_far (entity e_turret,entity e_target)\r
146 {\r
147     return  tvt_dist / e_turret.target_range;\r
148 }\r
149 \r
150 float turret_stdproc_targetscore_optimal(entity e_turret,entity e_target)\r
151 {\r
152     return  min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);\r
153 }\r
154 \r
155 float turret_stdproc_score_angular(entity e_turret,entity e_target)\r
156 {\r
157     return 1 - (tvt_thadf / e_turret.aim_maxrot);\r
158 }\r
159 \r
160 float turret_stdproc_targetscore_defend(entity e_turret,entity e_target)\r
161 {\r
162     return 0;\r
163     //min(e_target.origin,e_turret.tur_defend.origin) / max(e_target.origin,e_turret.tur_defend.origin);\r
164 }\r