private bool doSlowCreate(bool killAll) { if (slowCreateIds.Count < 1) { return(false); } GrowthTriggerInfo info = slowCreateIds[0] as GrowthTriggerInfo; if (info.type == "NPC") { NpcInitParam npcParam = new NpcInitParam(); npcParam.npc_res_id = info.resId; float y = mScene.GetHeight(info.x, info.z); npcParam.init_pos = new Vector3(info.x, y, info.z); npcParam.init_dir = info.dir; npcParam.alias = info.alias; npcParam.talk_id = info.talkID; ObjectBase obj = mScene.CreateSprite(npcParam); if (obj == null) { GameDebug.LogError("创建Npc失败。npcId:" + info.resId); return(false); } if ("ghost" == info.alias) { mScene.GhostObjects().Add(info); } if (obj != null) { if (killAll) { cacheIdKillAll.Add(obj.InstanceID); } else { cacheId.Add(obj.InstanceID); } } } else if (info.type == "PICK") { PickGrowthTriggerInfo pickinfo = info as PickGrowthTriggerInfo; List <PickInitParam> paramList = new List <PickInitParam>(); if (SceneObjManager.CreatePickInitParam((Pick.PickType)(System.Enum.Parse(typeof(Pick.PickType), pickinfo.picktype.ToString())), pickinfo.resId, pickinfo.content, new Vector3(info.x, mScene.GetHeight(info.x, info.z), info.z), info.dir, out paramList, false, Pick.FlyType.FLY_OUT, pickinfo.picktype != (int)Pick.PickType.SUPER_WEAPON)) { foreach (PickInitParam param in paramList) { param.init_pos.y = mScene.GetHeight(param.init_pos.x, param.init_pos.z); param.alias = info.alias; ObjectBase obj = mScene.CreateSprite(param); if (obj == null) { GameDebug.LogError("创建Pick失败。pickId:" + info.resId); return(false); } if (obj != null) { if (killAll) { cacheIdKillAll.Add(obj.InstanceID); } else { cacheId.Add(obj.InstanceID); } } } } } else if (info.type == "BUILD") { BuildGrowthTriggerInfo buildinfo = info as BuildGrowthTriggerInfo; BuildInitParam buildParam = new BuildInitParam(); buildParam.build_res_id = info.resId; float y = mScene.GetHeight(info.x, info.z); buildParam.init_pos = new Vector3(info.x, y, info.z); buildParam.init_dir = info.dir; buildParam.build_barrier = buildinfo.barrier > 0; buildParam.alias = info.alias; ObjectBase obj = mScene.CreateSprite(buildParam); if (obj == null) { GameDebug.LogError("创建Building失败。buildId:" + info.resId); return(false); } if (obj != null) { if (killAll) { cacheIdKillAll.Add(obj.InstanceID); } else { cacheId.Add(obj.InstanceID); } } } else if (info.type == "PARTICLE") { Vector3 pos = new Vector3(info.x, mScene.GetHeight(info.x, info.z), info.z); mScene.CreateEffect(info.resId, Vector3.one, pos, info.dir, info.alias); } slowCreateIds.RemoveAt(0); if (slowCreateIds.Count < 1) { return(false); } return(true); }
// 解析NpcGrowth private void ParseNpcGrowth(XmlNode node) { GrowthTrigger trigger = new GrowthTrigger(mScene); trigger.name = node.Attributes["name"].Value; XmlNodeList nodeList = node.ChildNodes; for (int i = 0; i < nodeList.Count; ++i) { XmlNode childNode = nodeList[i]; if (childNode != null && childNode.Name == "Step") { GrowthTriggerStep step = new GrowthTriggerStep(); int ka = System.Convert.ToInt32(childNode.Attributes["killAll"].Value); step.killAll = (ka != 0); step.time = System.Convert.ToInt32(childNode.Attributes["time"].Value); if (childNode.Attributes["repeat"] != null && childNode.Attributes["spacetime"] != null) { step.repeat = System.Convert.ToInt32(childNode.Attributes["repeat"].Value); step.spacetime = System.Convert.ToInt32(childNode.Attributes["spacetime"].Value); } XmlNodeList stepList = childNode.ChildNodes; for (int j = 0; j < stepList.Count; ++j) { XmlNode stepNode = stepList[j]; if (stepNode != null && stepNode.Name == "Growth") { GrowthTriggerInfo info = null; string growthtype = stepNode.Attributes["type"].Value; if (growthtype.Equals("PICK")) { info = new PickGrowthTriggerInfo(); (info as PickGrowthTriggerInfo).picktype = System.Convert.ToInt32(stepNode.Attributes["picktype"].Value); (info as PickGrowthTriggerInfo).content = System.Convert.ToInt32(stepNode.Attributes["content"].Value); } else if (growthtype.Equals("BUILD")) { info = new BuildGrowthTriggerInfo(); (info as BuildGrowthTriggerInfo).barrier = System.Convert.ToInt32(stepNode.Attributes["barrier"].Value); } else { info = new GrowthTriggerInfo(); } info.type = growthtype; info.resId = System.Convert.ToInt32(stepNode.Attributes["resId"].Value); info.x = System.Convert.ToSingle(stepNode.Attributes["x"].Value); info.z = System.Convert.ToSingle(stepNode.Attributes["z"].Value); info.dir = System.Convert.ToSingle(stepNode.Attributes["dir"].Value) * Mathf.Deg2Rad; if (stepNode.Attributes["talkid"] != null) { info.talkID = System.Convert.ToInt32(stepNode.Attributes["talkid"].Value); } if (stepNode.Attributes["name"] != null) { info.alias = stepNode.Attributes["name"].Value; } step.objs.Add(info); } } trigger.steps.Add(step); } } mTriggers.Add(trigger.name, trigger); }