public Material PickMaterial(Decal canvas, out bool isDirty) { var size = new DecalSize(canvas.decalTexture.width, canvas.decalTexture.height); Pool pool; if (m_pool.TryGetValue(size, out pool)) { return(pool.Pick(out isDirty)); } isDirty = false; return(null); }
public virtual void Mark(Decal decal, Vector3 point) { if (useGradientColors) { color = Decal.GetNextGradient(); } if (lightnessVariation > 0) { float h, s, v; Color.RGBToHSV(color, out h, out s, out v); color = Color.HSVToRGB(h, s, _startV - Random.Range(0, lightnessVariation)); } if (placeSmudge) { decal.PlaceSmudge(point, color, lerp); } else { decal.PlacePixel(point, color, lerp); } switch (onMarkAction) { case OnMarkAction.Disable: gameObject.SetActive(false); break; case OnMarkAction.ScaleDown: if (_cachedTransform.localScale.x <= 0) { goto case OnMarkAction.Disable; } _cachedTransform.localScale = Vector3.MoveTowards(_cachedTransform.localScale, Vector3.zero, scaleDownRate); break; case OnMarkAction.BounceScaleDown: if (_cachedTransform.localScale.x <= 0) { goto case OnMarkAction.Disable; } _cachedTransform.localScale = Vector3.MoveTowards(_startScale, Vector3.zero, 1f - ((float)bounces / _bounceStart)); bounces--; break; case OnMarkAction.BounceAndDisable: if (bounces <= 0) { goto case OnMarkAction.Disable; } bounces--; break; } }
void OnParticleCollision(GameObject other) { var collCount = part.GetCollisionEvents(other, m_collisionEvents); var safe = part.GetSafeCollisionEventSize(); Decal decal = other.GetComponentInChildren <Decal>(); var count = useSafeCollision ? safe : collCount; if (decal == null) { return; } for (int i = 0; i < count; i++) { Mark(decal, m_collisionEvents[i].intersection); } }
public void RegisterDecal(Decal canvas) { var size = new DecalSize(canvas.decalTexture.width, canvas.decalTexture.height); var pixelCount = size.width * size.height; if (!m_blankCache.ContainsKey(pixelCount)) { var colorArray = new Color32[pixelCount]; m_blankCache.Add(pixelCount, colorArray); } if (m_pool.ContainsKey(size)) { var pool = m_pool[size]; pool.AddMaterial(); } else { var pool = new Pool(canvas.decalMaterial, 10); m_pool.Add(size, pool); } }