public void CastSkill(int skillIndex = -1) { var roleGameOE = RoleMgr.GetInstance().GetMainRole(); var roleInfo = roleGameOE.GetComponent <RoleInfo>(); var skillID = SkillManager.GetInstance().GetSkillIDByIndex(skillIndex); string assetPath = ResPath.GetRoleSkillResPath(skillID); bool isNormalAttack = skillIndex == -1;//普通攻击 if (!isNormalAttack) { SkillManager.GetInstance().ResetCombo();//使用非普攻技能时就重置连击索引 } var uid = SceneMgr.Instance.EntityManager.GetComponentData <UID>(roleGameOE.Entity); Action <TimelineInfo.Event> afterAdd = null; if (isNormalAttack) { //普攻的话增加连击索引 afterAdd = (TimelineInfo.Event e) => { if (e == TimelineInfo.Event.AfterAdd) { SkillManager.GetInstance().IncreaseCombo(); } }; } var timelineInfo = new TimelineInfo { ResPath = assetPath, Owner = roleGameOE.Entity, StateChange = afterAdd }; TimelineManager.GetInstance().AddTimeline(uid.Value, timelineInfo, SceneMgr.Instance.EntityManager); }
protected override void OnUpdate() { var requestArray = Group.GetComponentDataArray <NameboardSpawnRequest>(); var entityArray = Group.GetEntityArray(); var spawnRequests = new NameboardSpawnRequest[requestArray.Length]; for (var i = 0; i < requestArray.Length; i++) { spawnRequests[i] = requestArray[i]; PostUpdateCommands.DestroyEntity(entityArray[i]); } for (var i = 0; i < spawnRequests.Length; i++) { var request = spawnRequests[i]; GameObjectEntity nameboardGOE = m_world.Spawn <GameObjectEntity>(ResMgr.GetInstance().GetPrefab("Nameboard")); nameboardGOE.transform.SetParent(nameboardCanvas); var nameboardBehav = nameboardGOE.GetComponent <Nameboard>(); var uid = EntityManager.GetComponentData <UID>(request.Owner); string name = SceneMgr.Instance.GetNameByUID(uid.Value); nameboardBehav.Name = name; var isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(request.Owner); nameboardBehav.CurColorStyle = isMainRole ? Nameboard.ColorStyle.Green : Nameboard.ColorStyle.Red; if (EntityManager.HasComponent <NameboardData>(request.Owner)) { var nameboardData = EntityManager.GetComponentData <NameboardData>(request.Owner); nameboardData.UIEntity = nameboardGOE.Entity; nameboardData.UIResState = NameboardData.ResState.Loaded; EntityManager.SetComponentData(request.Owner, nameboardData); } } }
protected override void OnUpdate() { //TODO:控制刷新或请求频率 var requestArray = RequestGroup.ToComponentDataArray <RoleLooksNetRequest>(Allocator.TempJob); if (requestArray.Length == 0) { requestArray.Dispose(); return; } var requestEntityArray = RequestGroup.ToEntityArray(Allocator.TempJob); // Copy requests as spawning will invalidate Group var requests = new RoleLooksNetRequest[requestArray.Length]; for (var i = 0; i < requestArray.Length; i++) { requests[i] = requestArray[i]; PostUpdateCommands.DestroyEntity(requestEntityArray[i]); } for (var i = 0; i < requests.Length; i++) { SprotoType.scene_get_role_look_info.request req = new SprotoType.scene_get_role_look_info.request(); req.uid = requests[i].roleUid; Entity owner = requests[i].owner; if (!EntityManager.Exists(owner)) { continue; } UnityMMO.NetMsgDispatcher.GetInstance().SendMessage <Protocol.scene_get_role_look_info>(req, (_) => { SprotoType.scene_get_role_look_info.response rsp = _ as SprotoType.scene_get_role_look_info.response; // Debug.Log("rsp.result : "+rsp.result.ToString()+" owner:"+owner.ToString()); if (rsp.result == UnityMMO.GameConst.NetResultOk) { RoleMgr.GetInstance().SetName(req.uid, rsp.role_looks_info.name); if (m_world.GetEntityManager().HasComponent <HealthStateData>(owner)) { var hpData = m_world.GetEntityManager().GetComponentData <HealthStateData>(owner); hpData.CurHp = rsp.role_looks_info.hp; hpData.MaxHp = rsp.role_looks_info.max_hp; m_world.GetEntityManager().SetComponentData <HealthStateData>(owner, hpData); } bool hasTrans = m_world.GetEntityManager().HasComponent <Transform>(owner); if (hasTrans) { var transform = m_world.GetEntityManager().GetComponentObject <Transform>(owner); //因为是异步操作,等后端发送信息过来时PostUpdateCommands已经失效了,所以不能这么用 RoleLooksSpawnRequest.Create(m_world.GetEntityManager(), (int)rsp.role_looks_info.career, transform.localPosition, transform.localRotation, owner, (int)rsp.role_looks_info.body, (int)rsp.role_looks_info.hair); } } }); } requestEntityArray.Dispose(); requestArray.Dispose(); }
protected override void OnUpdate() { var requestArray = Group.ToComponentDataArray <NameboardSpawnRequest>(Allocator.TempJob); var entityArray = Group.ToEntityArray(Allocator.TempJob); var spawnRequests = new NameboardSpawnRequest[requestArray.Length]; for (var i = 0; i < requestArray.Length; i++) { spawnRequests[i] = requestArray[i]; PostUpdateCommands.DestroyEntity(entityArray[i]); } for (var i = 0; i < spawnRequests.Length; i++) { var request = spawnRequests[i]; if (!EntityManager.Exists(request.Owner)) { continue; } GameObjectEntity nameboardGOE = m_world.SpawnByGameObject <GameObjectEntity>(ResMgr.GetInstance().GetGameObject("Nameboard")); nameboardGOE.transform.SetParent(nameboardCanvas); nameboardGOE.transform.localScale = new Vector3(-1, 1, 1); var nameboardBehav = nameboardGOE.GetComponent <Nameboard>(); var uid = EntityManager.GetComponentData <UID>(request.Owner); string name = SceneMgr.Instance.GetNameByUID(uid.Value); nameboardBehav.Name = name; var isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(request.Owner); // Debug.Log("name : "+name+" isMainRole:"+isMainRole); nameboardBehav.CurColorStyle = isMainRole ? Nameboard.ColorStyle.Green : Nameboard.ColorStyle.Red; if (EntityManager.HasComponent <NameboardData>(request.Owner)) { var nameboardData = EntityManager.GetComponentData <NameboardData>(request.Owner); nameboardData.UIEntity = nameboardGOE.Entity; nameboardData.UIResState = NameboardData.ResState.Loaded; EntityManager.SetComponentData(request.Owner, nameboardData); } bool hasHPData = EntityManager.HasComponent <HealthStateData>(request.Owner); // Debug.Log("has Hp data "+hasHPData); if (hasHPData) { var hpData = EntityManager.GetComponentData <HealthStateData>(request.Owner); nameboardBehav.MaxHp = hpData.MaxHp; nameboardBehav.CurHp = hpData.CurHp; // nameboardBehav.UpdateBloodBar(hpData.CurHp, hpData.MaxHp); } var sceneObjType = EntityManager.GetComponentData <SceneObjectTypeData>(request.Owner); nameboardBehav.SetBloodVisible(sceneObjType.Value == SceneObjectType.Role || sceneObjType.Value == SceneObjectType.Monster); } requestArray.Dispose(); entityArray.Dispose(); }
// Called when the state of the playable is set to Play public override void OnBehaviourPlay(Playable playable, FrameData info) { var isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(Owner); // Debug.Log("cast skill behav isMainRole :"+isMainRole.ToString()); if (isMainRole) { var trans = EntityMgr.GetComponentObject <Transform>(Owner); if (trans != null) { SprotoType.scene_cast_skill.request req = new SprotoType.scene_cast_skill.request(); req.skill_id = SkillID; req.cur_pos_x = (long)(trans.localPosition.x * GameConst.RealToLogic); req.cur_pos_y = (long)(trans.localPosition.y * GameConst.RealToLogic); req.cur_pos_z = (long)(trans.localPosition.z * GameConst.RealToLogic); req.target_pos_x = (long)(trans.localPosition.x * GameConst.RealToLogic); req.target_pos_y = (long)(trans.localPosition.y * GameConst.RealToLogic); req.target_pos_z = (long)(trans.localPosition.z * GameConst.RealToLogic); req.direction = (long)(trans.eulerAngles.y * GameConst.RealToLogic); // Debug.Log("req.direction : "+req.direction+" skillID "+SkillID); NetMsgDispatcher.GetInstance().SendMessage <Protocol.scene_cast_skill>(req, delegate(Sproto.SprotoTypeBase result){ SprotoType.scene_cast_skill.response ack = result as SprotoType.scene_cast_skill.response; // Debug.Log("ack : "+(ack!=null).ToString()); if (ack == null) { return; } Debug.Log("scene_cast_skill ack.result : " + ack.result); if (ack.result == 1) { XLuaFramework.CSLuaBridge.GetInstance().CallLuaFuncStr(GlobalEvents.MessageShow, "技能冷却中..."); return; } SkillManager.GetInstance().SetSkillCD((int)ack.skill_id, ack.cd_end_time); // // Debug.Log("playable : "+(Playable.Equals(playable, Playable.Null)).ToString()); // var graph = PlayableExtensions.GetGraph(playable); // // Debug.Log("graph.IsDone() : "+graph.IsDone().ToString()); // if (!graph.IsDone()) // { // var playableNum = graph.GetRootPlayableCount(); // // Debug.Log("playableNum : "+playableNum); // for (int i = 0; i < playableNum; i++) // { // var rootPlayable = graph.GetRootPlayable(i); // FindFlyWord(rootPlayable, ack.fight_event.defenders, 0); // } // } }); } } }
protected override void OnUpdate() { EntityArray entities = RoleGroup.GetEntityArray(); var roleStateArray = RoleGroup.GetComponentArray <RoleState>(); var mainRoleGOE = RoleMgr.GetInstance().GetMainRole(); float3 mainRolePos = float3.zero; if (mainRoleGOE != null) { mainRolePos = m_world.GetEntityManager().GetComponentData <Position>(mainRoleGOE.Entity).Value; } for (int i = 0; i < roleStateArray.Length; i++) { var roleState = roleStateArray[i]; var entity = entities[i]; bool isNeedReqLooksInfo = false; bool isNeedHideLooks = false; //其它玩家离主角近时就要请求该玩家的角色外观信息 var curPos = m_world.GetEntityManager().GetComponentData <Position>(entity).Value; float distance = Vector3.Distance(curPos, mainRolePos); Debug.Log("distance : " + distance); if (!roleState.hasLooks) { isNeedReqLooksInfo = distance <= 400; // bool isMainRole = m_world.GetEntityManager().HasComponent(entity, typeof(UnityMMO.MainRoleTag)); // if (isMainRole) // { // isNeedReqLooksInfo = true; // } // else // { // //其它玩家离主角近时就要请求该玩家的角色外观信息 // var curPos = m_world.GetEntityManager().GetComponentData<Position>(entity).Value; // float distance = Vector3.Distance(curPos, mainRolePos); // Debug.Log("distance : "+distance); // isNeedReqLooksInfo = distance <= 200; // } } else { isNeedHideLooks = distance >= 300; } if (isNeedReqLooksInfo) { roleState.hasLooks = true; RoleLooksNetRequest.Create(PostUpdateCommands, roleState.roleUid, entity); } } }
public override void OnPointerDown(PointerEventData eventData) { OnDrag(eventData); var goe = RoleMgr.GetInstance().GetMainRole(); AutoFight fightAi = goe.GetComponent <UnityMMO.AutoFight>(); if (fightAi != null) { fightAi.enabled = false; } var moveQuery = goe.GetComponent <UnityMMO.MoveQuery>(); if (moveQuery != null) { moveQuery.StopFindWay(); } }
protected override void OnUpdate() { var entities = RoleGroup.ToEntityArray(Allocator.TempJob); var uidArray = RoleGroup.ToComponentDataArray <UID>(Allocator.TempJob); var looksInfoArray = RoleGroup.ToComponentDataArray <LooksInfo>(Allocator.TempJob); var mainRoleGOE = RoleMgr.GetInstance().GetMainRole(); float3 mainRolePos = float3.zero; if (mainRoleGOE != null) { mainRolePos = m_world.GetEntityManager().GetComponentObject <Transform>(mainRoleGOE.Entity).localPosition; } for (int i = 0; i < looksInfoArray.Length; i++) { var uid = uidArray[i]; var looksInfo = looksInfoArray[i]; var entity = entities[i]; bool isNeedReqLooksInfo = false; bool isNeedHideLooks = false; //其它玩家离主角近时就要请求该玩家的角色外观信息 var curPos = m_world.GetEntityManager().GetComponentObject <Transform>(entity).localPosition; float distance = Vector3.Distance(curPos, mainRolePos); if (looksInfo.CurState == LooksInfo.State.None) { isNeedReqLooksInfo = distance <= 400; } else { isNeedHideLooks = distance >= 300; } // Debug.Log("isNeedReqLooksInfo : "+isNeedReqLooksInfo.ToString()+" looksInfo.CurState:"+looksInfo.CurState.ToString()); if (isNeedReqLooksInfo) { looksInfo.CurState = LooksInfo.State.Loading; // looksInfoArray[i] = looksInfo; EntityManager.SetComponentData <LooksInfo>(entities[i], looksInfo); RoleLooksNetRequest.Create(PostUpdateCommands, uid.Value, entity); } } entities.Dispose(); looksInfoArray.Dispose(); uidArray.Dispose(); }
protected override void OnUpdate() { EntityArray entities = RoleGroup.GetEntityArray(); var roleStateArray = RoleGroup.GetComponentArray <RoleState>(); var looksInfoArray = RoleGroup.GetComponentDataArray <LooksInfo>(); var mainRoleGOE = RoleMgr.GetInstance().GetMainRole(); float3 mainRolePos = float3.zero; if (mainRoleGOE != null) { mainRolePos = m_world.GetEntityManager().GetComponentObject <Transform>(mainRoleGOE.Entity).localPosition; } for (int i = 0; i < looksInfoArray.Length; i++) { var roleState = roleStateArray[i]; var looksInfo = looksInfoArray[i]; var entity = entities[i]; bool isNeedReqLooksInfo = false; bool isNeedHideLooks = false; //其它玩家离主角近时就要请求该玩家的角色外观信息 var curPos = m_world.GetEntityManager().GetComponentObject <Transform>(entity).localPosition; float distance = Vector3.Distance(curPos, mainRolePos); if (looksInfo.CurState == LooksInfo.State.None) { isNeedReqLooksInfo = distance <= 400; } else { isNeedHideLooks = distance >= 300; } // Debug.Log("isNeedReqLooksInfo : "+isNeedReqLooksInfo.ToString()+" looksInfo.CurState:"+looksInfo.CurState.ToString()); if (isNeedReqLooksInfo) { roleState.hasLooks = true; looksInfo.CurState = LooksInfo.State.Loading; looksInfoArray[i] = looksInfo; RoleLooksNetRequest.Create(PostUpdateCommands, roleState.roleUid, entity); } } }
public void Init(Entity owner, EntityManager entityMgr) { Owner = owner; EntityMgr = entityMgr; isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(Owner); }