Пример #1
0
        public void BindTo(Door door)
        {
            if (Binding != null || door == null)
                return;

            Binding = door;

            // teleporter associate to the door
            Teleporter = Create.Teleporter("Invisible");
            Teleporter.SetSetting(Binding.Map.Type, Binding.WarpPoint.Name, Area);
            Teleporter.SetMap(Map, Position.X, Position.Y, Z);

            OnMove += new MoveEventHandler(Door_OnMove);

            // block BB when the door is closed
            BlockBB = new BBoundingBox(this, 0, 42, 32, 46);
            AddBoundingBox(BlockBB);

            // sides block BB
            AddBoundingBox(new BBoundingBox(this, 0, 42, 2, 46));
            AddBoundingBox(new BBoundingBox(this, 30, 42, 32, 46));

            // switch open/close state event BB
            EBoundingBox doorBB = new EBoundingBox(this, EBoundingBoxType.Event, 0 - 5, 44, 32 + 5, 56);
            AddEventBoundingBox(doorBB, EventBoundingBoxType.Internal);
            ObjectEvent doorEvt = new ObjectEvent(ObjectEventType.Normal, true, InputType.Action);
            doorBB.AddEvent(doorEvt);

            doorEvt.AddAction(new DefaultAction((args) =>
            {
                if (IsLocked() && args.Player.DirectionHandler.IsFacing(this))
                    LaunchLockedMessage();

                if (IsLocked() || IsClosing() || IsOpening())
                    return;

                if (args.Player.DirectionHandler.IsFacing(this))
                {
                    if (IsOpen())
                        Close();
                    else
                        Open();
                }
            }));

            TrySetState("Open");

            // anti loop event
            if (ANTI_LOOP_CHECK_IS_ACTIVE)
                SetAntiLoop();
        }
Пример #2
0
 public void AddBoundingBox(BBoundingBox BB)
 {
     BBoundingBoxes.Add(BB);
 }
Пример #3
0
 private void RemoveBoundingBox(BBoundingBox BB)
 {
     for (int y = BB.TTop; y < BB.TBottom + 1; ++y)
         for (int x = BB.TLeft; x < BB.TRight + 1; ++x)
             GetCell(x, y).RemoveBoundingBox(BB);
 }
Пример #4
0
 public void RemoveBoundingBox(BBoundingBox BB)
 {
     BBoundingBoxes.Remove(BB);
 }
Пример #5
0
 public BBoundingBox(BBoundingBox copy, WorldObject holder)
     : base(copy, holder)
 {
 }