Ejemplo n.º 1
0
        public void OnAttractParticles(ParticleSystem particleSystem, float attractionForce)
        {
            ParticleTargetFulfillment particleTargetFulfillment = targetMapping[particleSystem];

            int particleCount = particleTargetFulfillment.particleCount;

            ParticleSystem.Particle[] particles          = particleTargetFulfillment.particles;
            ParticleTargetType        particleTargetType = particleTargetFulfillment.particleTargetType;
            Transform    targetTransform = particleTargetFulfillment.targetTransform;
            PlayerView   playerView      = particleTargetFulfillment.playerView;
            PlayerFacade playerFacade    = particleTargetFulfillment.playerFacade;

            for (int i = 0; i < particleCount; ++i)
            {
                particles[i].position += attractionForce * (targetTransform.position - particles[i].position).normalized + ((1f - (attractionForce / targetAttraction)) * particles[i].velocity * Time.deltaTime);
            }

            switch (particleTargetType)
            {
            case ParticleTargetType.Aether:
                OnAttractAether(particleSystem, particles, particleCount, targetTransform, playerView);
                break;

            case ParticleTargetType.Respawn:
                OnAttractRespawn(particles, particleCount, targetTransform, playerFacade);
                break;
            }

            particleSystem.SetParticles(particles, particles.Length);
        }
Ejemplo n.º 2
0
        public void OnTargetEnd(ParticleSystem particleSystem)
        {
            ParticleTargetFulfillment particleTargetFulfillment = targetMapping[particleSystem];

            targetMapping[particleSystem] = new ParticleTargetFulfillment()
            {
                tweening = false
            };
            particleSystem.Clear();

            ParticleTargetType particleTargetType = particleTargetFulfillment.particleTargetType;
            int particleCount          = particleTargetFulfillment.particleCount;
            int fulfilledParticleCount = particleTargetFulfillment.fulfilledParticleCount;

            switch (particleTargetType)
            {
            case ParticleTargetType.Aether:
                OnAetherEnd(particleTargetFulfillment.playerView, particleCount - fulfilledParticleCount);
                break;

            case ParticleTargetType.Respawn:
                OnRespawnEnd(particleTargetFulfillment.playerFacade);
                break;
            }
        }
Ejemplo n.º 3
0
        private void OnAttractAether(ParticleSystem particleSystem, ParticleSystem.Particle[] particles, int particleCount, Transform targetTransform, PlayerView playerView)
        {
            ParticleTargetFulfillment particleTargetFulfillment = targetMapping[particleSystem];

            for (int i = 0; i < particleCount; ++i)
            {
                if (particles[i].lifetime >= 0 && (particles[i].position - targetTransform.position).magnitude < 1)
                {
                    particles[i].lifetime = -1;
                    particleTargetFulfillment.fulfilledParticleCount++;
                    aetherGainTrigger.Fire(playerView);
                }
            }

            targetMapping[particleSystem] = particleTargetFulfillment;
        }
Ejemplo n.º 4
0
        public void Target(ParticleTargetRequest particleTargetRequest)
        {
            ParticleSystem particleSystem = particleTargetRequest.particleSystem;

            if (!targetMapping.ContainsKey(particleSystem))
            {
                targetMapping.Add(particleSystem, new ParticleTargetFulfillment()
                {
                    tweening = false
                });
            }

            ParticleTargetFulfillment particleTargetFulfillment = targetMapping[particleSystem];

            if (particleTargetFulfillment.tweening)
            {
                return;
            }

            particleTargetFulfillment = new ParticleTargetFulfillment()
            {
                tweening               = true,
                particles              = new ParticleSystem.Particle[particleTargetRequest.particleCount],
                particleCount          = particleTargetRequest.particleCount,
                fulfilledParticleCount = 0,
                targetTransform        = particleTargetRequest.targetTransform,
                particleTargetType     = particleTargetRequest.particleTargetType,
                playerView             = particleTargetRequest.playerView,
                playerFacade           = particleTargetRequest.playerFacade,
                itemType               = particleTargetRequest.itemType,
            };

            particleSystem.Emit(particleTargetRequest.particleCount);
            particleSystem.GetParticles(particleTargetFulfillment.particles);

            targetMapping[particleSystem] = particleTargetFulfillment;

            targetHashtable["time"]     = particleTargetRequest.targetTime;
            targetHashtable["onupdate"] = (Action <object>)(attractionForce => {
                OnAttractParticles(particleSystem, (float)attractionForce);
            });
            targetHashtable["oncompleteparams"] = particleSystem;

            iTween.ValueTo(gameObject, targetHashtable);
        }