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 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(); } }
public void ResetExplode() { foreach (BrainStructure sub in explodingStructures) { sub.modelTransform.localPosition = sub.initialPosition; } cortex.SetActive(true); currentState = ExplodingState.Resting; lastState = ExplodingState.ExplodingIn; }
// 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; }
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); } }
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; } } }