// public static void Create(EntityCommandBuffer commandBuffer, int career, Vector3 position, Quaternion rotation, Entity ownerEntity, int body, int hair) // { // Debug.Log("create 1"); // var data = new RoleLooksSpawnRequest(career, position, rotation, ownerEntity, body, hair); // Debug.Log("create 2"); // commandBuffer.CreateEntity(); // Debug.Log("create 3"); // commandBuffer.AddComponent(data); // Debug.Log("create 4"); // } public static void Create(EntityManager entityMgr, int career, Vector3 position, Quaternion rotation, Entity ownerEntity, int body, int hair) { var data = new RoleLooksSpawnRequest(career, position, rotation, ownerEntity, body, hair); Entity entity = entityMgr.CreateEntity(typeof(RoleLooksSpawnRequest)); entityMgr.SetComponentData(entity, data); }
protected override void OnUpdate() { // Debug.Log("on OnUpdate role looks system"); var requestArray = SpawnGroup.ToComponentDataArray <RoleLooksSpawnRequest>(Allocator.TempJob); if (requestArray.Length == 0) { requestArray.Dispose(); return; } var requestEntityArray = SpawnGroup.ToEntityArray(Allocator.TempJob); // Copy requests as spawning will invalidate Group var spawnRequests = new RoleLooksSpawnRequest[requestArray.Length]; for (var i = 0; i < requestArray.Length; i++) { spawnRequests[i] = requestArray[i]; PostUpdateCommands.DestroyEntity(requestEntityArray[i]); } for (var i = 0; i < spawnRequests.Length; i++) { var request = spawnRequests[i]; // var playerState = EntityManager.GetComponentObject<RoleState>(request.ownerEntity); var looksInfo = EntityManager.GetComponentData <LooksInfo>(request.ownerEntity); int career = request.career; int body = request.body; int hair = request.hair; // Debug.Log("body : "+body+" hair:"+hair); string bodyPath = ResPath.GetRoleBodyResPath(career, body); string hairPath = ResPath.GetRoleHairResPath(career, hair); // Debug.Log("SpawnRoleLooks bodyPath : "+bodyPath); XLuaFramework.ResourceManager.GetInstance().LoadAsset <GameObject>(bodyPath, delegate(UnityEngine.Object[] objs) { if (objs != null && objs.Length > 0) { GameObject bodyObj = objs[0] as GameObject; GameObjectEntity bodyOE = m_world.Spawn <GameObjectEntity>(bodyObj); var parentTrans = EntityManager.GetComponentObject <Transform>(request.ownerEntity); parentTrans.localPosition = request.position; bodyOE.transform.SetParent(parentTrans); bodyOE.transform.localPosition = Vector3.zero; bodyOE.transform.localRotation = Quaternion.identity; ECSHelper.UpdateNameboardHeight(request.ownerEntity, bodyOE.transform); LoadHair(hairPath, bodyOE.transform.Find("head")); // Debug.Log("load ok role model"); looksInfo.CurState = LooksInfo.State.Loaded; looksInfo.LooksEntity = bodyOE.Entity; EntityManager.SetComponentData <LooksInfo>(request.ownerEntity, looksInfo); } else { Debug.LogError("cannot fine file " + bodyPath); } }); } requestEntityArray.Dispose(); requestArray.Dispose(); }
protected override void OnUpdate() { // Debug.Log("on OnUpdate role looks system"); var requestArray = SpawnGroup.GetComponentDataArray <RoleLooksSpawnRequest>(); if (requestArray.Length == 0) { return; } var requestEntityArray = SpawnGroup.GetEntityArray(); // Copy requests as spawning will invalidate Group var spawnRequests = new RoleLooksSpawnRequest[requestArray.Length]; for (var i = 0; i < requestArray.Length; i++) { spawnRequests[i] = requestArray[i]; PostUpdateCommands.DestroyEntity(requestEntityArray[i]); } for (var i = 0; i < spawnRequests.Length; i++) { var request = spawnRequests[i]; // var playerState = EntityManager.GetComponentObject<RoleState>(request.ownerEntity); var looksInfo = EntityManager.GetComponentData <LooksInfo>(request.ownerEntity); int career = request.career; int body = request.body; int hair = request.hair; Debug.Log("body : " + body + " hair:" + hair); int bodyID = 1000 + career * 100 + body; int hairID = 1000 + career * 100 + hair; // string careerPath = UnityMMO.GameConst.GetRoleCareerResPath(career); string roleResPath = "Assets/AssetBundleRes/role"; string bodyPath = roleResPath + "/body/body_" + bodyID + "/model_body_" + bodyID + ".prefab"; string hairPath = roleResPath + "/hair/hair_" + hairID + "/model_hair_" + hairID + ".prefab"; Debug.Log("SpawnRoleLooks bodyPath : " + bodyPath); XLuaFramework.ResourceManager.GetInstance().LoadAsset <GameObject>(bodyPath, delegate(UnityEngine.Object[] objs) { if (objs != null && objs.Length > 0) { GameObject bodyObj = objs[0] as GameObject; GameObjectEntity bodyOE = m_world.Spawn <GameObjectEntity>(bodyObj); var parentTrans = EntityManager.GetComponentObject <Transform>(request.ownerEntity); parentTrans.localPosition = request.position; bodyOE.transform.SetParent(parentTrans); bodyOE.transform.localPosition = Vector3.zero; bodyOE.transform.localRotation = Quaternion.identity; LoadHair(hairPath, bodyOE.transform.Find("head")); Debug.Log("load ok role model"); looksInfo.CurState = LooksInfo.State.Loaded; looksInfo.LooksEntity = bodyOE.Entity; EntityManager.SetComponentData <LooksInfo>(request.ownerEntity, looksInfo); } else { Debug.LogError("cannot fine file " + bodyPath); } }); } }
public static void Create(EntityCommandBuffer commandBuffer, int career, Vector3 position, Quaternion rotation, Entity ownerEntity, int body, int hair) { var data = new RoleLooksSpawnRequest(career, position, rotation, ownerEntity, body, hair); commandBuffer.CreateEntity(); commandBuffer.AddComponent(data); }
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() { // Debug.Log("on OnUpdate role looks system"); var requestArray = SpawnGroup.GetComponentDataArray <RoleLooksSpawnRequest>(); if (requestArray.Length == 0) { return; } var requestEntityArray = SpawnGroup.GetEntityArray(); // Copy requests as spawning will invalidate Group var spawnRequests = new RoleLooksSpawnRequest[requestArray.Length]; for (var i = 0; i < requestArray.Length; i++) { spawnRequests[i] = requestArray[i]; PostUpdateCommands.DestroyEntity(requestEntityArray[i]); } for (var i = 0; i < spawnRequests.Length; i++) { var request = spawnRequests[i]; var playerState = EntityManager.GetComponentObject <RoleState>(request.ownerEntity); int career = request.career; int body = request.body; int hair = request.hair; int bodyID = 1000 + career * 100 + body; int hairID = 1000 + career * 100 + hair; string careerPath = UnityMMO.GameConst.GetRoleCareerResPath(career); string bodyPath = careerPath + "/body/body_" + bodyID + "/model_body_" + bodyID + ".prefab"; string hairPath = careerPath + "/hair/hair_" + hairID + "/model_hair_" + hairID + ".prefab"; Debug.Log("SpawnRoleLooks bodyPath : " + bodyPath); XLuaFramework.ResourceManager.GetInstance().LoadAsset <GameObject>(bodyPath, delegate(UnityEngine.Object[] objs) { if (objs != null && objs.Length > 0) { GameObject bodyObj = objs[0] as GameObject; GameObjectEntity bodyOE = m_world.Spawn <GameObjectEntity>(bodyObj); bodyOE.transform.SetParent(UnityMMO.RoleMgr.GetInstance().RoleContainer); bodyOE.transform.localPosition = request.position; bodyOE.GetComponent <Rigidbody>().isKinematic = true; playerState.looksEntity = bodyOE.Entity; LoadHair(hairPath, bodyOE.transform.Find("head")); } else { Debug.LogError("cannot fine file " + bodyPath); } }); } }
protected override void OnUpdate() { //TODO:控制刷新或请求频率 var requestArray = RequestGroup.GetComponentDataArray <RoleLooksNetRequest>(); if (requestArray.Length == 0) { return; } var requestEntityArray = RequestGroup.GetEntityArray(); // 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; 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) { bool hasRoleState = m_world.GetEntityManager().HasComponent <RoleState>(owner); if (hasRoleState) { RoleState roleState = m_world.GetEntityManager().GetComponentObject <RoleState>(owner); Debug.Log("roleState.position : " + roleState.transform.localPosition.ToString()); //因为是异步操作,等后端发送信息过来时PostUpdateCommands已经失效了,所以不能这么用 // RoleLooksSpawnRequest.Create(PostUpdateCommands, (int)rsp.role_looks_info.career, roleState.transform.localPosition, roleState.transform.localRotation, owner, (int)rsp.role_looks_info.body, (int)rsp.role_looks_info.hair); RoleLooksSpawnRequest.Create(m_world.GetEntityManager(), (int)rsp.role_looks_info.career, roleState.transform.localPosition, roleState.transform.localRotation, owner, (int)rsp.role_looks_info.body, (int)rsp.role_looks_info.hair); } } }); } }