public static async Task <(ResultMessage result, byte[] effectsHash, EffectProcessorsContainer container)> ProcessQuantumWithoutValidation(Domain.ExecutionContext context, MessageEnvelope envelope)
        {
            var messageType = envelope.Message.MessageType;

            if (messageType == MessageTypes.RequestQuantum)
            {
                var request = (RequestQuantum)envelope.Message;
                messageType = request.RequestMessage.MessageType;
                request.RequestMessage.AccountWrapper = context.AccountStorage.GetAccount(request.RequestMessage.Account);
            }

            context.QuantumProcessor.TryGetValue(messageType, out var processor);

            var container      = new EffectProcessorsContainer(context, envelope, new DiffObject());
            var processContext = processor.GetContext(container);

            var res = await processor.Process(processContext);

            context.QuantumStorage.AddQuantum(envelope, envelope.ComputeHash());

            var effectsHash = new EffectsContainer {
                Effects = container.Effects
            }.ComputeHash();

            return(res, effectsHash, container);
        }
        public static async Task <(ResultMessage result, byte[] effectsHash, EffectProcessorsContainer container)> ProcessQuantumIsolated(this IntegrationTestEnvironment environment, MessageEnvelope envelope)
        {
            var context = new AlphaContext(environment.AlphaWrapper.Context.Settings, new MockStorage(), environment.AlphaWrapper.Context.StellarDataProvider);

            await context.Init();

            //wait while all pending updates will be saved
            while (await environment.AlphaWrapper.Context.PersistenceManager.GetLastApex() != environment.AlphaWrapper.Context.QuantumStorage.CurrentApex)
            {
                Thread.Sleep(100);
            }
            await context.Setup(await environment.AlphaWrapper.Context.PersistenceManager.GetSnapshot(environment.AlphaWrapper.Context.QuantumStorage.CurrentApex));

            var messageType = envelope.Message.MessageType;

            if (messageType == MessageTypes.RequestQuantum)
            {
                messageType = ((RequestQuantum)envelope.Message).RequestMessage.MessageType;
            }

            context.QuantumProcessor.TryGetValue(messageType, out var processor);

            var container      = new EffectProcessorsContainer(context, envelope, new DiffObject());
            var processContext = processor.GetContext(container);

            var res = await processor.Process(processContext);

            var effectsHash = new EffectsContainer {
                Effects = container.Effects
            }.ComputeHash();

            return(res, effectsHash, container);
        }
コード例 #3
0
    public void Explode()
    {
        var deathExplosion = Instantiate(deathExplosionPrefab);

        deathExplosion.transform.position = transform.position;
        deathExplosion.transform.parent   = EffectsContainer.GetEffectsContainer().transform;
        var main = deathExplosion.main;

        main.startColor = configuration.mainColor;


        var rigidBody     = GetComponent <Rigidbody> ();
        var explosionBody = deathExplosion.GetComponent <Rigidbody> ();

        explosionBody.velocity = rigidBody.velocity;

        EventManager.GetEventManager().planetExplodedEvent.Invoke(this);

        if (configuration.isPlayer)
        {
            mainCamera.transform.parent = transform.parent;
        }

        Destroy(gameObject);
    }
コード例 #4
0
    private static void ExtractDataFromContainer(EffectsContainer container)
    {
        int nextEffectID = 0;

        //Instatiate VFX Parent
        GameObject parent = new GameObject("VFX Container");

        foreach (EffectLinks links in container.Links)
        {
            // Instantiate VFX in Parent GameObject
            var effect = Object.Instantiate(links.Effect, parent.transform);

            //Add VFX to dictionary
            Effects.Add(nextEffectID, new Effect
            {
                VisualEffect = effect,
                MaxAmount    = links.MaxAmount
            });

            //Weapons
            foreach (EffectLinks.WeaponLinks weapon in links.Weapons)
            {
                //Add to weapon dictionary
                if (!WeaponEffects[weapon.WeaponType].ContainsKey(weapon.EventType))
                {
                    WeaponEffects[weapon.WeaponType].Add(weapon.EventType, nextEffectID);
                }

#if UNITY_EDITOR
                else
                {
                    Debug.LogWarning($"You tried to add multiple Visual effects for {weapon.WeaponType} {weapon.EventType} action. \n" +
                                     $" Current Effect: {Effects[WeaponEffects[weapon.WeaponType][weapon.EventType]].VisualEffect.name} \n" +
                                     $"Desired Effect: {links.Effect.name} \n");
                }
#endif
            }

            //Bullets
            foreach (EffectLinks.BulletLinks bullet in links.Bullets)
            {
                //Add to bullet dictionary
                if (!BulletEffects[bullet.BulletType].ContainsKey(bullet.CollisionType))
                {
                    BulletEffects[bullet.BulletType].Add(bullet.CollisionType, nextEffectID);
                }
#if UNITY_EDITOR
                else
                {
                    Debug.LogWarning($"You tried to add multiple Visual effects for {bullet.BulletType} {bullet.CollisionType} action. \n" +
                                     $" Current Effect: {Effects[BulletEffects[bullet.BulletType][bullet.CollisionType]].VisualEffect.name} \n" +
                                     $"Desired Effect: {links.Effect.name} \n");
                }
#endif
            }
            //Increment ID
            nextEffectID++;
        }
    }
コード例 #5
0
        byte[] GetEffectsData(EffectProcessorsContainer effectsContainer)
        {
            var resultEffectsContainer = new EffectsContainer {
                Effects = effectsContainer.Effects
            };

            return(resultEffectsContainer.ToByteArray(buffer.Buffer));
        }