/// <summary> /// 根据xml结点创建地图元素 /// </summary> /// <param name="xmlNode">xml结点</param> /// <returns>地图结点元素</returns> public static ElementNode GetNode(XElement xmlNode) { Background back = Background.CreateInstance(xmlNode.Element("oneBack"), Coord.Empty); MapEvent eve = MapEvent.CreateInstance(xmlNode.Element("oneEvent"), Coord.Empty); return(new ElementNode(back, eve)); }
/// <summary> /// 获取事件元素的副本 /// </summary> /// <param name="pos">副本出现的坐标</param> public MapEvent GetEvent(Coord pos) { if (_Event == null) { return(MapEvent.CreateInstance(MapEvent.EmptyXml, pos)); } return(MapEvent.CreateInstance(_Event.XmlRecord, pos)); }
/// <summary> /// 创建元素结点的副本 /// </summary> /// <param name="desBack">地表元素</param> /// <param name="desEvent">事件元素</param> public ElementNode(Background desBack, MapEvent desEvent) { //引用 _Back = desBack; _Event = desEvent; //深度拷贝 _Back = GetBack(Coord.Empty); _Event = GetEvent(Coord.Empty); }
/// <summary> /// 关闭事件 /// </summary> public static void CloseEvent(Queue <MotaEventArgs> datas, Hero player) { MotaEventArgs data = datas.Dequeue(); //如果目标位置存在事件,关闭它 MapEvent me = MotaWorld.GetInstance().MapManager.Tower[data.DesPosation.Floor].EventMap[data.DesPosation.Seat.Row, data.DesPosation.Seat.Col]; if (me != null) { me.Close(); } EventEffect(data); }
/// <summary> /// 创建一个全空的楼层节点 /// </summary> /// <param name="index">楼层索引</param> /// <param name="name">楼层名称</param> /// <param name="maxCoord">楼层的坐标范围</param> /// <param name="nextFloor">下一层楼的索引,用于指向默认的下一层楼</param> /// <param name="preFloor">上一层楼的索引,用于指向默认的上一层楼</param> /// <param name="heroExistPos">人物初始出现的位置</param> /// <param name="downPos">下楼时出现的位置</param> /// <param name="autoSwicth">自动开关事件列表</param> private FloorNode(int index, string name, Coord maxCoord, int nextFloor, int preFloor, Coord heroExistPos, Coord downPos, List<Swicther> autoSwicth) { FloorIndex = index; FloorName = name; floorSize = maxCoord; BackMap = new Background[maxCoord.Row, maxCoord.Col]; EventMap = new MapEvent[maxCoord.Row, maxCoord.Col]; NextFloor = nextFloor; PreFloor = preFloor; HeroUpPos = heroExistPos; HeroDownPos = downPos; this.AutoSwicth = autoSwicth; }
/// <summary> /// 创建一个全空的楼层节点 /// </summary> /// <param name="index">楼层索引</param> /// <param name="name">楼层名称</param> /// <param name="maxCoord">楼层的坐标范围</param> /// <param name="nextFloor">下一层楼的索引,用于指向默认的下一层楼</param> /// <param name="preFloor">上一层楼的索引,用于指向默认的上一层楼</param> /// <param name="heroExistPos">人物初始出现的位置</param> /// <param name="downPos">下楼时出现的位置</param> /// <param name="autoSwicth">自动开关事件列表</param> private FloorNode(int index, string name, Coord maxCoord, int nextFloor, int preFloor, Coord heroExistPos, Coord downPos, List <Swicther> autoSwicth) { FloorIndex = index; FloorName = name; floorSize = maxCoord; BackMap = new Background[maxCoord.Row, maxCoord.Col]; EventMap = new MapEvent[maxCoord.Row, maxCoord.Col]; NextFloor = nextFloor; PreFloor = preFloor; HeroUpPos = heroExistPos; HeroDownPos = downPos; this.AutoSwicth = autoSwicth; }
/// <summary> /// 设置事件层某一个元素的开关状态 /// </summary> /// <param name="pos">坐标</param> /// <param name="closed">是否关闭</param> private void SetState(Coord pos, bool closed) { MapEvent node = CurFloor.EventMap[pos.Row, pos.Col]; if (node != null) { if (closed) { node.Close(); } else { node.Open(); } } }
/// <summary> /// 加载事件层 /// </summary> /// <param name="oneFloorArgs">事件层参数</param> /// <param name="oneFloor">待加载的楼层对象</param> private static void LoadEventLayer(XElement oneFloorArgs, FloorNode oneFloor) { XElement floorEventArgs = oneFloorArgs.Element("eventLayer"); for (int row = 0; row < oneFloor.FloorSize.Row; row++) { //这里引入中间变量,为了提高查询速度 XElement rowEventArgs = floorEventArgs.Elements("oneRow").ElementAt(row); for (int col = 0; col < oneFloor.FloorSize.Col; col++) { try { oneFloor.EventMap[row, col] = MapEvent.CreateInstance( rowEventArgs.Elements("oneEvent").ElementAt(col), new Coord(col, row)); } catch (Exception) { oneFloor.EventMap[row, col] = null; } } } }
public AppendEvent(MapEvent user) { this.User = user; }