/// <summary> /// 根据自定义的图像设置事件元素实例 /// </summary> /// <param name="fileName">图像文件名</param> /// <param name="showPosation">事件在地图上的坐标</param> /// <param name="method">触发方式</param /// <param name="repeated">是否是触发触发的事件</param>> /// <param name="eventName">事件名</param> /// <param name="unitSize">图像分隔的单位尺寸</param> protected MapEvent(string fileName, Coord showPosation, TouchMethod method, bool repeated, string eventName, Size unitSize) : base(fileName, showPosation, unitSize) { SetAttr(method, repeated, eventName); this.FaceUnit = unitSize; }
/// <summary> /// 构造时设置类成员属性 /// </summary> /// <param name="method">触发方式</param> /// <param name="repeated">是否是触发触发的事件</param> /// <param name="eventName">事件名</param> private void SetAttr(TouchMethod method, bool repeated, string eventName) { //约定直接触发的事件是不可通行的 if (method == TouchMethod.StationTouch) { CanPass = true; } else if (method == TouchMethod.ImmediatelyTouch) { CanPass = false; } Enable = true; Repeated = repeated; TriggerMethod = method; EventName = eventName; CanFocus = true; }
/// <summary> /// 触发坐标处的事件 /// </summary> /// <param name="pos">在地图上的坐标</param> /// <param name="triggerMethod">触发方式</param> /// <param name="player">触发者</param> public void TriggerEvent(Coord pos, TouchMethod triggerMethod, Hero player) { if (!InFloor(pos)) { return; } if (EventMap[pos.Row, pos.Col] == null || EventMap[pos.Row, pos.Col].Exist == false) { return; } //如果触发方式符合,则触发事件 if (EventMap[pos.Row, pos.Col].TriggerMethod == triggerMethod) { EventMap[pos.Row, pos.Col].TriggerEvent(player); } }
/// <summary> /// 根据参数配置创建类的实例 /// </summary> /// <param name="createArgs">参数配置</param> /// <returns>返回类实例</returns> public static MapEvent Create(XElement createArgs, Coord existCoord) { string fileName; if (createArgs.Attribute("imagefile") == null) { fileName = null; } else { fileName = createArgs.Attribute("imagefile").Value; } TouchMethod method = createArgs.Attribute("touchMethod").Value.CompareTo("station") == 0 ? TouchMethod.StationTouch : TouchMethod.ImmediatelyTouch; bool repeated = createArgs.Attribute("repeated").Value.ToLower().CompareTo("true") == 0; string name = createArgs.Attribute("eventName").Value; Size unitSize = GetSize(createArgs.Attribute("unitSize").Value); return(new EmptyEvent(fileName, existCoord, method, repeated, name, unitSize)); }
/// <summary> /// 设置事件元素实例 /// </summary> /// <param name="face">图像索引</param> /// <param name="showPosation">事件在地图上的坐标</param> /// <param name="method">触发方式</param /// <param name="repeated">是否是触发触发的事件</param> /// <param name="eventName">事件名</param> protected MapEvent(MotaElement face, Coord showPosation, TouchMethod method, bool repeated, string eventName) : base(face, showPosation) { SetAttr(method, repeated, eventName); }
/// <summary> /// 触发坐标处的事件 /// </summary> /// <param name="pos">在地图上的坐标</param> /// <param name="triggerMethod">触发方式</param> /// <param name="player">触发者</param> public void TriggerEvent(Coord pos, TouchMethod triggerMethod, Hero player) { //委托楼层对象处理 CurFloorNode.TriggerEvent(pos, triggerMethod, player); }
/// <summary> /// 根据自定义的图像设置事件元素实例 /// </summary> /// <param name="fileName">图像文件名</param> /// <param name="showPosation">事件在地图上的坐标</param> /// <param name="method">触发方式</param /// <param name="repeated">是否是触发触发的事件</param>> /// <param name="eventName">事件名</param> /// <param name="unitSize">图像分隔的单位尺寸</param> private EmptyEvent(string fileName, Coord showPosation, TouchMethod method, bool repeated, string eventName, Size unitSize) : base(fileName, showPosation, method, repeated, eventName, unitSize) { }
public void SetTouchDelegate(TouchMethod touchMethod, TouchHandler touchDelegate) { this.touchDelegate = touchDelegate; this.touchMethod = touchMethod; }