Răsfoiți Sursa

RendererFXVolume: clean some code

lviguier 1 lună în urmă
părinte
comite
3316401ca0
2 a modificat fișierele cu 13 adăugiri și 19 ștergeri
  1. 11 17
      h3d/impl/RendererFXVolume.hx
  2. 2 2
      h3d/scene/Renderer.hx

+ 11 - 17
h3d/impl/RendererFXVolume.hx

@@ -11,7 +11,6 @@ class RendererFXVolume extends h3d.scene.Object {
 	public var outerShape : Shape;
 	public var effects : Array<h3d.impl.RendererFX> = [];
 
-	var renderer : h3d.scene.Renderer;
 	var factor : Float = 0.;
 	var cam : h3d.Camera;
 
@@ -25,31 +24,26 @@ class RendererFXVolume extends h3d.scene.Object {
 		super.sync(ctx);
 
 		#if !editor
-		if (renderer == null)
-			this.renderer = ctx.scene.renderer;
-
 		if (effects == null) return;
-		var newFactor = getFactor();
-		if (factor <= 0 && newFactor > 0)
-			this.renderer.volumeEffects.push(this);
-
-		if (factor > 0 && newFactor <= 0)
-			this.renderer.volumeEffects.remove(this);
+		factor = getFactor(ctx.camera.pos);
+		var renderer = ctx.scene.renderer;
+		if (factor > 0 && !renderer.volumeEffects.contains(this))
+			renderer.volumeEffects.push(this);
 
-		factor = newFactor;
+		if (factor <= 0 && !renderer.volumeEffects.contains(this))
+			renderer.volumeEffects.remove(this);
 		#end
 	}
 
 	override function onRemove() {
 		super.onRemove();
-		if (this.renderer == null) return;
-		this.renderer.volumeEffects.remove(this);
+		var renderer = getScene().renderer;
+		if (renderer == null) return;
+		renderer.volumeEffects.remove(this);
 	}
 
-	public function getFactor() : Float {
-		if (cam == null)
-			cam = getScene().camera;
-		var distance = (getAbsPos().getPosition() - cam.pos).length();
+	public function getFactor(pos : h3d.col.Point) : Float {
+		var distance = (getAbsPos().getPosition() - pos).length();
 
 		switch ([innerShape, outerShape]) {
 			case [Sphere(r1), Sphere(r2)]:

+ 2 - 2
h3d/scene/Renderer.hx

@@ -230,7 +230,7 @@ class Renderer extends hxd.impl.AnyProps {
 	public function processVolumetricEffects() {
 		if (volumeEffects.length == 1) {
 			for (e in volumeEffects[0].effects) {
-				var newEffect = e.modulate(volumeEffects[0].getFactor());
+				var newEffect = e.modulate(volumeEffects[0].getFactor(ctx.camera.pos));
 				if (newEffect == null)
 					continue;
 				toRemove.push(newEffect);
@@ -284,7 +284,7 @@ class Renderer extends hxd.impl.AnyProps {
 					continue;
 
 				for (e2 in volume2.effects) {
-					var newEffect = e1.transition(e1, e2, volume2.getFactor());
+					var newEffect = e1.transition(e1, e2, volume2.getFactor(ctx.camera.pos));
 					if (newEffect != null) {
 						this.toRemove.push(newEffect);
 						this.effects.push(newEffect);