36 lines
871 B
JavaScript
36 lines
871 B
JavaScript
|
|
class entity_torch_t extends entity_t {
|
|
_init() {
|
|
this._texture = 30;
|
|
this._model = model_torch;
|
|
|
|
this._anim = [0.05, [0,1,2,1,2,0,0,1,2]];
|
|
|
|
this.p.x -= 16;
|
|
this.p.z -= 16;
|
|
this._light_pos = this.p;
|
|
|
|
// Find which wall we're on; move to the torch model towards the wall
|
|
// and the light position outwards
|
|
for (let trace_dir of [vec3(-32,0,0), vec3(32,0,0), vec3(0,0,-32), vec3(0,0,32)]) {
|
|
let trace_end = vec3_add(this.p, trace_dir);
|
|
if (map_trace(this.p, vec3_add(this.p, trace_dir))) {
|
|
this.p = vec3_add(this.p, vec3_mulf(trace_dir, 0.4));
|
|
this._light_pos = vec3_sub(this.p, vec3_mulf(trace_dir, 2));
|
|
break;
|
|
}
|
|
}
|
|
|
|
this._light = 0;
|
|
}
|
|
|
|
_update() {
|
|
super._update();
|
|
|
|
if (Math.random() > 0.8) {
|
|
this._light = Math.random();
|
|
}
|
|
r_push_light(this._light_pos, Math.sin(game_time)+this._light+6, 255,192,16);
|
|
}
|
|
}
|