void Start() { if (teleportEvent == null) { teleportEvent = new TeleportEvent(); } }
//Use this logic to throw to next player's screen void OnTriggerExit2D(Collider2D other) { //TODO will have to change to neighbor's walls Vector2 rightWall = new Vector2(cam.ScreenToWorldPoint(new Vector3(Screen.width, 0f, 0f)).x + 0.5f, 0f); Vector2 leftWall = new Vector2(cam.ScreenToWorldPoint(new Vector3(0f, 0f, 0f)).x - 0.5f, 0f); Vector3 currentPos = other.gameObject.transform.position; if (gameObject.name == "rightWall") { //Only teleport object if it's leaving screen if (other.rigidbody2D.velocity.x > 0) { //Appear at right player's left wall //other.gameObject.transform.position = new Vector3(leftWall.x, currentPos.y, 0f); using (var evnt = TeleportEvent.Raise(Bolt.GlobalTargets.Everyone)) { evnt.isRightWall = true; } } } else { //Only teleport object if it's leaving screen if (other.rigidbody2D.velocity.x < 0) { //Appear at left player's right wall //other.gameObject.transform.position = new Vector3(rightWall.x, currentPos.y, 0f); using (var evnt = TeleportEvent.Raise(Bolt.GlobalTargets.Everyone)) { evnt.isRightWall = false; } } } }
private void On(TeleportEvent e) { var p = e.Player; p.X = e.X; p.Y = e.Y; }
private void CreateBackWall(Player player, Vector3 startPosition, int width, int length, int height, byte material) { Quaternion rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f); byte prefabId = 0; Vector3Int playerPos = (Vector3Int)startPosition; var teleEvent = new TeleportEvent(player.Entity, playerPos); EventManager.CallEvent((BaseEvent)teleEvent); int setX = playerPos.x - (width / 2); setX = (int)(setX - (double)(setX / 6)); int setY = playerPos.y; setY = (int)(setY - (double)(setY / 6)); int setZ = playerPos.z - (length / 2); setZ = (int)(setZ - (double)(setZ / 6)); var originZ = setZ; for (var i = 0; i < height; i++) { for (var ii = 0; ii < width; ii++) { BuildBlockOnThisSquare(setX, setY, setZ, material, rotation, prefabId); setZ++; } setZ = originZ; setY++; } // Tele the player over the platform (to prevent getting stuck EventManager.CallEvent((BaseEvent) new TeleportEvent(player.Entity, new Vector3(startPosition.x, startPosition.y + 1, startPosition.z))); }
private void OnTeleportUser(TeleportEvent e) { Player p = e.Player; p.X = e.X; p.Y = e.Y; p.Dead = false; }
private void Awake() { renderer = GetComponent <LineRenderer>(); renderer.useWorldSpace = true; if (OnTeleport == null) { OnTeleport = new TeleportEvent(); } }
public void AddTeleportEvent(TeleportEvent teleportEvent) { m_events.Add(teleportEvent); string name = "事件" + m_events.Count; m_eventNames.Add(name); m_dpdEventList.ClearOptions(); m_dpdEventList.AddOptions(m_eventNames); m_dpdEventList.value = m_events.Count; }
void CreateNewPlatform(Player player, Vector3 startPosition, int width, int length) { byte material = 2; Quaternion rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f); byte prefabId = 0; Vector3Int playerPos = (Vector3Int)startPosition; var teleEvent = new TeleportEvent(player.Entity, playerPos); EventManager.CallEvent((BaseEvent)teleEvent); int setX = playerPos.x - (width / 2); setX = (int)(setX - (double)(setX / 6)); int setY = playerPos.y; setY = (int)(setY - (double)(setY / 6) - 1); int setZ = playerPos.z - (length / 2); setZ = (int)(setZ - (double)(setZ / 6)); var originX = setX; var originY = setY; var originZ = setZ; for (var i = 0; i < width; i++) { for (var ii = 0; ii < length; ii++) { BuildBlockOnThisSquare(setX, setY, setZ, material, rotation, prefabId); setX++; } setX = originX; setZ++; } originX = originX + (width / 2); originZ = originZ + (length / 2); BuildBlockOnThisSquare(originX - 2, originY + 1, originZ + 1, material, rotation, prefabId); BuildBlockOnThisSquare(originX - 2, originY + 1, originZ + 2, material, rotation, prefabId); BuildBlockOnThisSquare(originX - 1, originY + 1, originZ + 2, material, rotation, prefabId); BuildBlockOnThisSquare(originX, originY + 1, originZ + 2, material, rotation, prefabId); BuildBlockOnThisSquare(originX + 1, originY + 1, originZ + 2, material, rotation, prefabId); BuildBlockOnThisSquare(originX + 2, originY + 1, originZ + 2, material, rotation, prefabId); BuildBlockOnThisSquare(originX + 2, originY + 1, originZ + 1, material, rotation, prefabId); BuildBlockOnThisSquare(originX - 1, originY + 2, originZ + 2, material, rotation, prefabId); BuildBlockOnThisSquare(originX, originY + 2, originZ + 2, material, rotation, prefabId); BuildBlockOnThisSquare(originX + 1, originY + 2, originZ + 2, material, rotation, prefabId); // Tele the player over the platform (to prevent getting stuck EventManager.CallEvent((BaseEvent) new TeleportEvent(player.Entity, new Vector3(startPosition.x, startPosition.y + 1, startPosition.z))); }
void Start() { if (isControllable) { TeleportEvent teleportEvent = GameObject.Find("TeleportController").GetComponent <TeleportController>().teleportEvent; teleportEvent.AddListener(HandleTeleportEvent); playerCamera.SetActive(true); gvrControllerPointer.SetActive(true); head.SetActive(false); otherPlayersController.SetActive(false); } else { playerCamera.SetActive(false); gvrControllerPointer.SetActive(false); } }
public static TeleportEvent Serdes(TeleportEvent e, AssetMapping mapping, ISerializer s) { if (s == null) { throw new ArgumentNullException(nameof(s)); } e ??= new TeleportEvent(); e.X = s.UInt8(nameof(X), e.X); e.Y = s.UInt8(nameof(Y), e.Y); e.Direction = s.EnumU8(nameof(Direction), e.Direction); e.Unk4 = s.UInt8(nameof(Unk4), e.Unk4); e.Unk5 = s.UInt8(nameof(Unk5), e.Unk5); e.MapId = MapId.SerdesU16(nameof(MapId), e.MapId, mapping, s); int zeroed = s.UInt16(null, 0); s.Assert(e.Unk4 is 0 or 1 or 2 or 3 or 6 or 106 or 255, "TeleportEvent: Expected field 4 to be in { 0,1,2,3,6,106,255 }"); // Always 255 in maps s.Assert(zeroed == 0, "TeleportEvent: Expected field 8 to be 0"); return(e); }
public override void OnEvent(TeleportEvent evnt) { foreach (PlayerObject p in PlayerObjectRegistry.allPlayers) { if (p.connection == evnt.RaisedBy) { Vector3 newPosition; if (evnt.isRightWall) { newPosition = PlayerObjectRegistry.getRightWallTeleport(p); } else { newPosition = PlayerObjectRegistry.getLeftWallTeleport(p); } //TODO move potato potato.transform.position = newPosition; return; } } }
/// <summary> /// Processes the message /// </summary> /// <param name="connectionBase">The connection base</param> /// <param name="message">The playerio message</param> /// <param name="handled">Whether the message was already handled</param> public void Process(ConnectionBase connectionBase, Message message, bool handled) { int userId = message.GetInt(0); WorldConnection worldCon = (WorldConnection)connectionBase; WorldPlayer player = worldCon.Players.GetPlayer(userId); Vector location = new Vector(message.GetInt(1), message.GetInt(2)); if (!handled && player != null) { player.SetLocationInternal(location); } TeleportEvent teleportEvent = new TeleportEvent() { Raw = message, Player = player, Location = location }; connectionBase.RaiseServerEvent <TeleportEvent>(teleportEvent); }
private void CreateRightWall(Player player, Vector3 startPosition, int width, int length, int height, byte material) { Quaternion rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f); byte prefabId = 0; Vector3Int playerPos = (Vector3Int)startPosition; var teleEvent = new TeleportEvent(player.Entity, playerPos); EventManager.CallEvent((BaseEvent)teleEvent); int setX = playerPos.x - (width / 2); setX = (int)(setX - (double)(setX / 6)); int setY = playerPos.y; setY = (int)(setY - (double)(setY / 6)); int setZ = playerPos.z + (length / 2) - 1; setZ = (int)(setZ - (double)(setZ / 6)); BuildWallBlocks(length, height, material, setX, setY, setZ, rotation, prefabId); // Tele the player over the platform (to prevent getting stuck EventManager.CallEvent((BaseEvent) new TeleportEvent(player.Entity, new Vector3(startPosition.x, startPosition.y + 1, startPosition.z))); }
// private void OnTransformComponentUpdated(TransformComponent.Update update) // { // for (int i = 0; i < update.teleportEvent.Count; i++) // { // TeleportTo(update.teleportEvent[i].targetPosition.ToVector3()); // } // } private void OnTeleportEvent(TeleportEvent tevent) { TeleportTo(tevent.TargetPosition.ToVector3()); }
private bool CreateXml(string filePath) { try { XmlDocument xmlDocument = new XmlDocument(); XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "UTF-8", null); xmlDocument.AppendChild(xmlDeclaration); XmlElement eRoot = xmlDocument.CreateElement("MapData"); xmlDocument.AppendChild(eRoot); //保存地图信息 XmlElement eMap = xmlDocument.CreateElement("Map"); Map map = MapManager.Instance.m_map; EncryptAttribute(eMap, "TexturePath", map.m_textureName.ToString()); EncryptAttribute(eMap, "wid", map.m_width.ToString()); EncryptAttribute(eMap, "len", map.m_length.ToString()); //eMap.SetAttribute("TexturePath", map.m_textureName.ToString()); //eMap.SetAttribute("wid", map.m_width.ToString()); //eMap.SetAttribute("len", map.m_length.ToString()); eRoot.AppendChild(eMap); //保存实体信息 XmlElement eEntitiesList = xmlDocument.CreateElement("EntitiesList"); foreach (Entity entity in EntityManager.Instance.GetEntities()) { XmlElement eEntity = xmlDocument.CreateElement("Entity"); eEntitiesList.AppendChild(eEntity); //实体属性(逆序设置,顺序输出) XmlElement eEntityAtr = xmlDocument.CreateElement("EntityAtr"); EncryptAttribute(eEntityAtr, "EventIndex", entity.m_eventIndex.ToString()); EncryptAttribute(eEntityAtr, "PathIndex", entity.m_pathIndex.ToString()); EncryptAttribute(eEntityAtr, "MapCubeIndex", entity.m_mapCubeIndex.ToString()); EncryptAttribute(eEntityAtr, "Type", entity.m_type.ToString()); EncryptAttribute(eEntityAtr, "Model", entity.m_modelName); EncryptAttribute(eEntityAtr, "quaW", entity.m_quaternion.w.ToString()); EncryptAttribute(eEntityAtr, "quaZ", entity.m_quaternion.z.ToString()); EncryptAttribute(eEntityAtr, "quaY", entity.m_quaternion.y.ToString()); EncryptAttribute(eEntityAtr, "quaX", entity.m_quaternion.x.ToString()); EncryptAttribute(eEntityAtr, "posZ", entity.m_position.z.ToString()); EncryptAttribute(eEntityAtr, "posY", entity.m_position.y.ToString()); EncryptAttribute(eEntityAtr, "posX", entity.m_position.x.ToString()); //eEntityAtr.SetAttribute("PathIndex", entity.m_pathIndex.ToString()); //eEntityAtr.SetAttribute("MapCubeIndex", entity.m_mapCubeIndex.ToString()); //eEntityAtr.SetAttribute("Type", entity.m_type.ToString()); //eEntityAtr.SetAttribute("Model", entity.m_modelName); //eEntityAtr.SetAttribute("quaW", entity.m_quaternion.w.ToString()); //eEntityAtr.SetAttribute("quaZ", entity.m_quaternion.z.ToString()); //eEntityAtr.SetAttribute("quaY", entity.m_quaternion.y.ToString()); //eEntityAtr.SetAttribute("quaX", entity.m_quaternion.x.ToString()); //eEntityAtr.SetAttribute("posZ", entity.m_position.z.ToString()); //eEntityAtr.SetAttribute("posY", entity.m_position.y.ToString()); //eEntityAtr.SetAttribute("posX", entity.m_position.x.ToString()); //游戏属性 XmlElement eGameAtr = xmlDocument.CreateElement("GameAtr"); EncryptAttribute(eGameAtr, "IsAtk", entity.IsAtk.ToString()); EncryptAttribute(eGameAtr, "IsMove", entity.IsMove.ToString()); EncryptAttribute(eGameAtr, "MoveSpeed", entity.MoveSpeed.ToString()); EncryptAttribute(eGameAtr, "AtkRange", entity.AtkRange.ToString()); EncryptAttribute(eGameAtr, "AtkSpeed", entity.AtkSpeed.ToString()); EncryptAttribute(eGameAtr, "DefValue", entity.DefValue.ToString()); EncryptAttribute(eGameAtr, "AtkValue", entity.HP.ToString()); EncryptAttribute(eGameAtr, "HP", entity.HP.ToString()); //eGameAtr.SetAttribute("IsAtk", entity.IsAtk.ToString()); //eGameAtr.SetAttribute("IsMove", entity.IsMove.ToString()); //eGameAtr.SetAttribute("MoveSpeed", entity.MoveSpeed.ToString()); //eGameAtr.SetAttribute("AtkRange", entity.AtkRange.ToString()); //eGameAtr.SetAttribute("AtkSpeed", entity.AtkSpeed.ToString()); //eGameAtr.SetAttribute("DefValue", entity.DefValue.ToString()); //eGameAtr.SetAttribute("AtkValue", entity.HP.ToString()); //eGameAtr.SetAttribute("HP", entity.HP.ToString()); eEntity.AppendChild(eEntityAtr); eEntity.AppendChild(eGameAtr); } eRoot.AppendChild(eEntitiesList); //保存路径信息 XmlElement ePathList = xmlDocument.CreateElement("PathList"); foreach (Path path in PathManager.Instance.GetPaths()) { //单个路径节点 XmlElement ePath = xmlDocument.CreateElement("Path"); //路径的状态信息 EncryptAttribute(ePath, "IsEmpty", path.m_isEmpty.ToString()); EncryptAttribute(ePath, "Index", path.m_index.ToString()); //ePath.SetAttribute("IsEmpty", path.m_isEmpty.ToString()); //ePath.SetAttribute("Index", path.m_index.ToString()); //路径的关键点信息 XmlElement eKeyPointList = xmlDocument.CreateElement("KeyPointList"); foreach (Point keyPoint in path.m_keyPoints) { XmlElement eKeyPoint = xmlDocument.CreateElement("KeyPoint"); EncryptAttribute(eKeyPoint, "y", keyPoint.m_y.ToString()); EncryptAttribute(eKeyPoint, "x", keyPoint.m_x.ToString()); //eKeyPoint.SetAttribute("y", keyPoint.m_y.ToString()); //eKeyPoint.SetAttribute("x", keyPoint.m_x.ToString()); eKeyPointList.AppendChild(eKeyPoint); } ePath.AppendChild(eKeyPointList); //路径的点信息 XmlElement ePointList = xmlDocument.CreateElement("PointList"); foreach (Point point in path.m_points) { XmlElement ePoint = xmlDocument.CreateElement("Point"); EncryptAttribute(ePoint, "y", point.m_y.ToString()); EncryptAttribute(ePoint, "x", point.m_x.ToString()); //ePoint.SetAttribute("y", point.m_y.ToString()); //ePoint.SetAttribute("x", point.m_x.ToString()); ePointList.AppendChild(ePoint); } ePath.AppendChild(ePointList); ePathList.AppendChild(ePath); } eRoot.AppendChild(ePathList); //保存事件信息 XmlElement eEventList = xmlDocument.CreateElement("EventList"); foreach (Event @event in EventManager.Instance.GetEvents()) { XmlElement eEvent = xmlDocument.CreateElement("Event"); EncryptAttribute(eEvent, "Index", @event.m_index.ToString()); string type = @event.Type; //Debug.Log("事件的类型是: " + type); EncryptAttribute(eEvent, "Type", type); if (type == "Birth") { BirthEvent birthEvent = (BirthEvent)@event; EncryptAttribute(eEvent, "CD", birthEvent.m_cd.ToString()); EncryptAttribute(eEvent, "Time", birthEvent.m_time.ToString()); EncryptAttribute(eEvent, "IsInfinite", birthEvent.m_isInfinite.ToString()); } else if (type == "Bomb") { BombEvent bombEvent = (BombEvent)@event; EncryptAttribute(eEvent, "Delay", bombEvent.m_delay.ToString()); EncryptAttribute(eEvent, "Hurt", bombEvent.m_hurt.ToString()); EncryptAttribute(eEvent, "IsDestroy", bombEvent.m_isDestory.ToString()); } else if (type == "Speed") { SpeedEvent speedEvent = (SpeedEvent)@event; EncryptAttribute(eEvent, "Speed", speedEvent.m_speed.ToString()); EncryptAttribute(eEvent, "Time", speedEvent.m_time.ToString()); EncryptAttribute(eEvent, "IsInfinite", speedEvent.m_isInfinite.ToString()); } else if (type == "Teleport") { TeleportEvent teleportEvent = (TeleportEvent)@event; EncryptAttribute(eEvent, "TeleportID", teleportEvent.m_teleportID.ToString()); EncryptAttribute(eEvent, "CD", teleportEvent.m_cd.ToString()); EncryptAttribute(eEvent, "Time", teleportEvent.m_time.ToString()); EncryptAttribute(eEvent, "IsInfinite", teleportEvent.m_isInfinite.ToString()); } eEventList.AppendChild(eEvent); } eRoot.AppendChild(eEventList); //保存音乐信息 XmlElement eMusic = xmlDocument.CreateElement("Music"); Music music = MusicManager.Instance.m_music; if (music != null) { EncryptAttribute(eMusic, "Volume", music.m_volume.ToString()); EncryptAttribute(eMusic, "Name", music.m_name); //eMusic.SetAttribute("Volume", music.m_volume.ToString()); //eMusic.SetAttribute("Name", music.m_name); } eRoot.AppendChild(eMusic); //保存XML文件 xmlDocument.Save(filePath); return(true); } catch { LogManager.Instance.Log("保存地图失败!"); return(false); } }
private bool ParseXml(string filePath) { try { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.Load(filePath); XmlElement eRoot = (XmlElement)xmlDocument.SelectSingleNode("MapData"); foreach (XmlElement element in eRoot.ChildNodes) { //处理地图信息 if (element.Name == "Map") { int len = int.Parse(DecryptAttribute(element, "len")); int wid = int.Parse(DecryptAttribute(element, "wid")); string textureName = (DecryptAttribute(element, "TexturePath")); //int len = int.Parse(element.GetAttribute("len")); //int wid = int.Parse(element.GetAttribute("wid")); //string textureName = element.GetAttribute("TexturePath"); MapManager.Instance.CreateMap(len, wid, textureName); } else if (element.Name == "EntitiesList") { List <Entity> entities = new List <Entity>(); foreach (XmlElement eEntity in element.ChildNodes) { //实体属性 XmlElement eEntityAtr = (XmlElement)eEntity.SelectSingleNode("EntityAtr"); //位置 float x = float.Parse(DecryptAttribute(eEntityAtr, "posX")); float y = float.Parse(DecryptAttribute(eEntityAtr, "posY")); float z = float.Parse(DecryptAttribute(eEntityAtr, "posZ")); //float x = float.Parse(eEntityAtr.GetAttribute("posX")); //float y = float.Parse(eEntityAtr.GetAttribute("posY")); //float z = float.Parse(eEntityAtr.GetAttribute("posZ")); Vector3 pos = new Vector3(x, y, z); //旋转 x = float.Parse(DecryptAttribute(eEntityAtr, "quaX")); y = float.Parse(DecryptAttribute(eEntityAtr, "quaY")); z = float.Parse(DecryptAttribute(eEntityAtr, "quaZ")); float w = float.Parse(DecryptAttribute(eEntityAtr, "quaW")); //x = float.Parse(eEntityAtr.GetAttribute("quaX")); //y = float.Parse(eEntityAtr.GetAttribute("quaY")); //z = float.Parse(eEntityAtr.GetAttribute("quaZ")); //float w = float.Parse(eEntityAtr.GetAttribute("quaW")); Quaternion qua = new Quaternion(x, y, z, w); //模型 string modelName = DecryptAttribute(eEntityAtr, "Model"); //string modelName = eEntityAtr.GetAttribute("Model"); //类型 string temp = DecryptAttribute(eEntityAtr, "Type"); //string temp = eEntityAtr.GetAttribute("Type"); EntityType entityType = EntityType.Zero; if (temp == "NPC") { entityType = EntityType.NPC; } else if (temp == "Monster") { entityType = EntityType.Monster; } else if (temp == "Building") { entityType = EntityType.Building; } //地图块索引 int mapCubeIndex = int.Parse(DecryptAttribute(eEntityAtr, "MapCubeIndex")); //int mapCubeIndex = int.Parse(eEntityAtr.GetAttribute("MapCubeIndex")); //路径索引 int pathIndex = int.Parse(DecryptAttribute(eEntityAtr, "PathIndex")); //int pathIndex = int.Parse(eEntityAtr.GetAttribute("PathIndex")); int eventIndex = int.Parse(DecryptAttribute(eEntityAtr, "EventIndex")); //游戏属性 XmlElement eGameAtr = (XmlElement)eEntity.SelectSingleNode("GameAtr"); float HP = int.Parse(DecryptAttribute(eGameAtr, "HP")); float AtkValue = float.Parse(DecryptAttribute(eGameAtr, "AtkValue")); float DefValue = float.Parse(DecryptAttribute(eGameAtr, "DefValue")); float AtkSpeed = float.Parse(DecryptAttribute(eGameAtr, "AtkSpeed")); float AtkRange = float.Parse(DecryptAttribute(eGameAtr, "AtkRange")); float MoveSpeed = float.Parse(DecryptAttribute(eGameAtr, "MoveSpeed")); bool IsMove = bool.Parse(DecryptAttribute(eGameAtr, "IsMove")); bool IsAtk = bool.Parse(DecryptAttribute(eGameAtr, "IsAtk")); //float HP = int.Parse(eGameAtr.GetAttribute("HP")); //float AtkValue = float.Parse(eGameAtr.GetAttribute("AtkValue")); //float DefValue = float.Parse(eGameAtr.GetAttribute("DefValue")); //float AtkSpeed = float.Parse(eGameAtr.GetAttribute("AtkSpeed")); //float AtkRange = float.Parse(eGameAtr.GetAttribute("AtkRange")); //float MoveSpeed = float.Parse(eGameAtr.GetAttribute("MoveSpeed")); //bool IsMove = bool.Parse(eGameAtr.GetAttribute("IsMove")); //bool IsAtk = bool.Parse(eGameAtr.GetAttribute("IsAtk")); //添加到当前实体管理类 EntityManager.Instance.AddEntity(pos, qua, entityType, modelName, mapCubeIndex, pathIndex, eventIndex, HP, AtkValue, DefValue, AtkSpeed, AtkRange, MoveSpeed, IsMove, IsAtk); //更新地图块的状态 MapManager.Instance.GetMapCube(mapCubeIndex).m_isEmpty = false; } } else if (element.Name == "PathList") { //根据当前地图信息生成寻路数据 PathManager.Instance.GeneratePointMsg(); //读取并加载存档中的路径信息 foreach (XmlElement ePath in element.ChildNodes) { //状态信息 int index = int.Parse(DecryptAttribute(ePath, "Index")); bool isEmpty = bool.Parse(DecryptAttribute(ePath, "IsEmpty")); //int index = int.Parse(ePath.GetAttribute("Index")); //bool isEmpty = bool.Parse(ePath.GetAttribute("IsEmpty")); //关键点信息 XmlElement eKeyPointList = (XmlElement)ePath.SelectSingleNode("KeyPointList"); List <Vector2> tempKeyPointList = new List <Vector2>(); foreach (XmlElement eKeyPoint in eKeyPointList.ChildNodes) { Vector2 tempKeyPoint = new Vector2 { x = int.Parse(DecryptAttribute(eKeyPoint, "x")), y = int.Parse(DecryptAttribute(eKeyPoint, "y")) //x = int.Parse(eKeyPoint.GetAttribute("x")), //y = int.Parse(eKeyPoint.GetAttribute("y")) }; tempKeyPointList.Add(tempKeyPoint); } //点信息 XmlElement ePointList = (XmlElement)ePath.SelectSingleNode("PointList"); List <Vector2> tempPointList = new List <Vector2>(); foreach (XmlElement ePoint in ePointList.ChildNodes) { Vector2 tempPoint = new Vector2 { x = int.Parse(DecryptAttribute(ePoint, "x")), y = int.Parse(DecryptAttribute(ePoint, "y")) //x = int.Parse(ePoint.GetAttribute("x")), //y = int.Parse(ePoint.GetAttribute("y")) }; tempPointList.Add(tempPoint); } //添加到当前路径管理类 PathManager.Instance.AddPath(index, isEmpty, tempKeyPointList, tempPointList); } } else if (element.Name == "EventList") { foreach (XmlElement eEvent in element.ChildNodes) { int index = int.Parse(DecryptAttribute(eEvent, "Index")); string type = DecryptAttribute(eEvent, "Type"); if (type.CompareTo("Birth") == 0) { Debug.Log("BIRTHEVENT: " + type); float cd = float.Parse(DecryptAttribute(eEvent, "CD")); float time = float.Parse(DecryptAttribute(eEvent, "Time")); bool isInfinite = bool.Parse(DecryptAttribute(eEvent, "IsInfinite")); BirthEvent birthEvent = new BirthEvent(cd, time, isInfinite); EventManager.Instance.AddBirthEvent(birthEvent); } else if (type.CompareTo("Bomb") == 0) { float delay = float.Parse(DecryptAttribute(eEvent, "Delay")); float hurt = float.Parse(DecryptAttribute(eEvent, "Hurt")); bool isDetroy = bool.Parse(DecryptAttribute(eEvent, "IsDestroy")); BombEvent bombEvent = new BombEvent(delay, hurt, isDetroy); EventManager.Instance.AddBombEvent(bombEvent); } else if (type.CompareTo("Speed") == 0) { float speed = float.Parse(DecryptAttribute(eEvent, "Speed")); float time = float.Parse(DecryptAttribute(eEvent, "Time")); bool isInfinite = bool.Parse(DecryptAttribute(eEvent, "IsInfinite")); SpeedEvent speedEvent = new SpeedEvent(speed, time, isInfinite); EventManager.Instance.AddSpeedEvent(speedEvent); } else if (type.CompareTo("Telepo") == 0) { int teleportID = int.Parse(DecryptAttribute(eEvent, "TeleportID")); float cd = float.Parse(DecryptAttribute(eEvent, "CD")); float time = float.Parse(DecryptAttribute(eEvent, "Time")); bool isInfinite = bool.Parse(DecryptAttribute(eEvent, "IsInfinite")); TeleportEvent teleportEvent = new TeleportEvent(teleportID, cd, time, isInfinite); EventManager.Instance.AddTeleportEvent(teleportEvent); } } } else if (element.Name == "Music") { if (element.HasAttributes) { string name = DecryptAttribute(element, "Name"); float volume = float.Parse(DecryptAttribute(element, "Volume")); //string name = element.GetAttribute("Name"); //float volume = float.Parse(element.GetAttribute("Volume")); MusicManager.Instance.SetMusic(name, volume); } } } return(true); } catch { LogManager.Instance.Log("加载地图失败!"); return(false); } }
public static IMapEvent SerdesEvent(IMapEvent e, ISerializer s, AssetId chainSource, TextId textSourceId, AssetMapping mapping) { if (s == null) { throw new ArgumentNullException(nameof(s)); } var initialPosition = s.Offset; s.Begin(); var type = s.EnumU8("Type", e?.EventType ?? MapEventType.UnkFf); e = type switch // Individual parsers handle byte range [1,9] { MapEventType.Action => ActionEvent.Serdes((ActionEvent)e, mapping, s), MapEventType.AskSurrender => AskSurrenderEvent.Serdes((AskSurrenderEvent)e, s), MapEventType.ChangeIcon => ChangeIconEvent.Serdes((ChangeIconEvent)e, mapping, s), MapEventType.ChangeUsedItem => ChangeUsedItemEvent.Serdes((ChangeUsedItemEvent)e, mapping, s), MapEventType.Chest => ChestEvent.Serdes((ChestEvent)e, mapping, s, textSourceId), MapEventType.CloneAutomap => CloneAutomapEvent.Serdes((CloneAutomapEvent)e, mapping, s), MapEventType.CreateTransport => CreateTransportEvent.Serdes((CreateTransportEvent)e, s), MapEventType.DataChange => DataChangeEvent.Serdes((DataChangeEvent)e, mapping, s), MapEventType.Door => DoorEvent.Serdes((DoorEvent)e, mapping, s, textSourceId), MapEventType.Encounter => EncounterEvent.Serdes((EncounterEvent)e, s), MapEventType.EndDialogue => EndDialogueEvent.Serdes((EndDialogueEvent)e, s), MapEventType.Execute => ExecuteEvent.Serdes((ExecuteEvent)e, s), MapEventType.MapExit => TeleportEvent.Serdes((TeleportEvent)e, mapping, s), MapEventType.Modify => ModifyEvent.BaseSerdes((ModifyEvent)e, mapping, chainSource, s), MapEventType.Offset => OffsetEvent.Serdes((OffsetEvent)e, s), MapEventType.Pause => PauseEvent.Serdes((PauseEvent)e, s), MapEventType.PlaceAction => PlaceActionEvent.Serdes((PlaceActionEvent)e, s), MapEventType.PlayAnimation => PlayAnimationEvent.Serdes((PlayAnimationEvent)e, mapping, s), MapEventType.Query => QueryEvent.Serdes((QueryEvent)e, mapping, s, textSourceId), MapEventType.RemovePartyMember => RemovePartyMemberEvent.Serdes((RemovePartyMemberEvent)e, mapping, s), MapEventType.Script => DoScriptEvent.Serdes((DoScriptEvent)e, mapping, s), MapEventType.Signal => SignalEvent.Serdes((SignalEvent)e, s), MapEventType.SimpleChest => SimpleChestEvent.Serdes((SimpleChestEvent)e, mapping, s), MapEventType.Sound => SoundEvent.Serdes((SoundEvent)e, mapping, s), MapEventType.Spinner => SpinnerEvent.Serdes((SpinnerEvent)e, s), MapEventType.StartDialogue => StartDialogueEvent.Serdes((StartDialogueEvent)e, mapping, s), MapEventType.Text => MapTextEvent.Serdes((MapTextEvent)e, mapping, s, textSourceId), MapEventType.Trap => TrapEvent.Serdes((TrapEvent)e, s), MapEventType.Wipe => WipeEvent.Serdes((WipeEvent)e, s), _ => DummyMapEvent.Serdes((DummyMapEvent)e, s, type) }; s.End(); if (e is IBranchingEvent) { s.Assert(s.Offset - initialPosition == 8, "Query events should always be 8 bytes"); } else { s.Assert(s.Offset - initialPosition == 10, "Non-query map events should always be 10 bytes"); } return(e); } /* == Binary Serialisable Event types: == * 1 Teleport (teleport 300 32 75) * 2 Door (open_door ...) * 3 Chest (open_chest ...) * 4 Text (map_text 100) * 5 Spinner (spinner ...) * 6 Trap (trap ...) * 7 ChangeUsedItem (change_used_item ...) * 8 DataChange (further subdivided by operation: min,max,?,set,add,sub,add%,sub%) * 0 Unk0 (TODO) * 2 Health (party[Tom].health += 20%) * 3 Mana (party[Sira].mana -= 5) * 5 Status (party[Rainer].status[Poisoned] = max) * 7 Language (party[Tom].language[Iskai] = max) * 8 Experience (party[Drirr].experience += 2000) * B UnkB (TODO) * C UnkC (TODO) * 13 Item (party[Tom].items[LughsShield] = 1) * 14 Gold (party[Joe].gold += 12) * 15 Food (party[Siobhan].food -= 10%) * 9 ChangeIcon (scope: rel vs abs, temp vs perm) * 0 Underlay (map.tempUnderlay[23,12] = 47) * 1 Overlay (map.permOverlay[+0,-3] = 1231) * 2 Wall (map.tempWall[10, 10] = 7) * 3 Floor (map.permFloor[64, 64] = 1) * 4 Ceiling (map.permCeiling[12, 24] = 7) * 5 NpcMovement (npc[12].permMovement = 3) * 6 NpcSprite (npc[5].tempSprite = 14) * 7 Chain (map.tempChain[10, 10] = 15) * 8 BlockHard (block_hard ...) * 9 BlockSoft (block_soft ...) * A Trigger (map.tempTrigger[96, 7] = Normal) * A Encounter (encounter ...) * B PlaceAction * 0 LearnCloseCombat * 1 Heal * 2 Cure * 3 RemoveCurse * 4 AskOpinion * 5 RestoreItemEnergy * 6 SleepInRoom * 7 Merchant * 8 OrderFood * 9 ScrollMerchant * B LearnSpells * C RepairItem * C Query (further subdivided by operation: NZ, <=, !=, ==, >=, >, <) * 0 Switch (switch[100]), (!switch[203]), (switch[KhunagMentionedSecretPassage]) * 1 Unk1 * 4 Unk4 * 5 HasPartyMember (party[Tom].isPresent) * 6 HasItem (!party.hasItem[Axe]) * 7 UsedItem (context.usedItem == Pick) * 9 PreviousActionResult (context.result) * A ScriptDebugMode (context.isDebug) * C UnkC * E NpcActive (npc[16].isActive) * F Gold (party.gold > 100) * 11 RandomChance (random(50)) * 12 Unk12 * 14 ChosenVerb (context.verb == Examine) * 15 Conscious (party[Tom].isConscious) * 1A Leader (party[Rainer].isLeader) * 1C Ticker (ticker[50] > 12) * 1D Map (context.map == Drinno3) * 1E Unk1E * 1F PromptPlayer (askYesNo(100)) * 19 Unk19 * 20 TriggerType (context.trigger == UseItem) * 21 Unk21 * 22 EventUsed (context.event[108].hasRun) * 23 DemoVersion (context.isDemo) * 29 Unk29 * 2A Unk2A * 2B PromptPlayerNumeric (askNumeric() = 1042) * D Modify * 0 Switch (switch[125] = 1) * 1 DisableEventChain (map[CantosHouse].chain[120] = 0) * 2 Unk2 * 4 NpcActive (set_npc_active ...) * 5 AddPartyMember (add_party_member ...) * 6 InventoryItem (party.item[Knife] += 3) * B Lighting (map.lighting = 5) ?? * F PartyGold (party.gold = min) * 10 PartyRations (party.rations += 12) * 12 Time (context.time += 6) * 1A Leader (party.leader = Tom) * 1C Ticker (ticker[93] = 108) * E Action (action ...) * 0 Word * 1 AskAboutItem * 2 Unk2 // Pay money? See ES156 (Garris, Gratogel sailor) * 4 Unk4 * 5 Unk5 * 6 StartDialogue * 7 FinishDialogue * 8 DialogueLine * 9 Unk9 * E Unk14 * 17 Unk23 * 2D Unk45 * 2E UseItem * 2F EquipItem * 30 UnequipItem * 36 PickupItem * 39 Unk57 * 3D Unk61 * F Signal (signal ...) * 10 CloneAutomap (clone_automap ...) * 11 Sound (sound ...) * 12 StartDialogue (start_dialogue ...) * 13 CreateTransport (???) * 14 Execute (execute) * 15 RemovePartyMember (remove_party_member ...) * 16 EndDialogue (end_dialogue) * 17 Wipe (wipe ...) * 18 PlayAnimation (play_anim ...) * 19 Offset (offset 0 0) * 1A Pause (pause 3) * 1B SimpleChest (simple_chest ...) * 1C AskSurrender (ask_surrender) * 1D Script (script 15) * FF UnkFF */ }
static Event ParseEvent(IDataReader dataReader) { Event @event; var type = (EventType)dataReader.ReadByte(); switch (type) { case EventType.Teleport: { // 1. byte is the x coordinate // 2. byte is the y coordinate // 3. byte is the character direction // Then 1 unknown byte // Then 1 byte for the transtion type (0-5) // Then a word for the map index // Then 2 unknown bytes (seem to be 00 FF) uint x = dataReader.ReadByte(); uint y = dataReader.ReadByte(); var direction = (CharacterDirection)dataReader.ReadByte(); var unknown1 = dataReader.ReadByte(); var transition = (TeleportEvent.TransitionType)dataReader.ReadByte(); uint mapIndex = dataReader.ReadWord(); var unknown2 = dataReader.ReadBytes(2); @event = new TeleportEvent { MapIndex = mapIndex, X = x, Y = y, Direction = direction, Transition = transition, Unknown1 = unknown1, Unknown2 = unknown2, }; break; } case EventType.Door: { // 1. byte is a lockpicking chance reduction (0: already open, 100: can't open via lockpicking) // 2. byte is the door index (used for unlock bits in savegame) // 3. byte is an optional text index that is shown initially (0xff = no text) // 4. byte is an optional text index if the door was unlocked (0xff = no text) // 5. byte is unknown (always 0) // word at position 6 is the key index if a key must unlock it // last word is the event index (0-based) of the event that is called when unlocking fails var lockpickingChanceReduction = dataReader.ReadByte(); var doorIndex = dataReader.ReadByte(); var textIndex = dataReader.ReadByte(); var unlockTextIndex = dataReader.ReadByte(); var unused = dataReader.ReadByte(); uint keyIndex = dataReader.ReadWord(); var unlockFailEventIndex = dataReader.ReadWord(); @event = new DoorEvent { LockpickingChanceReduction = lockpickingChanceReduction, DoorIndex = doorIndex, TextIndex = textIndex, UnlockTextIndex = unlockTextIndex, Unused = unused, KeyIndex = keyIndex, UnlockFailedEventIndex = unlockFailEventIndex }; break; } case EventType.Chest: { // 1. byte is a lockpicking chance reduction (0: already open, 100: can't open via lockpicking) // 2. byte are the chest flags // 3. byte is an optional text index (0xff = no text) // 4. byte is the chest index (0-based) // 5. byte (0 = chest, 1 = pile/removable loot or item) or "remove if empty" // word at position 6 is the key index if a key must unlock it // last word is the event index (0-based) of the event that is called when unlocking fails var lockpickingChanceReduction = dataReader.ReadByte(); var flags = (ChestEvent.ChestFlags)dataReader.ReadByte(); var textIndex = dataReader.ReadByte(); uint chestIndex = dataReader.ReadByte(); bool removeWhenEmpty = dataReader.ReadByte() != 0; uint keyIndex = dataReader.ReadWord(); var unlockFailEventIndex = dataReader.ReadWord(); @event = new ChestEvent { LockpickingChanceReduction = lockpickingChanceReduction, Flags = flags, TextIndex = textIndex, ChestIndex = chestIndex, RemoveWhenEmpty = removeWhenEmpty, KeyIndex = keyIndex, UnlockFailedEventIndex = unlockFailEventIndex }; break; } case EventType.PopupText: { // event image index (0xff = no image) // trigger (1 = move, 2 = eye cursor, 3 = both) // unknown boolean // map text index as word // 4 unknown bytes var eventImageIndex = dataReader.ReadByte(); var popupTrigger = (EventTrigger)dataReader.ReadByte(); var unknownBool = dataReader.ReadByte() != 0; var textIndex = dataReader.ReadWord(); var unknown = dataReader.ReadBytes(4); @event = new PopupTextEvent { EventImageIndex = eventImageIndex, PopupTrigger = popupTrigger, TextIndex = textIndex, UnknownBool = unknownBool, Unknown = unknown }; break; } case EventType.Spinner: { var direction = (CharacterDirection)dataReader.ReadByte(); var unused = dataReader.ReadBytes(8); @event = new SpinnerEvent { Direction = direction, Unused = unused }; break; } case EventType.Trap: { var ailment = (TrapEvent.TrapAilment)dataReader.ReadByte(); var target = (TrapEvent.TrapTarget)dataReader.ReadByte(); var affectedGenders = (GenderFlag)dataReader.ReadByte(); var baseDamage = dataReader.ReadByte(); var unused = dataReader.ReadBytes(5); // unused @event = new TrapEvent { Ailment = ailment, Target = target, AffectedGenders = affectedGenders, BaseDamage = baseDamage, Unused = unused }; break; } case EventType.RemoveBuffs: { byte affectedBuffs = dataReader.ReadByte(); var unused = dataReader.ReadBytes(8); @event = new RemoveBuffsEvent { AffectedBuff = affectedBuffs == 0 ? (ActiveSpellType?)null: (ActiveSpellType)(affectedBuffs - 1), Unused = unused }; break; } case EventType.Riddlemouth: { var introTextIndex = dataReader.ReadByte(); var solutionTextIndex = dataReader.ReadByte(); var unused = dataReader.ReadBytes(3); var correctAnswerTextIndex1 = dataReader.ReadWord(); var correctAnswerTextIndex2 = dataReader.ReadWord(); @event = new RiddlemouthEvent { RiddleTextIndex = introTextIndex, SolutionTextIndex = solutionTextIndex, CorrectAnswerDictionaryIndex1 = correctAnswerTextIndex1, CorrectAnswerDictionaryIndex2 = correctAnswerTextIndex2, Unused = unused }; break; } case EventType.Award: { var awardType = (AwardEvent.AwardType)dataReader.ReadByte(); var awardOperation = (AwardEvent.AwardOperation)dataReader.ReadByte(); var random = dataReader.ReadByte() != 0; var awardTarget = (AwardEvent.AwardTarget)dataReader.ReadByte(); var unknown = dataReader.ReadByte(); var awardTypeValue = dataReader.ReadWord(); var value = dataReader.ReadWord(); @event = new AwardEvent { TypeOfAward = awardType, Operation = awardOperation, Random = random, Target = awardTarget, AwardTypeValue = awardTypeValue, Value = value, Unknown = unknown }; break; } case EventType.ChangeTile: { var x = dataReader.ReadByte(); var y = dataReader.ReadByte(); var unknown = dataReader.ReadBytes(3); var frontTileIndex = dataReader.ReadWord(); // also wall/object index in lower byte var mapIndex = dataReader.ReadWord(); @event = new ChangeTileEvent { X = x, Y = y, FrontTileIndex = frontTileIndex, MapIndex = mapIndex, Unknown = unknown }; break; } case EventType.StartBattle: { var unknown1 = dataReader.ReadBytes(6); var monsterGroupIndex = dataReader.ReadByte(); var unknown2 = dataReader.ReadBytes(2); @event = new StartBattleEvent { MonsterGroupIndex = monsterGroupIndex, Unknown1 = unknown1, Unknown2 = unknown2 }; break; } case EventType.EnterPlace: { // map text index when closed (0xff is default message) // place type (see PlaceType) // opening hour // closing hour // text index for using the place (sleep, train, buy, etc) // place index (1-based, word) // 2 unknown bytes var textIndexWhenClosed = dataReader.ReadByte(); var placeType = (PlaceType)dataReader.ReadByte(); var openingHour = dataReader.ReadByte(); var closingHour = dataReader.ReadByte(); var usePlaceTextIndex = dataReader.ReadByte(); var placeIndex = dataReader.ReadWord(); var merchantIndex = dataReader.ReadWord(); @event = new EnterPlaceEvent { ClosedTextIndex = textIndexWhenClosed, PlaceType = placeType, OpeningHour = openingHour, ClosingHour = closingHour, PlaceIndex = placeIndex, UsePlaceTextIndex = usePlaceTextIndex, MerchantDataIndex = merchantIndex }; break; } case EventType.Condition: { var conditionType = (ConditionEvent.ConditionType)dataReader.ReadByte(); var value = dataReader.ReadByte(); var count = dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(2); var objectIndex = dataReader.ReadWord(); var jumpToIfNotFulfilled = dataReader.ReadWord(); @event = new ConditionEvent { TypeOfCondition = conditionType, ObjectIndex = objectIndex, Value = value, Count = count, Unknown1 = unknown1, ContinueIfFalseWithMapEventIndex = jumpToIfNotFulfilled }; break; } case EventType.Action: { var actionType = (ActionEvent.ActionType)dataReader.ReadByte(); var value = dataReader.ReadByte(); var count = dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(2); var objectIndex = dataReader.ReadWord(); var unknown2 = dataReader.ReadBytes(2); @event = new ActionEvent { TypeOfAction = actionType, ObjectIndex = objectIndex, Value = value, Unknown1 = unknown1, Unknown2 = unknown2 }; break; } case EventType.Dice100Roll: { var chance = dataReader.ReadByte(); var unused = dataReader.ReadBytes(6); var jumpToIfNotFulfilled = dataReader.ReadWord(); @event = new Dice100RollEvent { Chance = chance, Unused = unused, ContinueIfFalseWithMapEventIndex = jumpToIfNotFulfilled }; break; } case EventType.Conversation: { var interaction = (ConversationEvent.InteractionType)dataReader.ReadByte(); var unused1 = dataReader.ReadBytes(4); // unused var value = dataReader.ReadWord(); var unused2 = dataReader.ReadBytes(2); // unused @event = new ConversationEvent { Interaction = interaction, Value = value, Unused1 = unused1, Unused2 = unused2 }; break; } case EventType.PrintText: { var npcTextIndex = dataReader.ReadByte(); var unused = dataReader.ReadBytes(8); // unused @event = new PrintTextEvent { NPCTextIndex = npcTextIndex, Unused = unused }; break; } case EventType.Create: { var createType = (CreateEvent.CreateType)dataReader.ReadByte(); var unused = dataReader.ReadBytes(4); var amount = dataReader.ReadWord(); var itemIndex = dataReader.ReadWord(); @event = new CreateEvent { TypeOfCreation = createType, Unused = unused, Amount = amount, ItemIndex = itemIndex }; break; } case EventType.Decision: { var textIndex = dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(6); var noEventIndex = dataReader.ReadWord(); @event = new DecisionEvent { TextIndex = textIndex, NoEventIndex = noEventIndex, Unknown1 = unknown1 }; break; } case EventType.ChangeMusic: { var musicIndex = dataReader.ReadWord(); var volume = dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(6); @event = new ChangeMusicEvent { MusicIndex = musicIndex, Volume = volume, Unknown1 = unknown1 }; break; } case EventType.Exit: { @event = new ExitEvent { Unused = dataReader.ReadBytes(9) }; break; } case EventType.Spawn: { // byte0: x // byte1: y // byte2: travel type (see TravelType) // byte3-4: unused? // byte5-6: map index // byte7-8: unused? var x = dataReader.ReadByte(); var y = dataReader.ReadByte(); var travelType = (TravelType)dataReader.ReadByte(); var unknown1 = dataReader.ReadBytes(2); // unknown var mapIndex = dataReader.ReadWord(); var unknown2 = dataReader.ReadBytes(2); // unknown @event = new SpawnEvent { X = x, Y = y, TravelType = travelType, Unknown1 = unknown1, MapIndex = mapIndex, Unknown2 = unknown2 }; break; } case EventType.Interact: { @event = new InteractEvent { Unused = dataReader.ReadBytes(9) }; break; } default: { @event = new DebugEvent { Data = dataReader.ReadBytes(9) }; break; } } @event.Type = type; return(@event); }
//显示事件属性 private void DisplayEvent() { m_objBirthEvent.SetActive(false); m_objBombEvent.SetActive(false); m_objSpeedEvent.SetActive(false); m_objTeleportEvent.SetActive(false); string eventType = m_currEvent.Type; Transform tempTransform; if (eventType == "Birth") { m_objBirthEvent.SetActive(true); BirthEvent birthEvent = (BirthEvent)m_currEvent; tempTransform = m_objBirthEvent.transform.Find("Index"); tempTransform.Find("Text").GetComponent <Text>().text = birthEvent.m_index.ToString(); tempTransform = m_objBirthEvent.transform.Find("CD"); tempTransform.GetComponentInChildren <InputField>().text = birthEvent.m_cd.ToString(); tempTransform = m_objBirthEvent.transform.Find("Time"); tempTransform.GetComponentInChildren <InputField>().text = birthEvent.m_time.ToString(); tempTransform = m_objBirthEvent.transform.Find("IsInfinite"); tempTransform.GetComponentInChildren <Toggle>().isOn = birthEvent.m_isInfinite; } else if (eventType == "Bomb") { m_objBombEvent.SetActive(true); BombEvent bombEvent = (BombEvent)m_currEvent; tempTransform = m_objBombEvent.transform.Find("Index"); tempTransform.Find("Text").GetComponent <Text>().text = bombEvent.m_index.ToString(); tempTransform = m_objBombEvent.transform.Find("Delay"); tempTransform.GetComponentInChildren <InputField>().text = bombEvent.m_delay.ToString(); tempTransform = m_objBombEvent.transform.Find("Hurt"); tempTransform.GetComponentInChildren <InputField>().text = bombEvent.m_hurt.ToString(); tempTransform = m_objBombEvent.transform.Find("IsDestroy"); tempTransform.GetComponentInChildren <Toggle>().isOn = bombEvent.m_isDestory; } else if (eventType == "Speed") { m_objSpeedEvent.SetActive(true); SpeedEvent speedEvent = (SpeedEvent)m_currEvent; tempTransform = m_objSpeedEvent.transform.Find("Index"); tempTransform.Find("Text").GetComponent <Text>().text = speedEvent.m_index.ToString(); tempTransform = m_objSpeedEvent.transform.Find("Speed"); tempTransform.GetComponentInChildren <InputField>().text = speedEvent.m_speed.ToString(); tempTransform = m_objSpeedEvent.transform.Find("Time"); tempTransform.GetComponentInChildren <InputField>().text = speedEvent.m_time.ToString(); tempTransform = m_objSpeedEvent.transform.Find("IsInfinite"); tempTransform.GetComponentInChildren <Toggle>().isOn = speedEvent.m_isInfinite; } else if (eventType == "Teleport") { m_objTeleportEvent.SetActive(true); TeleportEvent teleportEvent = (TeleportEvent)m_currEvent; tempTransform = m_objTeleportEvent.transform.Find("Index"); tempTransform.Find("Text").GetComponent <Text>().text = teleportEvent.m_index.ToString(); tempTransform = m_objTeleportEvent.transform.Find("TeleportID"); tempTransform.GetComponentInChildren <InputField>().text = teleportEvent.m_teleportID.ToString(); tempTransform = m_objTeleportEvent.transform.Find("CD"); tempTransform.GetComponentInChildren <InputField>().text = teleportEvent.m_cd.ToString(); tempTransform = m_objTeleportEvent.transform.Find("Time"); tempTransform.GetComponentInChildren <InputField>().text = teleportEvent.m_time.ToString(); tempTransform = m_objTeleportEvent.transform.Find("IsInfinite"); tempTransform.GetComponentInChildren <Toggle>().isOn = teleportEvent.m_isInfinite; } else { LogManager.Instance.Log("事件类型不存在!"); return; } }