public static void ScreenAnimation(GameObject prefab, Vector3 sourcePosition, GameObject target, Canvas canvas, float duration = 1f, int quantity = 1, float scale = 1f, float spread = 50f, Action callback = null) { var config = new ScriptedAnimationConfig(); config.SetPrefab(prefab).SetSourcePosition(sourcePosition).SetTarget(target).SetDuration(duration).SetQuantity(quantity).SetScale(scale).SetSpread(spread).AddCallback(callback); CreateGenericPrize(config, canvas); }
public void StartAnimation(ScriptedAnimationConfig config, int currentQuantity) { this.config = config; callback = config.callback; target = config.target.gameObject; duration = config.duration * Random.Range(0.75f, 1.25f); gameObject.transform.position = config.sourcePosition - new Vector3(Random.Range(-config.spread, config.spread), Random.Range(-config.spread, config.spread)); var offset = (currentQuantity % 10) / 10f * (duration / 2f); var timeOffset = duration / 2f + offset; var randomValueX = Random.Range(-config.spread, config.spread); var randomValueY = Random.Range(-config.spread, config.spread); midPoint = new Vector3(transform.position.x + randomValueX, transform.position.y + randomValueY, transform.position.z); iTween.MoveTo(gameObject, iTween.Hash("position", midPoint, "time", timeOffset, "easeType", iTween.EaseType.easeOutQuart)); iTween.ScaleTo(gameObject, iTween.Hash("scale", Vector3.one * config.scale, "time", timeOffset, "easeType", iTween.EaseType.easeOutQuart, "OnComplete", "NextAnimation")); //NextAnimation(); }
public static void CreateGenericPrize(ScriptedAnimationConfig config, Canvas canvas) { if (config.quantity == 0 || config.sourcePosition == null) { config.callback(); return; } var total = config.quantity; ///A cada ficha, desconta da quantidade de fichas criadas, ///ao terminar de animar todas as fichas chama o callback var configCallback = config.callback; canvas.sortingLayerName = config.layerName; canvas.sortingOrder = config.orderId; for (var i = 0; i < config.quantity; i++) { var prizeGO = Instantiate(config.prefab); prizeGO.transform.SetParent(canvas.transform); prizeGO.transform.position = config.sourcePosition; prizeGO.transform.localScale = config.scale * Vector3.one; var coinAnimation = prizeGO.GetComponent <ScriptedAnimationController>(); if (!coinAnimation) { coinAnimation = prizeGO.AddComponent <ScriptedAnimationController>(); } config.callback = () => { if (--total == 0) { configCallback?.Invoke(); } }; coinAnimation.StartAnimation(config, i); } }