protected override void OnUpdate() { if (Time.time - lastSynchTime < 0.2 || !GameVariable.IsNeedSynchSceneInfo) { return; } lastSynchTime = Time.time; var positions = group.GetComponentDataArray <Position>(); var targetPositions = group.GetComponentDataArray <TargetPosition>(); long synchTime = System.DateTime.Now.Millisecond; for (int i = 0; i < targetPositions.Length; i++) { var targetPos = targetPositions[i].Value; var pos = positions[i].Value; scene_walk.request walk = new scene_walk.request(); // Debug.Log("upload pos"+pos.ToString()); walk.start_x = (int)(pos.x * GameConst.RealToLogic); walk.start_y = (int)(pos.y * GameConst.RealToLogic); walk.start_z = (int)(pos.z * GameConst.RealToLogic); walk.end_x = (int)(targetPos.x * GameConst.RealToLogic); walk.end_y = (int)(targetPos.y * GameConst.RealToLogic); walk.end_z = (int)(targetPos.z * GameConst.RealToLogic); walk.time = synchTime; NetMsgDispatcher.GetInstance().SendMessage <Protocol.scene_walk>(walk); } }
// 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() { if (Time.time - lastSynchTime < 0.05 || !GameVariable.IsNeedSynchSceneInfo) { return; } var positions = group.ToComponentArray <Transform>(); var targetPositions = group.ToComponentDataArray <TargetPosition>(Allocator.TempJob); var synchInfos = group.ToComponentDataArray <PosSynchInfo>(Allocator.TempJob); var entities = group.ToEntityArray(Allocator.TempJob); long synchTime = System.DateTime.Now.Millisecond; for (int i = 0; i < targetPositions.Length; i++) { var targetPos = targetPositions[i].Value; var pos = positions[i].localPosition; var synchInfo = synchInfos[i]; var distance = Vector3.Distance(targetPos, pos); var distance_with_last = Vector3.Distance(synchInfo.LastUploadPos, targetPos); // Debug.Log("distance:"+distance+" distance_with_last:"+distance_with_last+" upload pos"+pos.x+" "+pos.y+" "+pos.z); if (distance <= 0.5 && distance_with_last <= 0.5) { continue; } synchInfo.LastUploadPos = targetPos; // synchInfos[i] = synchInfo; EntityManager.SetComponentData <PosSynchInfo>(entities[i], synchInfo); scene_walk.request walk = new scene_walk.request(); walk.start_x = (long)(pos.x * GameConst.RealToLogic); walk.start_y = (long)(pos.y * GameConst.RealToLogic); walk.start_z = (long)(pos.z * GameConst.RealToLogic); walk.end_x = (long)(targetPos.x * GameConst.RealToLogic); // walk.end_y = (long)(targetPos.y*GameConst.RealToLogic); walk.end_z = (long)(targetPos.z * GameConst.RealToLogic); walk.time = synchTime; walk.jump_state = 0; NetMsgDispatcher.GetInstance().SendMessage <Protocol.scene_walk>(walk); lastSynchTime = Time.time; } entities.Dispose(); targetPositions.Dispose(); synchInfos.Dispose(); }