]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
make ring fade distance dependent on current ring radius
authorJuhu <5894800-Juhu_@users.noreply.gitlab.com>
Wed, 26 Jan 2022 21:55:59 +0000 (22:55 +0100)
committerJuhu <5894800-Juhu_@users.noreply.gitlab.com>
Wed, 26 Jan 2022 21:55:59 +0000 (22:55 +0100)
gamemodes-server.cfg
qcsrc/common/gamemodes/gamemode/br/cl_ring.qc
qcsrc/common/gamemodes/gamemode/br/ring.qh
qcsrc/common/gamemodes/gamemode/br/sv_ring.qc

index f81313c0f5e071403fd16815da17261af7959502..70c754afa8527ba7bc87f68178ae03ddbe5941f5 100644 (file)
@@ -605,5 +605,6 @@ set g_br_ring_timing "0.6 0.8 0.9" "timing values relative to g_br_ring_duration
 set g_br_ring_strength "2.5 5 10 20 50" "damage values for each stage including beginning and end"
 set g_br_ring_wait 30 "wait time before each ring stage"
 set g_br_ring_center_factor 0.25 "factor by which the ring can deviate from the center of the map, 0 means always completely centered, 1 means completely random within world bounds"
-set g_br_ring_fadedistance 2000 "distance at which the ring slowly becomes visible until it reaches g_br_ring_alpha when standing right in front of it"
+set g_br_ring_fadedistance 0.5 "value multiplied by the current ring radius defines the distance at which the ring slowly becomes visible until it reaches g_br_ring_alpha when standing right in front of it"
+set g_br_ring_fadedistance_min 2000 "minimum value generated by g_br_ring_fadedistance"
 set g_br_ring_exitvehicle 0 "players can't use vehicles outside of the ring"
index dd58c8a05efaa8cd3e64015fd1b078ed010938a9..5f830769b58deeb6e4fd4509d293183fbf9ae5f3 100644 (file)
@@ -27,7 +27,8 @@ void ring_draw(entity this)
     }
 
     this.scale = current_radius / RING_MODEL_RADIUS;
-    this.alpha = max((1 - min(max(current_radius - vlen((csqcplayer.origin + csqcplayer.view_ofs) - this.origin), 0) / this.br_ring_fadedistance, 1)) * this.br_ring_alpha, 0.01);
+    float dist_to_ring = max(current_radius - vlen((csqcplayer.origin + csqcplayer.view_ofs) - this.origin), 0);
+    this.alpha = max((1 - min(dist_to_ring / max(current_radius * this.br_ring_fadedistance, this.br_ring_fadedistance_min), 1)) * this.br_ring_alpha, 0.01);
 }
 
 void ring_draw2d(entity this)
@@ -88,7 +89,8 @@ NET_HANDLE(ENT_CLIENT_RING, bool isnew)
 
         this.br_ring_alpha = bound(0.01, ReadCoord(), 1);
 
-        this.br_ring_fadedistance = max(ReadCoord(), 1);
+        this.br_ring_fadedistance = max(ReadCoord(), 0);
+        this.br_ring_fadedistance_min = max(ReadCoord(), 1);
 
         this.br_ring_stage_count = max(ReadByte(), 1);
         this.br_ring_stage_waittime = max(ReadCoord(), 0);
index 5e76989d88fcba58daf6fd50d2aae0e601cc5821..5253771f6f0a94ed4fee9d6827dbfd13facdaf65 100644 (file)
@@ -11,6 +11,7 @@ const int BR_RING_MOVE   = 4;
 .float br_ring_duration;
 .float br_ring_alpha;
 .float br_ring_fadedistance;
+.float br_ring_fadedistance_min;
 .int br_ring_stage_count;
 .float br_ring_stage_waittime;
 .float br_ring_stage_timing[BR_RING_STAGE_MAX];
index 6404f1d702ef5b084932082632804ed67a97e5e4..815b2633516cf347b39bd6c383d361c295cfaa34 100644 (file)
@@ -15,7 +15,8 @@ void ring_alignPosition(entity this);
 float autocvar_g_br_ring_duration = 150;
 vector autocvar_g_br_ring_color = '1 0 0'; // FIXME: put visual-only cvar client side?
 float autocvar_g_br_ring_alpha = 0.5; // FIXME: put visual-only cvar client side?
-float autocvar_g_br_ring_fadedistance = 2000; // FIXME: put visual-only cvar client side?
+float autocvar_g_br_ring_fadedistance = 0.5; // FIXME: put visual-only cvar client side?
+float autocvar_g_br_ring_fadedistance_min = 2000; // FIXME: put visual-only cvar client side?
 float autocvar_g_br_ring_radius = -1; // useful for per map settings
 string autocvar_g_br_ring_timing = "0.6 0.8 0.9";
 string autocvar_g_br_ring_strength = "2.5 5 10 20 50";
@@ -37,7 +38,8 @@ entity ring_initialize()
     this.br_ring_stage = -1;
     this.colormod = autocvar_g_br_ring_color; // TODO: color changing ring
     this.alpha = this.br_ring_alpha = bound(0.01, autocvar_g_br_ring_alpha, 1);
-    this.br_ring_fadedistance = max(autocvar_g_br_ring_fadedistance, 1);
+    this.br_ring_fadedistance = max(autocvar_g_br_ring_fadedistance, 0);
+    this.br_ring_fadedistance_min = max(autocvar_g_br_ring_fadedistance_min, 1);
     this.br_ring_stage_waittime = max(autocvar_g_br_ring_wait, 0);
 
     bool has_invalid_timings = ring_parseTiming(this);
@@ -73,6 +75,7 @@ bool ring_send(entity this, entity to, float sf)
         WriteVector(MSG_ENTITY, this.colormod);
         WriteCoord(MSG_ENTITY, this.br_ring_alpha);
         WriteCoord(MSG_ENTITY, this.br_ring_fadedistance);
+        WriteCoord(MSG_ENTITY, this.br_ring_fadedistance_min);
 
         WriteByte(MSG_ENTITY, this.br_ring_stage_count);
         WriteCoord(MSG_ENTITY, this.br_ring_stage_waittime);