public override void ExplodeOut(Action onCompleted)
        {
            if (_explodingState == ExplodingState.Exploded ||
                _explodingState == ExplodingState.ExplodingOut)
            {
                onCompleted();
                return;
            }

            _onExplodeCompleted = onCompleted;
            _explodingState     = ExplodingState.ExplodingOut;

            for (int i = 0; i < _particles.Count; i++)
            {
                var particle = _particles[i];
                particle.Exploding = true;

                var center = new Vector3D(0.5, 0.5, 0.0);

                var unitVector = particle.Position.X == center.X && particle.Position.Y == center.Y ? //TODO: change for 3d
                                 new Vector3D(0, 1.0, 0) : (particle.Position - center).UnitVector();

                particle.Velocity = unitVector * ExplodeVelocity;
            }
        }
示例#2
0
    public void ToggleExplodeMessageReceived(NetworkInMessage msg)
    {
        // This reads the user ID which we do not need
        msg.ReadInt64();

        // The message sends us the old explode state
        lastState = (ExplodingState)msg.ReadByte();
        ToggleExplode();
    }
        private void CheckExplodingInCompleted()
        {
            if (_particles.All(p => Math.Abs(p.Velocity.X) < 1E-10 &&
                               Math.Abs(p.Velocity.Y) < 1E-10))
            {
                _explodingState = ExplodingState.NotExploding;

                _onExplodeCompleted();
            }
        }
        private void CheckExplodingOutCompleted()
        {
            if (_particles.All(p => (p.Position.X < 0 || p.Position.X > 1.0) ||
                               (p.Position.Y < 0 || p.Position.Y > 1.0)))
            {
                _explodingState = ExplodingState.Exploded;
                _particles.ForEach(p => p.Velocity = Vector3D.Zero); //stop them from getting too far away

                _onExplodeCompleted();
            }
        }
示例#5
0
    public void ResetExplode()
    {
        foreach (BrainStructure sub in explodingStructures)
        {
            sub.modelTransform.localPosition = sub.initialPosition;
        }

        cortex.SetActive(true);
        currentState = ExplodingState.Resting;
        lastState    = ExplodingState.ExplodingIn;
    }
示例#6
0
        // This method moves the structure away from or towards the center
        // If the structure reaches the initial or final position, the function returns true to indicate that exploding is done
        public bool MoveBrainStructure(ExplodingState currentState)
        {
            switch (currentState)
            {
            case ExplodingState.ExplodingOut:
                modelTransform.localPosition += Time.deltaTime / EXPLODING_TRANSITION_TIME_IN_SECONDS * explodingDirection;
                return((modelTransform.localPosition - furthestPosition).magnitude < Time.deltaTime / EXPLODING_TRANSITION_TIME_IN_SECONDS * explodingDirection.magnitude);

            case ExplodingState.ExplodingIn:
                modelTransform.localPosition -= Time.deltaTime / EXPLODING_TRANSITION_TIME_IN_SECONDS * explodingDirection;
                return((modelTransform.localPosition - initialPosition).magnitude < Time.deltaTime / EXPLODING_TRANSITION_TIME_IN_SECONDS * explodingDirection.magnitude);

            default:
                return(false);
            }
        }
        public CircularParticleComponent(Size screenBounds)
        {
            _particleFactory = new ParticleFactory();
            _particles       = _particleFactory.Create(screenBounds).ToList();

            _particles.Sort((a, b) =>
            {
                var delta = a.Position.X - b.Position.X;
                return(Math.Abs(delta) < double.Epsilon ? 0 :
                       (delta > double.Epsilon ? 1 : -1));
            });

            _explodingState     = ExplodingState.NotExploding;
            _onExplodeCompleted = null;

            _leftHand  = null;
            _rightHand = null;
        }
        public override void ExplodeIn(Action onCompleted)
        {
            if (_explodingState == ExplodingState.NotExploding ||
                _explodingState == ExplodingState.ExplodingIn)
            {
                onCompleted();
                return;
            }

            _onExplodeCompleted = onCompleted;
            _explodingState     = ExplodingState.ExplodingIn;

            for (int i = 0; i < _particles.Count; i++)
            {
                _particles[i].Exploding = false;
                _particles[i].Velocity  = Vector3D.Zero;
            }
        }
        public CircularParticleComponent(Size screenBounds)
        {
            _particleFactory = new ParticleFactory();
            _particles = _particleFactory.Create(screenBounds).ToList();

            _particles.Sort((a, b) =>
            {
                var delta = a.Position.X - b.Position.X;
                return Math.Abs(delta) < double.Epsilon ? 0 :
                    (delta > double.Epsilon ? 1 : -1);
            });

            _explodingState = ExplodingState.NotExploding;
            _onExplodeCompleted = null;

            _leftHand = null;
            _rightHand = null;
        }
示例#10
0
    public void ResetExplode()
    {
        foreach (BrainStructure sub in explodingStructures)
        {
            sub.modelTransform.localPosition = sub.initialPosition;
        }

        cortex.SetActive(true);
        currentState = ExplodingState.Resting;
        lastState    = ExplodingState.ExplodingIn;
        if (ExplodeButton != null)
        {
            ExplodeButton.SetActive(true);
        }
        if (CollapseButton != null)
        {
            CollapseButton.SetActive(false);
        }
    }
示例#11
0
    public void ToggleExplode()
    {
        if (this.GetComponent <StateAccessor>().AbleToTakeAnInteraction())
        {
            soundFX.Play();
            // We toggle the last state and then send the message to all other HoloLenses
            switch (lastState)
            {
            case ExplodingState.ExplodingOut:
                lastState    = ExplodingState.ExplodingIn;
                currentState = ExplodingState.ExplodingIn;
                cortex.SetActive(true);
                break;

            case ExplodingState.ExplodingIn:
                lastState    = ExplodingState.ExplodingOut;
                currentState = ExplodingState.ExplodingOut;
                cortex.SetActive(false);     // The cortex should be deactivated before the brain explodes
                break;
            }
        }
    }
        public override void ExplodeOut(Action onCompleted)
        {
            if (_explodingState == ExplodingState.Exploded ||
                _explodingState == ExplodingState.ExplodingOut)
            {
                onCompleted();
                return;
            }

            _onExplodeCompleted = onCompleted;
            _explodingState = ExplodingState.ExplodingOut;

            for (int i = 0; i < _particles.Count; i++)
            {
                var particle = _particles[i];
                particle.Exploding = true;

                var center = new Vector3D(0.5, 0.5, 0.0);

                var unitVector = particle.Position.X == center.X && particle.Position.Y == center.Y ? //TODO: change for 3d
                    new Vector3D(0, 1.0, 0) : (particle.Position - center).UnitVector();

                particle.Velocity = unitVector * ExplodeVelocity;
            }
        }
        public override void ExplodeIn(Action onCompleted)
        {
            if (_explodingState == ExplodingState.NotExploding ||
                _explodingState == ExplodingState.ExplodingIn)
            {
                onCompleted();
                return;
            }

            _onExplodeCompleted = onCompleted;
            _explodingState = ExplodingState.ExplodingIn;

            for (int i = 0; i < _particles.Count; i++)
            {
                _particles[i].Exploding = false;
                _particles[i].Velocity = Vector3D.Zero;
            }
        }
        private void CheckExplodingOutCompleted()
        {
            if (_particles.All(p => (p.Position.X < 0 || p.Position.X > 1.0) ||
                                    (p.Position.Y < 0 || p.Position.Y > 1.0)))
            {
                _explodingState = ExplodingState.Exploded;
                _particles.ForEach(p => p.Velocity = Vector3D.Zero); //stop them from getting too far away

                _onExplodeCompleted();
            }
        }
        private void CheckExplodingInCompleted()
        {
            if (_particles.All(p => Math.Abs(p.Velocity.X) < 1E-10 &&
                                    Math.Abs(p.Velocity.Y) < 1E-10))
            {
                _explodingState = ExplodingState.NotExploding;

                _onExplodeCompleted();
            }
        }