protected virtual void UpdateSprite(int newSpriteIndex, float newSpriteElapsed) { VFXAppearanceController shadow = null; spriteIndex = newSpriteIndex; spriteElapsed = newSpriteElapsed; sprite = null; spriteNormal = null; if (sprites != null) { if ((spriteIndex > -1) && (sprites.Length > spriteIndex)) { sprite = sprites[spriteIndex]; if (spriteNormals != null) { /*halmeida - if spriteNormals exists, it necessarily has the same length as sprites.*/ spriteNormal = spriteNormals[spriteIndex]; } } } if (sprite == null) { spriteWidth = 0f; focusOneValidity = false; focusTwoValidity = false; } else { spriteWidth = sprite.bounds.size.x; focusOffsetOne = focusOffsetsOne[spriteIndex]; focusOffsetTwo = focusOffsetsTwo[spriteIndex]; if (spriteFlip) { focusOffsetOne = MirrorOffsetWithinSprite(focusOffsetOne); focusOffsetTwo = MirrorOffsetWithinSprite(focusOffsetTwo); } focusOneValidity = focusOneValidities[spriteIndex]; focusTwoValidity = focusTwoValidities[spriteIndex]; if (shadows != null) { for (int i = 0; i < shadows.Length; i++) { shadow = shadows[i]; if (shadow != null) { /*halmeida - when updating the sprite of a shadow, I never lock the sprite. If a shadow * has its sprite fixed at some point, that point is its creation.*/ shadow.SetSprite(sprite, spriteFlip, false); } } } } }
public virtual void CreateShadow(ShadowConfiguration shadowConfig) { GameObject shadowObject = null; VFXAppearanceController shadow = null; int shadowIndex = 0; string properShadowName = null; if (shadowConfig != null) { if (!paused) { shadowIndex = (shadowObjects != null) ? shadowObjects.Length : 0; properShadowName = "ShadowObject"; } else { shadowIndex = (pausedShadowObjects != null) ? pausedShadowObjects.Length : 0; properShadowName = "PausedShadowObject"; } shadowObject = new GameObject(properShadowName + shadowIndex); if (shadowObject != null) { shadow = shadowObject.AddComponent <VFXSpriteController>(); if (shadow != null) { if (!paused) { UsefulFunctions.IncreaseArray <GameObject>(ref shadowObjects, shadowObject); UsefulFunctions.IncreaseArray <VFXAppearanceController>(ref shadows, shadow); } else { UsefulFunctions.IncreaseArray <GameObject>(ref pausedShadowObjects, shadowObject); UsefulFunctions.IncreaseArray <VFXAppearanceController>(ref pausedShadows, shadow); } if (shadowConfig.fixedPosition) { shadowObject.transform.position = transform.position; shadowObject.transform.rotation = transform.rotation; } else { shadowObject.transform.SetParent(transform, false); shadowObject.transform.localPosition = Vector3.zero; shadowObject.transform.localRotation = Quaternion.identity; } CorrectShadowDepths(transform.position.z); shadow.ChangeRenderingMaterial(shadowConfig.renderingMaterial); shadow.SetSprite(sprite, spriteFlip, shadowConfig.fixedSprite); shadow.ConfigureScaleEvolution(shadowConfig.scaleOrigin, shadowConfig.scaleTargets, shadowConfig.scalingDurations); shadow.ConfigureAlphaEvolution(shadowConfig.alphaOrigin, shadowConfig.alphaTargets, shadowConfig.fadeDurations); shadow.ConfigureOutlineEvolution(shadowConfig.outlineColors, shadowConfig.outlineWidth, shadowConfig.outlineColorInterval, shadowConfig.outlineAlphaOrigin, shadowConfig.outlineAlphaTargets, shadowConfig.outlineFadeDurations); shadow.ConfigureColorAddition(shadowConfig.contentColorAddition); shadow.StartEvolutions(shadowConfig.totalDuration); } else { Destroy(shadowObject); } } } }