void SetArea(IntRect rect) { Area = rect; TeleportationBB = new EBoundingBox(this, EBoundingBoxType.Event, Area.Left, Area.Top, Area.Right, Area.Bottom); TeleportationEvent = new ObjectEvent(ObjectEventType.In); TeleportationEvent.AddAction(new WarpAction(MapName, WarpPointName)); TeleportationBB.AddEvent(TeleportationEvent); AddEventBoundingBox(TeleportationBB, EventBoundingBoxType.Internal); }
protected override Dictionary<String, Object> OnValidate() { ObjectEvent objectEvent = new ObjectEvent( (ObjectEventType)Enum.Parse(typeof(ObjectEventType), TypeDownList.GetCurrent()), ActionKeyModeCheckBox.IsChecked, (InputType)Enum.Parse(typeof(InputType), ActionKeyDownList.GetCurrent())); foreach (BlazeraLib.Action action in Actions.Values) objectEvent.AddAction(action); return new Dictionary<String, Object>() { { "Event", objectEvent } }; }
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(); }