MCPcopy Create free account
hub / github.com/electronstudio/raylib-python-cffi / LightSystem

Class LightSystem

examples/shaders/light_system.py:4–39  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2
3
4class LightSystem:
5 MAX_LIGHTS = 4 #// Max dynamic lights supported by shader
6 lightsCount = 0
7 lights: list['Light'] = []
8
9 def __init__(self, ambient = [ 0.2, 0.2, 0.2, 1.0 ], *ls):
10 self.shader = rl.LoadShader(b"resources/shaders/fogLight.vs",
11 b"resources/shaders/fogLight.fs");
12
13 #// Get some shader loactions
14 self.shader.locs[rl.SHADER_LOC_MATRIX_MODEL] = rl.GetShaderLocation(self.shader, b"matModel")
15 self.shader.locs[rl.SHADER_LOC_VECTOR_VIEW] = rl.GetShaderLocation(self.shader, b"viewPos")
16
17 #// ambient light level
18 self.ambientLoc = rl.GetShaderLocation(self.shader, b"ambient")
19 v = rl.ffi.new("struct Vector4 *", ambient)
20 rl.SetShaderValue(self.shader, self.ambientLoc, v, rl.SHADER_UNIFORM_VEC4)
21
22 for light in ls:
23 self.add(light)
24
25 def add(self, light):
26 light.configure(len(self.lights), self.shader)
27 self.lights.append(light)
28 if len(self.lights) > self.MAX_LIGHTS:
29 raise Exception("Too many lights")
30
31 def update(self, cameraPos):
32 rl.SetShaderValue(self.shader, self.shader.locs[rl.SHADER_LOC_VECTOR_VIEW], rl.ffi.new("struct Vector3 *",cameraPos), rl.SHADER_UNIFORM_VEC3)
33 for light in self.lights:
34 light.UpdateLightValues()
35
36 def draw(self):
37 for light in self.lights:
38 if light.enabled:
39 rl.DrawSphereEx(light.position[0], 0.2, 8, 8, light.color)
40
41
42

Callers 2

shaders_fog.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected