]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/tturrets/system/system_scoreprocs.qc
Monsters!
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / tturrets / system / system_scoreprocs.qc
1 float turret_stdproc_targetscore_support(entity _turret,entity _target)
2 {
3     float score;        // Total score
4     float s_score = 0, d_score;
5
6     if (_turret.enemy == _target) s_score = 1;
7
8     d_score = min(_turret.target_range_optimal,tvt_dist) / max(_turret.target_range_optimal,tvt_dist);
9
10     score = (d_score * _turret.target_select_rangebias) +
11             (s_score * _turret.target_select_samebias);
12
13     return score;
14 }
15
16 /*
17 * Generic bias aware score system.
18 */
19 float turret_stdproc_targetscore_generic(entity _turret, entity _target)
20 {
21     float d_dist;       // Defendmode Distance
22     float score;        // Total score
23     float d_score;      // Distance score
24     float a_score;      // Angular score
25     float m_score = 0;  // missile score
26     float p_score = 0;  // player score
27     float ikr;          // ideal kill range
28
29     if (_turret.tur_defend)
30     {
31         d_dist = vlen(real_origin(_target) - _turret.tur_defend.origin);
32         ikr = vlen(_turret.origin - _turret.tur_defend.origin);
33         d_score = 1 - d_dist / _turret.target_range;
34     }
35     else
36     {
37         // Make a normlized value base on the targets distance from our optimal killzone
38         ikr = _turret.target_range_optimal;
39         d_score = min(ikr, tvt_dist) / max(ikr, tvt_dist);
40     }
41
42     a_score = 1 - tvt_thadf / _turret.aim_maxrot;
43
44     if ((_turret.target_select_missilebias > 0) && (_target.flags & FL_PROJECTILE))
45         m_score = 1;
46
47     if ((_turret.target_select_playerbias > 0) && (_target.flags & FL_CLIENT) && !g_td)
48         p_score = 1;
49         
50     if(g_td && _target.flags & FL_MONSTER)
51         p_score = 1;
52
53     d_score = max(d_score, 0);
54     a_score = max(a_score, 0);
55     m_score = max(m_score, 0);
56     p_score = max(p_score, 0);
57
58     score = (d_score * _turret.target_select_rangebias) +
59             (a_score * _turret.target_select_anglebias) +
60             (m_score * _turret.target_select_missilebias) +
61             (p_score * _turret.target_select_playerbias);
62
63     if(_turret.target_range < vlen(_turret.tur_shotorg - real_origin(_target)))
64     {
65         //dprint("Wtf?\n");
66         score *= 0.001;
67     }
68
69 #ifdef TURRET_DEBUG
70     string sd,sa,sm,sp,ss;
71     string sdt,sat,smt,spt;
72
73     sd = ftos(d_score);
74     d_score *= _turret.target_select_rangebias;
75     sdt = ftos(d_score);
76
77     //sv = ftos(v_score);
78     //v_score *= _turret.target_select_samebias;
79     //svt = ftos(v_score);
80
81     sa = ftos(a_score);
82     a_score *= _turret.target_select_anglebias;
83     sat = ftos(a_score);
84
85     sm = ftos(m_score);
86     m_score *= _turret.target_select_missilebias;
87     smt = ftos(m_score);
88
89     sp = ftos(p_score);
90     p_score *= _turret.target_select_playerbias;
91     spt = ftos(p_score);
92
93
94     ss = ftos(score);
95     bprint("^3Target scores^7 \[  ",_turret.netname, "  \] ^3for^7 \[  ", _target.netname,"  \]\n");
96     bprint("^5Range:\[  ",sd,  "  \]^2+bias:\[  ",sdt,"  \]\n");
97     bprint("^5Angle:\[  ",sa,  "  \]^2+bias:\[  ",sat,"  \]\n");
98     bprint("^5Missile:\[  ",sm,"  \]^2+bias:\[  ",smt,"  \]\n");
99     bprint("^5Player:\[  ",sp, "  \]^2+bias:\[  ",spt,"  \]\n");
100     bprint("^3Total (w/bias):\[^1",ss,"\]\n");
101
102 #endif
103
104     return score;
105 }
106
107 /*
108 float turret_stdproc_targetscore_close(entity _turret,entity _target)
109 {
110     return 1 - (tvt_dist / _turret.target_range);
111 }
112
113 float turret_stdproc_targetscore_far (entity _turret,entity _target)
114 {
115     return  tvt_dist / _turret.target_range;
116 }
117
118 float turret_stdproc_targetscore_optimal(entity _turret,entity _target)
119 {
120     return  min(_turret.target_range_optimal,tvt_dist) / max(_turret.target_range_optimal,tvt_dist);
121 }
122
123 float turret_stdproc_score_angular(entity _turret,entity _target)
124 {
125     return 1 - (tvt_thadf / _turret.aim_maxrot);
126 }
127
128 float turret_stdproc_targetscore_defend(entity _turret,entity _target)
129 {
130     return 0;
131     //min(_target.origin,_turret.tur_defend.origin) / max(_target.origin,_turret.tur_defend.origin);
132 }
133 */