Exemplo n.º 1
0
        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();
                }
            }
        }
Exemplo n.º 2
0
 public void Close()
 {
     if (IsOpen)
     {
         IsMoving = true;
         OpenTimer.Reset();
     }
     IsOpen = false;
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
        public void Open()
        {
            if (!IsOpen)
            {
                IsMoving = true;
                OpenTimer.Reset();
            }

            IsOpen = true;
        }
Exemplo n.º 5
0
        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);
        }