Exemple #1
0
        private Boolean TryOpenDoor(GridSlot p_slot, EDirection p_dir)
        {
            List <InteractiveObject> doors = p_slot.GetDoors();

            for (Int32 i = 0; i < doors.Count; i++)
            {
                Door door = (Door)doors[i];
                if (door.Location == p_dir && door.State == EInteractiveObjectState.DOOR_CLOSED && door.Commands.Count > 0)
                {
                    door.Execute(LegacyLogic.Instance.MapLoader.Grid);
                    door.Update();
                    return(true);
                }
            }
            GridSlot neighborSlot = p_slot.GetNeighborSlot(LegacyLogic.Instance.MapLoader.Grid, p_dir);

            doors = neighborSlot.GetDoors();
            for (Int32 j = 0; j < doors.Count; j++)
            {
                Door door2 = (Door)doors[j];
                if (door2.Location == EDirectionFunctions.GetOppositeDir(p_dir) && door2.State == EInteractiveObjectState.DOOR_CLOSED && door2.Commands.Count > 0)
                {
                    door2.Execute(LegacyLogic.Instance.MapLoader.Grid);
                    door2.Update();
                    return(true);
                }
            }
            return(false);
        }
 protected override void SetStates()
 {
     if (m_targetDoor == null)
     {
         throw new InvalidOperationException("Tried to open or close something that is not a door!");
     }
     if (!m_delayStateChange)
     {
         m_targetDoor.ToggleState();
         m_leaveTransition.ToggleState();
         if (m_enterTransition != null)
         {
             m_enterTransition.ToggleState();
         }
         GridSlot neighborSlot = Grid.GetSlot(m_targetDoor.Position).GetNeighborSlot(Grid, m_targetDoor.Location);
         if (neighborSlot != null)
         {
             List <InteractiveObject> doors = neighborSlot.GetDoors();
             for (Int32 i = 0; i < doors.Count; i++)
             {
                 if (doors[i].Type == EObjectType.DOOR && EDirectionFunctions.GetOppositeDir(doors[i].Location) == m_targetDoor.Location)
                 {
                     Door door = (Door)doors[i];
                     if (m_targetDoor.State == EInteractiveObjectState.DOOR_OPEN)
                     {
                         door.Open();
                     }
                     else
                     {
                         door.Close();
                     }
                     break;
                 }
             }
         }
     }
     else
     {
         m_delayStateChange = true;
     }
 }