X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fview.qc;h=a6d05d9a62cd24ca8a9ea2f15f75b353b79feb55;hp=45629f206af44a9dbf4ee3491dfbe55a6068dd08;hb=201f6309c92217b63dc34daf004fbb7424096eca;hpb=7e1b2aa7ed2285e8a9d95fd3dc4173cfe948c842 diff --git a/qcsrc/client/view.qc b/qcsrc/client/view.qc index 45629f206a..a6d05d9a62 100644 --- a/qcsrc/client/view.qc +++ b/qcsrc/client/view.qc @@ -14,7 +14,7 @@ #include "../common/debug.qh" #include "../common/mapinfo.qh" #include "../common/gamemodes/all.qh" -#include "../common/nades/all.qh" +#include "../common/physics.qh" #include "../common/stats.qh" #include "../common/triggers/target/music.qh" #include "../common/teams.qh" @@ -111,13 +111,13 @@ float autocvar_cl_leanmodel_up_limit; void viewmodel_animate(entity this) { static float prevtime; - float frametime = (time - prevtime) * getstatf(STAT_MOVEVARS_TIMESCALE); + float frametime = (time - prevtime) * STAT(MOVEVARS_TIMESCALE); prevtime = time; if (autocvar_chase_active) return; if (getstati(STAT_HEALTH) <= 0) return; - entity view = CSQCModel_server2csqc(player_localentnum); + entity view = CSQCModel_server2csqc(player_localentnum - 1); bool clonground = !(view.anim_implicit_state & ANIMIMPLICITSTATE_INAIR); static bool oldonground; @@ -271,7 +271,7 @@ void viewmodel_draw(entity this) float a = this.alpha; int c = stof(getplayerkeyvalue(current_player, "colors")); vector g = this.glowmod; // TODO: completely clientside: colormapPaletteColor(c & 0x0F, true) * 2; - entity me = CSQCModel_server2csqc(player_localentnum); + entity me = CSQCModel_server2csqc(player_localentnum - 1); int fx = ((me.csqcmodel_effects & EFMASK_CHEAP) | EF_NODEPTHTEST) &~ (EF_FULLBRIGHT); // can mask team color, so get rid of it @@ -298,7 +298,7 @@ void viewmodel_draw(entity this) if (!this.animstate_override) anim_set(this, this.anim_idle, true, false, false); } - float eta = (getstatf(STAT_WEAPON_NEXTTHINK) - time); // TODO: / W_WeaponRateFactor(); + float eta = (STAT(WEAPON_NEXTTHINK) - time); // TODO: / W_WeaponRateFactor(); float f = 0; // 0..1; 0: fully active switch (this.state) { @@ -666,9 +666,9 @@ float TrueAimCheck() break; } - vector traceorigin = getplayerorigin(player_localentnum-1) + (eZ * getstati(STAT_VIEWHEIGHT)); + vector traceorigin = entcs_receiver(player_localentnum - 1).origin + (eZ * getstati(STAT_VIEWHEIGHT)); - vecs = decompressShotOrigin(getstati(STAT_SHOTORG)); + vecs = decompressShotOrigin(STAT(SHOTORG)); traceline(traceorigin, traceorigin + view_forward * MAX_SHOT_DISTANCE, mv, ta); trueaimpoint = trace_endpos; @@ -749,7 +749,7 @@ bool WantEventchase() return true; if(MUTATOR_CALLHOOK(WantEventchase, self)) return true; - if(autocvar_cl_eventchase_nexball && gametype == MAPINFO_TYPE_NEXBALL && !(WepSet_GetFromStat() & WepSet_FromWeapon(WEP_NEXBALL.m_id))) + if(autocvar_cl_eventchase_nexball && gametype == MAPINFO_TYPE_NEXBALL && !(WepSet_GetFromStat() & WEPSET(NEXBALL))) return true; if(autocvar_cl_eventchase_death && (getstati(STAT_HEALTH) <= 0)) { @@ -781,12 +781,12 @@ void UpdateDamage() { // accumulate damage with each stat update static float damage_total_prev = 0; - float damage_total = getstati(STAT_DAMAGE_DEALT_TOTAL); + float damage_total = STAT(DAMAGE_DEALT_TOTAL); float unaccounted_damage_new = COMPARE_INCREASING(damage_total, damage_total_prev); damage_total_prev = damage_total; static float damage_dealt_time_prev = 0; - float damage_dealt_time = getstatf(STAT_HIT_TIME); + float damage_dealt_time = STAT(HIT_TIME); if (damage_dealt_time != damage_dealt_time_prev) { unaccounted_damage += unaccounted_damage_new; @@ -842,7 +842,7 @@ void HitSound() } static float typehit_time_prev = 0; - float typehit_time = getstatf(STAT_TYPEHIT_TIME); + float typehit_time = STAT(TYPEHIT_TIME); if (COMPARE_INCREASING(typehit_time, typehit_time_prev) > autocvar_cl_hitsound_antispam_time) { sound(world, CH_INFO, SND_TYPEHIT, VOL_BASE, ATTN_NONE); @@ -1018,7 +1018,7 @@ void HUD_Crosshair() if(autocvar_crosshair_pickup) { - float stat_pickup_time = getstatf(STAT_LAST_PICKUP); + float stat_pickup_time = STAT(LAST_PICKUP); if(pickup_crosshair_time < stat_pickup_time) { @@ -1125,18 +1125,18 @@ void HUD_Crosshair() ring_scale = autocvar_crosshair_ring_size; float weapon_clipload, weapon_clipsize; - weapon_clipload = getstati(STAT_WEAPON_CLIPLOAD); - weapon_clipsize = getstati(STAT_WEAPON_CLIPSIZE); + weapon_clipload = STAT(WEAPON_CLIPLOAD); + weapon_clipsize = STAT(WEAPON_CLIPSIZE); float ok_ammo_charge, ok_ammo_chargepool; - ok_ammo_charge = getstatf(STAT_OK_AMMO_CHARGE); - ok_ammo_chargepool = getstatf(STAT_OK_AMMO_CHARGEPOOL); + ok_ammo_charge = STAT(OK_AMMO_CHARGE); + ok_ammo_chargepool = STAT(OK_AMMO_CHARGEPOOL); float vortex_charge, vortex_chargepool; - vortex_charge = getstatf(STAT_VORTEX_CHARGE); - vortex_chargepool = getstatf(STAT_VORTEX_CHARGEPOOL); + vortex_charge = STAT(VORTEX_CHARGE); + vortex_chargepool = STAT(VORTEX_CHARGEPOOL); - float arc_heat = getstatf(STAT_ARC_HEAT); + float arc_heat = STAT(ARC_HEAT); if(vortex_charge_movingavg == 0) // this should only happen if we have just loaded up the game vortex_charge_movingavg = vortex_charge; @@ -1165,14 +1165,14 @@ void HUD_Crosshair() } else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER.m_id && minelayer_maxmines && autocvar_crosshair_ring_minelayer) { - ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to. + ring_value = bound(0, STAT(LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to. ring_alpha = autocvar_crosshair_ring_minelayer_alpha; ring_rgb = wcross_color; ring_image = "gfx/crosshair_ring.tga"; } - else if (activeweapon == WEP_HAGAR.m_id && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar) + else if (activeweapon == WEP_HAGAR.m_id && STAT(HAGAR_LOAD) && autocvar_crosshair_ring_hagar) { - ring_value = bound(0, getstati(STAT_HAGAR_LOAD) / hagar_maxrockets, 1); + ring_value = bound(0, STAT(HAGAR_LOAD) / hagar_maxrockets, 1); ring_alpha = autocvar_crosshair_ring_hagar_alpha; ring_rgb = wcross_color; ring_image = "gfx/crosshair_ring.tga"; @@ -1282,7 +1282,7 @@ void HUD_Crosshair() wcross_color = stov(autocvar_crosshair_dot_color); CROSSHAIR_DRAW(wcross_resolution * autocvar_crosshair_dot_size, "gfx/crosshairdot.tga", f * autocvar_crosshair_dot_alpha); - // FIXME why don't we use wcross_alpha here?cl_notice_run(); + // FIXME why don't we use wcross_alpha here? wcross_color = wcross_color_old; } } @@ -1311,19 +1311,27 @@ void HUD_Crosshair() void HUD_Draw() { - if(getstati(STAT_FROZEN)) - drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, ((getstatf(STAT_REVIVE_PROGRESS)) ? ('0.25 0.90 1' + ('1 0 0' * getstatf(STAT_REVIVE_PROGRESS)) + ('0 1 1' * getstatf(STAT_REVIVE_PROGRESS) * -1)) : '0.25 0.90 1'), autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); - else if (getstatf(STAT_HEALING_ORB)>time) - drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, NADE_TYPE_HEAL.m_color, autocvar_hud_colorflash_alpha*getstatf(STAT_HEALING_ORB_ALPHA), DRAWFLAG_ADDITIVE); + vector rgb = '0 0 0'; + float a = 1; + if (MUTATOR_CALLHOOK(HUD_Draw_overlay)) + { + rgb = MUTATOR_ARGV(0, vector); + a = MUTATOR_ARGV(0, float); + } + else if(STAT(FROZEN)) + { + rgb = ((STAT(REVIVE_PROGRESS)) ? ('0.25 0.90 1' + ('1 0 0' * STAT(REVIVE_PROGRESS)) + ('0 1 1' * STAT(REVIVE_PROGRESS) * -1)) : '0.25 0.90 1'); + } + drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, rgb, autocvar_hud_colorflash_alpha * a, DRAWFLAG_ADDITIVE); if(!intermission) - if(getstatf(STAT_NADE_TIMER) && autocvar_cl_nade_timer) // give nade top priority, as it's a matter of life and death + if(STAT(NADE_TIMER) && autocvar_cl_nade_timer) // give nade top priority, as it's a matter of life and death { - DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", getstatf(STAT_NADE_TIMER), '0.25 0.90 1' + ('1 0 0' * getstatf(STAT_NADE_TIMER)) - ('0 1 1' * getstatf(STAT_NADE_TIMER)), autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); + DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", STAT(NADE_TIMER), '0.25 0.90 1' + ('1 0 0' * STAT(NADE_TIMER)) - ('0 1 1' * STAT(NADE_TIMER)), autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); drawstring_aspect(eY * 0.64 * vid_conheight, ((autocvar_cl_nade_timer == 2) ? _("Nade timer") : ""), eX * vid_conwidth + eY * 0.025 * vid_conheight, '1 1 1', 1, DRAWFLAG_NORMAL); } - else if(getstatf(STAT_REVIVE_PROGRESS)) + else if(STAT(REVIVE_PROGRESS)) { - DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", getstatf(STAT_REVIVE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); + DrawCircleClippedPic(eX * 0.5 * vid_conwidth + eY * 0.6 * vid_conheight, 0.1 * vid_conheight, "gfx/crosshair_ring.tga", STAT(REVIVE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE); drawstring_aspect(eY * 0.64 * vid_conheight, _("Revival progress"), eX * vid_conwidth + eY * 0.025 * vid_conheight, '1 1 1', 1, DRAWFLAG_NORMAL); } @@ -1351,9 +1359,7 @@ float oldr_novis; float oldr_useportalculling; float oldr_useinfinitefarclip; -const int BUTTON_3 = 4; -const int BUTTON_4 = 8; -float cl_notice_run(); +void cl_notice_run(); float prev_myteam; int lasthud; float vh_notice_time; @@ -1370,7 +1376,8 @@ void CSQC_UpdateView(float w, float h) ++framecount; - hud = getstati(STAT_HUD); + stats_get(); + hud = STAT(HUD); if(hud != HUD_NORMAL && lasthud == HUD_NORMAL) vh_notice_time = time + autocvar_cl_vehicles_notify_time; @@ -1389,8 +1396,8 @@ void CSQC_UpdateView(float w, float h) else view_quality = 1; - button_attack2 = (input_buttons & BUTTON_3); - button_zoom = (input_buttons & BUTTON_4); + button_attack2 = PHYS_INPUT_BUTTON_ATCK2(self); + button_zoom = PHYS_INPUT_BUTTON_ZOOM(self); vf_size = getpropertyvec(VF_SIZE); vf_min = getpropertyvec(VF_MIN); @@ -1417,7 +1424,7 @@ void CSQC_UpdateView(float w, float h) prev_myteam = myteam; } - ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE); + ticrate = STAT(MOVEVARS_TICRATE) * STAT(MOVEVARS_TIMESCALE); float is_dead = (getstati(STAT_HEALTH) <= 0); @@ -1441,7 +1448,7 @@ void CSQC_UpdateView(float w, float h) if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped { float vehicle_chase = (hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0)); - float ons_roundlost = (gametype == MAPINFO_TYPE_ONSLAUGHT && getstati(STAT_ROUNDLOST)); + float ons_roundlost = (gametype == MAPINFO_TYPE_ONSLAUGHT && STAT(ROUNDLOST)); entity gen = world; if(ons_roundlost) @@ -1693,11 +1700,8 @@ void CSQC_UpdateView(float w, float h) ColorTranslateMode = autocvar_cl_stripcolorcodes; - // next WANTED weapon (for HUD) - switchweapon = getstati(STAT_SWITCHWEAPON); - // currently switching-to weapon (for crosshair) - switchingweapon = getstati(STAT_SWITCHINGWEAPON); + switchingweapon = STAT(SWITCHINGWEAPON); // actually active weapon (for zoom) activeweapon = getstati(STAT_ACTIVEWEAPON); @@ -1801,9 +1805,7 @@ void CSQC_UpdateView(float w, float h) mousepos = mousepos*0.5 + getmousepos(); */ - for(entity e = NULL; (e = nextent(e)); ) if (e.draw) { - WITH(entity, self, e, e.draw(e)); - } + FOREACH_ENTITY(it.draw, LAMBDA(WITH(entity, self, it, it.draw(it)))); addentities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); renderscene(); @@ -1988,7 +1990,7 @@ void CSQC_UpdateView(float w, float h) } } - if(autocvar_hud_damage && !getstati(STAT_FROZEN)) + if(autocvar_hud_damage && !STAT(FROZEN)) { splash_size.x = max(vid_conwidth, vid_conheight); splash_size.y = max(vid_conwidth, vid_conheight); @@ -2101,7 +2103,7 @@ void CSQC_UpdateView(float w, float h) } // edge detection postprocess handling done second (used by hud_powerup) - float sharpen_intensity = 0, strength_finished = getstatf(STAT_STRENGTH_FINISHED), invincible_finished = getstatf(STAT_INVINCIBLE_FINISHED); + float sharpen_intensity = 0, strength_finished = STAT(STRENGTH_FINISHED), invincible_finished = STAT(INVINCIBLE_FINISHED); if (strength_finished - time > 0) { sharpen_intensity += (strength_finished - time); } if (invincible_finished - time > 0) { sharpen_intensity += (invincible_finished - time); } @@ -2133,9 +2135,7 @@ void CSQC_UpdateView(float w, float h) } else */ // draw 2D entities - for (entity e = NULL; (e = nextent(e)); ) if (e.draw2d) { - WITH(entity, self, e, e.draw2d(e)); - } + FOREACH_ENTITY(it.draw2d, LAMBDA(WITH(entity, self, it, it.draw2d(it)))); Draw_ShowNames_All(); Debug_Draw();