public void setup(LightColorSource colorSource) { LightColorSource[] colorChain = colorSource.colorSources; List<LightColorSource> colorSources = new List<LightColorSource>(); for(int i = 0; i < colorChain.Length; i++) { colorSources.Add(colorChain[i]); } colorSources.Sort(isCloser); }
public int isCloser(LightColorSource x, LightColorSource y) { float xDistance = Vector3.Distance(transform.position, x.transform.position); float yDistance = Vector3.Distance(transform.position, y.transform.position); if (xDistance < yDistance) { return -1; } else if (xDistance == yDistance) { return 0; } else { return 1; } }
public void setupChain(LightColorSource[] allSources) { colorSources = allSources; LightColorSource lastSource = this; float totalDistance = 0; for(int i = colorSources.Length-1; i >= 0; i--) { totalDistance += Vector3.Distance(lastSource.transform.position, colorSources[i].transform.position); colorSources[i].distanceFromEnd = totalDistance; lastSource = colorSources[i]; } for(int i = 0; i < colorSources.Length; i++) { float pointInChain = colorSources[i].distanceFromEnd / totalDistance; Color color = Color.Lerp(this.color, Color.white, pointInChain); colorSources[i].setup(color, totalDistance, colorSources); } }
public void setup(Color color, float totalDistance, LightColorSource[] allSources) { this.color = color; totalChainDistance = totalDistance; colorSources = allSources; }