private async Task AddEnergyAndParticles(TweetUi tweetUi, PackedScene particlesPackedScene, Vector2 particlesEndPosition, Action <int> addEnergy) { if (!(particlesPackedScene.Instance() is Node2D buffParticles)) { return; } GetOwner <Control>().AddChild(buffParticles); buffParticles.SetGlobalPosition(tweetUi.GetGlobalPosition() + tweetUi.GetSize() / 2); buffAnimationTween.InterpolateMethod(buffParticles, "set_global_position", buffParticles.GetGlobalPosition(), particlesEndPosition, 1f, Tween.TransitionType.Sine, Tween.EaseType.InOut); buffAnimationTween.Start(); await ToSignal(buffAnimationTween, "tween_completed"); addEnergy.Invoke(GameValues.tweetEnergy); var timer = new Timer { OneShot = true }; AddChild(timer); timer.Start(1); await ToSignal(timer, "timeout"); buffParticles.GetNode <Particles2D>("Particles2D").Emitting = false; timer.Start(1); await ToSignal(timer, "timeout"); buffParticles.QueueFree(); timer.QueueFree(); }
private async void AddBuff(Tweet tweet, TweetUi tweetUi) { var isPositive = tweet.entities.hashtags.Any(hashTag => positiveHashTags.Contains(hashTag.text.ToLower())); var isNegative = tweet.entities.hashtags.Any(hashTag => negativeHashTags.Contains(hashTag.text.ToLower())); if (isPositive && !isNegative) { await AddEnergyAndParticles(tweetUi, playerBuffParticlesPackedScene, playerEnergy.GetGlobalPosition() + playerEnergy.GetSize() / 2, gameState.AddPlayerEnergy); } else if (!isPositive && isNegative) { gameState.negativeTweetCount++; await AddEnergyAndParticles(tweetUi, demonBuffParticlesPackedScene, demonEnergy.GetGlobalPosition() + demonEnergy.GetSize() / 2, gameState.AddDemonEnergy); } else if (isPositive && isNegative) { gameState.negativeTweetCount++; await AddEnergyAndParticles(tweetUi, playerBuffParticlesPackedScene, playerEnergy.GetGlobalPosition() + playerEnergy.GetSize() / 2, gameState.AddPlayerEnergy); await AddEnergyAndParticles(tweetUi, demonBuffParticlesPackedScene, demonEnergy.GetGlobalPosition() + demonEnergy.GetSize() / 2, gameState.AddDemonEnergy); } }