mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
fix(vfx): remove ball contact sparks
This commit is contained in:
@@ -119,7 +119,6 @@ const THRUST_THRESHOLD = 1.0 # percent
|
||||
var _engine_cores: Array[MeshInstance3D] = []
|
||||
var _engine_flames: Array[MeshInstance3D] = []
|
||||
var _engine_lights: Array[OmniLight3D] = []
|
||||
var _impact_sparks: GPUParticles3D
|
||||
|
||||
|
||||
func _ready():
|
||||
@@ -264,17 +263,6 @@ func _build_movement_vfx() -> void:
|
||||
add_child(light)
|
||||
_engine_lights.append(light)
|
||||
|
||||
_impact_sparks = _make_particles(
|
||||
"ImpactSparks", Color(1.0, 0.72, 0.22, 1.0), Vector2(0.09, 0.3),
|
||||
28, 0.32, Vector3.UP, 180.0, 5.0, 12.0
|
||||
)
|
||||
_impact_sparks.one_shot = true
|
||||
_impact_sparks.explosiveness = 1.0
|
||||
_impact_sparks.local_coords = false
|
||||
_impact_sparks.emitting = false
|
||||
add_child(_impact_sparks)
|
||||
|
||||
|
||||
func _vfx_material(color: Color, energy: float) -> StandardMaterial3D:
|
||||
var mat := StandardMaterial3D.new()
|
||||
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
||||
@@ -287,34 +275,6 @@ func _vfx_material(color: Color, energy: float) -> StandardMaterial3D:
|
||||
return mat
|
||||
|
||||
|
||||
func _make_particles(
|
||||
particle_name: String, color: Color, size: Vector2, amount: int,
|
||||
lifetime: float, direction: Vector3, spread: float,
|
||||
velocity_min: float, velocity_max: float
|
||||
) -> GPUParticles3D:
|
||||
var quad := QuadMesh.new()
|
||||
quad.size = size
|
||||
quad.material = _vfx_material(color, 2.2)
|
||||
var process := ParticleProcessMaterial.new()
|
||||
process.direction = direction
|
||||
process.spread = spread
|
||||
process.initial_velocity_min = velocity_min
|
||||
process.initial_velocity_max = velocity_max
|
||||
process.gravity = Vector3.ZERO
|
||||
process.scale_min = 0.35
|
||||
process.scale_max = 1.0
|
||||
var particles := GPUParticles3D.new()
|
||||
particles.name = particle_name
|
||||
particles.amount = amount
|
||||
particles.lifetime = lifetime
|
||||
particles.local_coords = true
|
||||
particles.process_material = process
|
||||
particles.draw_pass_1 = quad
|
||||
particles.visibility_aabb = AABB(Vector3(-3, -3, -1), Vector3(6, 6, 12))
|
||||
particles.emitting = false
|
||||
return particles
|
||||
|
||||
|
||||
func _update_movement_vfx() -> void:
|
||||
if _engine_flames.is_empty():
|
||||
return
|
||||
@@ -354,10 +314,6 @@ func _on_body_entered(body: Node) -> void:
|
||||
var relative_speed := (linear_velocity - (body as Ball).linear_velocity).length()
|
||||
var intensity := clampf(inverse_lerp(3.0, 24.0, relative_speed), 0.12, 1.0)
|
||||
var contact_pos := (global_position + (body as Ball).global_position) * 0.5
|
||||
if _impact_sparks:
|
||||
_impact_sparks.position = to_local(contact_pos)
|
||||
_impact_sparks.amount_ratio = lerpf(0.25, 1.0, intensity)
|
||||
_impact_sparks.restart()
|
||||
ball_contact.emit(intensity, contact_pos)
|
||||
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ The largest gap between this and a AAA-feeling product is presentation, not code
|
||||
|
||||
- [ ] **Audio — there is none.** Zero sound files, zero `AudioStreamPlayer` nodes, no bus layout. Needs: engine hum pitched to throttle, turbo whoosh, ball impacts scaled by collision impulse, wall scrapes, goal explosion, crowd bed, UI clicks, countdown beeps, music. Can be driven off `Ship`'s existing telemetry signals.
|
||||
- [x] SSAO/SSIL in the arena Environments — cheapest single perceived-quality win available; grounds the ships against the deck and gives the fillets and goal recesses real depth.
|
||||
- [x] VFX on anything that moves: throttle-reactive engine cores and simple rear flames, a speed-scaled ball trail, contact sparks and team-tinted goal bursts.
|
||||
- [x] VFX on anything that moves: throttle-reactive engine cores and simple rear flames, a speed-scaled ball trail and team-tinted goal bursts.
|
||||
- [x] Impact feedback — intensity-scaled screen shake, unscaled hit-stop, HUD flash and controller rumble on ball contact.
|
||||
- [x] Camera feel in `ship_camera.gd` — speed-based FOV widening, turbo kick-back and decaying impact shake.
|
||||
- [x] Goal celebration sequence: goal burst, team-tinted flash/title card, dedicated camera cut and slow-motion beat after authoritative score registration and before reset/kickoff.
|
||||
|
||||
Reference in New Issue
Block a user