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(); }
public void AddBoundingBox(BBoundingBox BB) { BBoundingBoxes.Add(BB); }
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); }
public void RemoveBoundingBox(BBoundingBox BB) { BBoundingBoxes.Remove(BB); }
public BBoundingBox(BBoundingBox copy, WorldObject holder) : base(copy, holder) { }