override public void Update(DwarfTime gameTime, ChunkManager chunks, Camera camera) { base.Update(gameTime, chunks, camera); if (!Active) { return; } if (IsMoving) { OpenTimer.Update(gameTime); if (OpenTimer.HasTriggered) { IsMoving = false; } else { float t = Easing.CubicEaseInOut(OpenTimer.CurrentTimeSeconds, 0.0f, 1.0f, OpenTimer.TargetTimeSeconds); if (GetComponent <SimpleSprite>().HasValue(out var sprite)) { // Transform the sprite instead of the entire thing. if (IsOpen) { sprite.LocalTransform = Matrix.CreateRotationY(0.5f * (float)Math.PI) * CreateHingeTransform(t * 1.57f); } else { sprite.LocalTransform = Matrix.CreateRotationY(0.5f * (float)Math.PI) * CreateHingeTransform((1.0f - t) * 1.57f); } sprite.ProcessTransformChange(); } } } else { bool anyInside = false; foreach (CreatureAI minion in TeamFaction.Minions) { if ((minion.Physics.Position - Position).LengthSquared() < 1) { if (!IsOpen) { Open(); } anyInside = true; break; } } if (!IsMoving && !anyInside && IsOpen) { Close(); } } }
public void Close() { if (IsOpen) { IsMoving = true; OpenTimer.Reset(); } IsOpen = false; }
public void Close() { if (IsOpen) { IsMoving = true; OpenTimer.Reset(); SoundManager.PlaySound(ContentPaths.Audio.Oscar.sfx_env_door_close_generic, Position, true, 0.5f); } IsOpen = false; }
public void Open() { if (!IsOpen) { IsMoving = true; OpenTimer.Reset(); } IsOpen = true; }
public override void Update(DwarfTime gameTime, ChunkManager chunks, Camera camera) { if (IsMoving) { OpenTimer.Update(gameTime); if (OpenTimer.HasTriggered) { IsMoving = false; } else { float t = Easing.CubicEaseInOut(OpenTimer.CurrentTimeSeconds, 0.0f, 1.0f, OpenTimer.TargetTimeSeconds); if (IsOpen) { LocalTransform = CreateHingeTransform(t * 1.57f) * ClosedTransform; } else { LocalTransform = CreateHingeTransform((1.0f - t) * 1.57f) * ClosedTransform; } } } else { bool anyInside = false; foreach (CreatureAI minion in TeamFaction.Minions) { if ((minion.Physics.Position - Position).LengthSquared() < 1) { if (!IsOpen) { Open(); } anyInside = true; break; } } if (!IsMoving && !anyInside && IsOpen) { Close(); } } base.Update(gameTime, chunks, camera); }