/// <summary>
        /// Used for open close logic
        /// </summary>
        public override void UpdateAfterSimulation10()
        {
            frameMod = (short)((frameMod + 1) % 3);
            if (frameMod > 0)
            {
                return;
            }

            if (myDoor == null)
            {
                return;
            }

            if (!myDoor.IsFunctional || !myDoor.IsWorking)
            {
                return;
            }

            //LogMessage("Looking for CustomName", false);

            string myName = myDoor.CustomName;

            if (_LastCustomName != myName)
            {
                _LastCustomName = myName;

                _IsActive = myName != null && myName.Contains("AutoDoor");
                if (_IsActive)
                {
                    int idx = myName.LastIndexOf('-');
                    if (idx >= 0 && idx + 1 < myName.Length)
                    {
                        string partialName  = myName.Substring(idx + 1);
                        float  newDistValue = _DefaultDistValue;
                        // try to parse it
                        if (float.TryParse(partialName, out newDistValue))
                        {
                            distValue = newDistValue;
                        }
                        else
                        {
                            distValue = _DefaultDistValue;
                        }
                    }
                    else
                    {
                        distValue = _DefaultDistValue;
                    }
                }
            }

            if (!_IsActive)
            {
                return;
            }

            // cache the block position
            var myWM = myDoor.WorldMatrix;

            var myBB   = myDoor.LocalAABB;
            var minVec = myBB.Min;
            var maxVec = myBB.Max;

            minVec.Z -= distValue;
            maxVec.Z += distValue;

            //minVec.X = 0;
            //maxVec.X = 0;

            minVec.Y -= 0.05f;
            maxVec.Y  = 0;

            myBB.Min = minVec;
            myBB.Max = maxVec;
            var myBackBB = myBB;

            myBB = myBB.Transform(ref myWM);

            // result if any player is within range
            bool playerInRange = false;

            //LogMessage("Got to player list lookup!", false);

            List <IMyPlayer> players = new List <IMyPlayer>();

            // check to make sure players exist and then find all the players
            if (MyAPIGateway.Multiplayer != null && MyAPIGateway.Multiplayer.Players != null)
            {
                MyAPIGateway.Multiplayer.Players.GetPlayers(players);
            }


            //Base6Directions.Direction pForward = Base6Directions.Direction.Up;

            // look through for players in that are in range
            foreach (var player in players)
            {
                // check that there is a valid character
                if (player.PlayerCharacter == null)
                {
                    continue;
                }

                // get there position
                var charPosition = player.PlayerCharacter.Entity.GetPosition();

                //if( (myDoor.GetPosition() - charPosition).Length() < 10 ) {
                //	LogMessage(myBackBB.ToString(), true);
                //	LogMessage(myBB.ToString(), true);
                //}

                var result = myBB.Contains(charPosition);


                bool inRange = result == ContainmentType.Contains;                //distVec.Length() <= distValue;

                //LogMessage(string.Format("inRange was {0}", inRange), true);


                if (!inRange)
                {
                    continue;
                }

                //LogMessage(string.Format("Cen {0}", myBB.Center), true);
                //LogMessage(string.Format("Min {0}", myBB.Min), true);
                //LogMessage(string.Format("Max {0}", myBB.Max), true);

                // check for acces, we only open for friendlys
                if (!myDoor.HasPlayerAccess(player.PlayerId))
                {
                    continue;
                }

                //var charWM = player.PlayerCharacter.Entity.WorldMatrix;
                //pForward = Base6Directions.GetForward(ref charWM);



                //var dir = myWM.GetClosestDirection(distVec);


                // result
                //bool inOri = (pForward == myForward || pForward == myBackward);//&&(dir != Base6Directions.Direction.Up && dir != Base6Directions.Direction.Down);

                playerInRange = inRange;                 //&& inOri;

                if (playerInRange)
                {
                    break;
                }
            }

            //LogMessage(string.Format("playerInRange was {0} and DoorState was {1}", playerInRange,_DoorState), false);

            if (toggleAction == null && !SetupToggleAction())
            {
                return;
            }


            if (!playerInRange && _DoorState == _DoorOpen)
            {
                MyAPIGateway.Utilities.ShowNotification(string.Format("Closing {0}", (Entity as Sandbox.ModAPI.Ingame.IMyTerminalBlock).DisplayNameText), 1000, MyFontEnum.Red);
                toggleAction.Apply(myDoorBlock);
            }

            if (playerInRange && _DoorState == _DoorClosed)
            {
                MyAPIGateway.Utilities.ShowNotification(string.Format("Opening {0}", (Entity as Sandbox.ModAPI.Ingame.IMyTerminalBlock).DisplayNameText), 1000, MyFontEnum.Red);
                toggleAction.Apply(myDoorBlock);
            }
        }