nodes/light.pyΒΆ
Part of Q1K3.
1"""Temporary fading PointLight3D: used for muzzle flash + explosions."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING
6
7from simvx.core import Node3D, PointLight3D, Vec3
8
9if TYPE_CHECKING: # pragma: no cover
10 from .root import Q1K3Root
11
12
13class TempLight(Node3D):
14 def __init__(
15 self,
16 game: Q1K3Root,
17 pos: Vec3,
18 intensity: float,
19 colour: tuple[float, float, float],
20 duration: float,
21 ) -> None:
22 super().__init__()
23 self.game = game
24 self.position = pos
25 self._intensity = intensity
26 self._duration = duration
27 self._spawn_time = game.game_time
28 self._dead = False
29 self.light = PointLight3D(
30 position=(0, 0, 0),
31 colour=colour,
32 intensity=intensity,
33 range=600.0,
34 )
35 self.add_child(self.light)
36
37 def on_update(self, dt: float) -> None:
38 if self._dead:
39 return
40 elapsed = self.game.game_time - self._spawn_time
41 if elapsed >= self._duration:
42 self._dead = True
43 self.game.queue_remove(self)
44 return
45 # Linear fade
46 self.light.intensity = self._intensity * (1.0 - elapsed / self._duration)