feat: subtler advanced highlighting

This commit is contained in:
TrèsAbhi committed 2025-08-06 12:33:50 -05:00
1 parent ea90ca21b1
commit 86f4712b87
2 files changed
+13 -7

No files matched your search

@@ -7,8 +7,10 @@ import { invalidate, useFrame } from '@react-three/fiber';
import { useEffect } from 'react'; import { useEffect } from 'react';
import { import {
MeshBasicMaterial, MeshBasicMaterial,
NormalBlending,
Object3D, Object3D,
ShaderMaterial, ShaderMaterial,
SubtractiveBlending,
UniformsLib, UniformsLib,
UniformsUtils, UniformsUtils,
Vector2, Vector2,
@@ -32,6 +34,9 @@ const excludeMaterial = new MeshBasicMaterial({
colorWrite: false, colorWrite: false,
}); });
const date = new Date();
const isHalloween = date.getMonth() === 9 && date.getDate() === 31;
export function PrimaryArmorSceneComponent({ export function PrimaryArmorSceneComponent({
node, node,
thickness, thickness,
@@ -46,6 +51,8 @@ export function PrimaryArmorSceneComponent({
fog: true, fog: true,
transparent: true, transparent: true,
blending: isHalloween ? SubtractiveBlending : NormalBlending,
uniforms: UniformsUtils.merge([ uniforms: UniformsUtils.merge([
UniformsLib.common, UniformsLib.common,
UniformsLib.fog, UniformsLib.fog,
@@ -25,7 +25,6 @@ uniform mat4 inverseProjectionMatrix;
uniform highp sampler2D spacedArmorBuffer; uniform highp sampler2D spacedArmorBuffer;
uniform highp sampler2D spacedArmorDepth; uniform highp sampler2D spacedArmorDepth;
const float HALF = 0.5;
const float EXPLOSION_DAMAGE_FACTOR = 1.1; const float EXPLOSION_DAMAGE_FACTOR = 1.1;
const float RANDOMIZATION_FACTOR = 0.05; const float RANDOMIZATION_FACTOR = 0.05;
const float GREEN_VALUE = 0.392; const float GREEN_VALUE = 0.392;
@@ -38,7 +37,7 @@ float getDistance(vec2 coord, float depth) {
vec3 getPenetrationColor(bool isThreeCalibersRule, bool couldHaveRicochet) { vec3 getPenetrationColor(bool isThreeCalibersRule, bool couldHaveRicochet) {
if (advancedHighlighting && couldHaveRicochet) { if (advancedHighlighting && couldHaveRicochet) {
return vec3(0.0, 1.0, isThreeCalibersRule ? 1.0 : 0.0); return vec3(0.0, 1.0, isThreeCalibersRule ? 0.5 : 0.0);
} }
return vec3(0.0, 1.0, 0.0); return vec3(0.0, 1.0, 0.0);
@@ -81,12 +80,12 @@ void main() {
float distFromArmor = primaryDist - spacedDist; float distFromArmor = primaryDist - spacedDist;
if (canSplash) { if (canSplash) {
float finalDamage = HALF * damage * (1.0 - distFromArmor / explosionRadius) - EXPLOSION_DAMAGE_FACTOR * (finalThickness + spacedArmorThickness); float finalDamage = 0.5 * damage * (1.0 - distFromArmor / explosionRadius) - EXPLOSION_DAMAGE_FACTOR * (finalThickness + spacedArmorThickness);
splashChance = step(0.0, finalDamage); splashChance = step(0.0, finalDamage);
penetrationChance = 0.0; penetrationChance = 0.0;
} else { } else {
remainingPen -= HALF * remainingPen * distFromArmor; remainingPen -= 0.5 * remainingPen * distFromArmor;
} }
} }
} }
@@ -98,17 +97,17 @@ void main() {
penetrationChance = clamp(1.0 - (delta + randomization) / (2.0 * randomization), 0.0, 1.0); penetrationChance = clamp(1.0 - (delta + randomization) / (2.0 * randomization), 0.0, 1.0);
if (canSplash) { if (canSplash) {
float splashDamage = HALF * damage - EXPLOSION_DAMAGE_FACTOR * finalThickness; float splashDamage = 0.5 * damage - EXPLOSION_DAMAGE_FACTOR * finalThickness;
splashChance = step(0.0, splashDamage); splashChance = step(0.0, splashDamage);
} }
} }
} }
float alpha = opaque ? 1.0 : HALF; float alpha = opaque ? 1.0 : 0.5;
vec3 baseColor = vec3(1.0, splashChance * GREEN_VALUE, 0.0); vec3 baseColor = vec3(1.0, splashChance * GREEN_VALUE, 0.0);
if (advancedHighlighting && didRicochet) { if (advancedHighlighting && didRicochet) {
baseColor = vec3(1.0, baseColor.g, 1.0); baseColor = vec3(1.0, baseColor.g, 0.5);
} }
if (greenPenetration || advancedHighlighting) { if (greenPenetration || advancedHighlighting) {