diff --git a/.vs/AkiraPixelWind/v16/.suo b/.vs/AkiraPixelWind/v16/.suo index 12ce0ad..198b583 100644 Binary files a/.vs/AkiraPixelWind/v16/.suo and b/.vs/AkiraPixelWind/v16/.suo differ diff --git a/Assets/GameAssets/Font/TTF/IPix.ttf b/Assets/GameAssets/Font/TTF/IPix.ttf new file mode 100644 index 0000000..5ba9d16 Binary files /dev/null and b/Assets/GameAssets/Font/TTF/IPix.ttf differ diff --git a/Assets/GameAssets/Font/TTF/STZhongsong.ttf.meta b/Assets/GameAssets/Font/TTF/IPix.ttf.meta similarity index 71% rename from Assets/GameAssets/Font/TTF/STZhongsong.ttf.meta rename to Assets/GameAssets/Font/TTF/IPix.ttf.meta index 10f4235..42bba5c 100644 --- a/Assets/GameAssets/Font/TTF/STZhongsong.ttf.meta +++ b/Assets/GameAssets/Font/TTF/IPix.ttf.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d268a2524403b7d47a51f417c95e3d5e +guid: 1016016d0d135b24a9b513a0f6a1cb03 TrueTypeFontImporter: externalObjects: {} serializedVersion: 4 @@ -9,9 +9,8 @@ TrueTypeFontImporter: characterPadding: 1 includeFontData: 1 fontNames: - - STZhongsong - fallbackFontReferences: - - {fileID: 12800000, guid: 71e3074360d836348811af020e1ac258, type: 3} + - IPix + fallbackFontReferences: [] customCharacters: fontRenderingMode: 0 ascentCalculationMode: 1 diff --git a/Assets/GameAssets/Font/TTF/STZhongsong.ttf b/Assets/GameAssets/Font/TTF/STZhongsong.ttf deleted file mode 100644 index 0f167cb..0000000 Binary files a/Assets/GameAssets/Font/TTF/STZhongsong.ttf and /dev/null differ diff --git a/Assets/Scripts/Main/CustomsComponent/UserMgrComponent.cs b/Assets/Scripts/Main/CustomsComponent/UserMgrComponent.cs new file mode 100644 index 0000000..18dff1c --- /dev/null +++ b/Assets/Scripts/Main/CustomsComponent/UserMgrComponent.cs @@ -0,0 +1,859 @@ +//using Axibug; +//using Axibug.Event; +//using Axibug.Resources; +//using Axibug.Runtime; +//using Game.Config; +//using System; +//using System.Collections; +//using System.Collections.Generic; +//using System.Linq; +//using UnityEngine; + +//namespace Game +//{ +// public class UserMgrComponent : GameComponent +// { +// private Queue temp_RemoveUser = new Queue();//需要移除的玩家列表 +// private Queue temp_RemoveRequest = new Queue();//请求数据列表 + +// //key:职业+性别 比如:ss_w +// private Dictionary> userPool = new Dictionary>(); + +// private float temp_CheckTime = 0; +// private float temp_RequestTime = 0; + +// private S_ROLE_SELF myrole { get { return UserData.role; } } + + +// private void Start() +// { +// //AppEntry.Event.Subscribe(UserMoveEventArgs.EventId, OnUserMoveEvent); +// //AppEntry.Event.Subscribe(UserPlayerSkillEventArgs.EventId, OnUserPlayerSkill); +// //AppEntry.Event.Subscribe(RoleDeadEventArgs.EventId, OnRoleDead); +// //AppEntry.Event.Subscribe(RoleReviveEventArgs.EventId, OnRoleRevive); +// //AppEntry.Event.Subscribe(RoleLevelupEventArgs.EventId, OnRoleLevelUp); +// //AppEntry.Event.Subscribe(AddRoleBufferEvent.EventId, AddBuffer); +// //AppEntry.Event.Subscribe(RemoveRoleBufferEvent.EventId, RemoveBuffer); +// } + +// public GameObject Accquire(string myKey, S_ROLE_BASE role) +// { +// if (!userPool.ContainsKey(myKey)) +// return null; + +// Queue gos = userPool[myKey]; +// if (gos.Count == 0) +// return null; + +// GameObject go = gos.Dequeue(); +// go.SetActive(true); +// //role.userview.go = go; +// role.userview.rolePrefabGo = go; +// return go; +// } + +// public void Release(S_ROLE_BASE role) +// { +// string strJob = Common.GetStrJob((byte)role.innate.job); +// string strSex = Common.GetStrSex(role.innate.sex); +// string myKey = $"{strJob}_{strSex}"; + + +// // 清理玩家信息条 +// BattleEntitysInfoCtrl.Instance.DisposeUserInfo(role.mem.userindex); + +// Queue gos = null; +// if (userPool.ContainsKey(myKey)) +// gos = userPool[myKey]; +// else +// { +// gos = new Queue(); +// userPool.Add(myKey, gos); +// } + +// if(role.userview.go != null) +// { +// /* +// gos.Enqueue(role.userview.go); +// role.userview.go.SetActive(false); +// role.userview.go = null; +// */ + +// gos.Enqueue(role.userview.rolePrefabGo); +// role.userview.go.SetActive(false); +// } + +// role.userview.Release(); +// AppEntry.Event.FireNow(null, CharReleaseEventArgs.Create(role.dataSet.GetCharIndex(), E_NODE_TYPE.N_ROLE)); + + +// } + +// public void CreateMainPlayer(S_ROLE_SELF myrole) +// { +// if (myrole == null) +// return; + +// //初始化便捷数据类 +// MainPlayerDataSet mainDataSet = new MainPlayerDataSet(); +// mainDataSet.Init(myrole); +// myrole.dataSet = mainDataSet; + +// CreateRole((byte)myrole.innate.job, myrole, true); +// } + +// public void CreateRole(byte job, S_ROLE_BASE role, bool isMainPlayer=false) +// { +// if (!isMainPlayer) +// { +// //产生时,标记角色格子占据 +// HotfixEntry.Map.SetRoleCell(role.mem.userindex, (int)role.status.pos.x, (int)role.status.pos.z, E_NODE_TYPE.N_ROLE); +// } + +// //RoleTop.transform.localRotation = Quaternion.EulerRotation(60, 0, 0); + +// string strJob = Common.GetStrJob(job); +// string strSex = Common.GetStrSex(role.innate.sex); + +// string myKey = $"{strJob}_{strSex}"; +// //@Test 测试模型用 +// string path = Utility.Path.GetPlayerPath(myKey, myKey+"_Test"); + +// //还没写完, 待测试 +// GameObject go = Accquire(myKey, role); +// if(go == null) +// { +// //ch +// GameObject RoleTop = new GameObject(); +// if (isMainPlayer) +// { +// RoleTop.transform.parent = HotfixEntry.MainPlayer.transform; +// RoleTop.transform.localPosition = Vector3.zero; +// } +// else +// RoleTop.transform.parent = HotfixEntry.UserMgr.transform; + +// HotfixEntry.Resources.Clone(path, CreateCallback, RoleTop.transform, role, myKey.ToLower()); +// return; +// } + +// role.userview.go = go; +// role.userview.ResetGameObject(go); +// } + + +// protected void CreateCallback(UnityEngine.Object obj, CallbackType err, object userData) +// { +// if (err != CallbackType.Success) +// { +// Log.Error("创建角色失败"); +// return; +// } + +// if (userData == null) +// return; + +// S_ROLE_BASE role = (S_ROLE_BASE)userData; +// if (role as S_ROLE_SELF != null) +// HotfixEntry.MainPlayer.myView.InitGameObject(obj as GameObject); +// else +// { +// role.userview.InitGameObject(obj as GameObject); +// } +// } + +// /// +// /// 主角色换装 +// /// +// /// +// /// +// /// 二级职业,如DZ_M_DD刀盾模型中,末尾的"DD" +// public void MainPlayerChangeEquipment(byte job,string SubJob) +// { +// MyView myview = HotfixEntry.MainPlayer.myView; +// ChangeEquipment(myview, myview.myrole,job,SubJob); +// } + +// protected void ChangeEquipmentCallback(UnityEngine.Object obj, CallbackType err, object userData) +// { +// if (err != CallbackType.Success) +// { +// Log.Error("创建角色失败"); +// return; +// } +// if (userData == null) +// return; + +// S_ROLE_BASE role = (S_ROLE_BASE)userData; + +// GameObject Oldobj = role.characterview.rolePrefabGo.gameObject; +// GameObject Newobj = (obj as GameObject); +// role.characterview.rolePrefabGo = Newobj; + +// //重置Movement,而不是创建 +// if (role as S_ROLE_SELF != null) +// { +// HotfixEntry.MainPlayer.myView.InitMovement(obj as GameObject); +// } +// else +// role.userview.InitMovement(obj as GameObject); + +// Newobj.transform.localPosition = Oldobj.transform.localPosition; +// Newobj.transform.localRotation = Oldobj.transform.localRotation; + +// //完全替换后再销毁原角色,保证时序靠后 +// Destroy(Oldobj); +// } + +// //角色移动 +// private void OnUserMoveEvent(object sender, LogicEventArgs e) +// { +// UserMoveEventArgs move = (UserMoveEventArgs)e; +// if (move == null) +// throw new GameException("UserMoveEventArgs is null"); + +// var role = UserData.findRoleData(move.userIndex); +// if(role == null) +// throw new GameException("the role is null"); + +// role.userview.StartMove(move.speed, role.status.face); + +// //更新下玩家的大格子 +// HotfixEntry.Map.UpdateUserBC(role); +// } + +// //角色播放技能 +// private void OnUserPlayerSkill(object sender, LogicEventArgs e) +// { +// UserPlayerSkillEventArgs skill = (UserPlayerSkillEventArgs)e; +// if (skill == null) +// throw new GameException("UserPlayerSkillEventArgs is null"); + +// int clientId = ConstClass.GetClientSkillID(skill.skillid, skill.skilllevel); +// SkillData script = HotfixEntry.Luban.GetSkill(clientId); +// if (script == null) +// throw new GameException($"the skillid:[{clientId}] is null"); + +// Transform source = null; +// Transform target = null; +// Vector3 targetPos = Vector3.zero; + + +// CellNode cell = null; + +// switch (skill.lock_type) +// { +// case (byte)Lock_Type.LOCK_PLAYER: +// { +// var role = UserData.findRoleData(skill.lockIndex); +// if (role == null || role.userview == null) +// throw new GameException($"the lockIndex:{skill.lockIndex} is null"); + +// cell = role.userview.CurCell; +// target = role.userview.rolePrefabGo.transform; +// targetPos = role.userview.rolePrefabGo.transform.position; +// } +// break; +// case (byte)Lock_Type.LOCK_MONSTER: +// { +// var robot = RobotData.findRobotData(skill.lockIndex); +// if (robot == null || robot.data == null) +// throw new GameException($"the lockIndex:{skill.lockIndex} is null"); + +// cell = robot.view.CurCell; +// target = robot.view.rolePrefabGo.transform; +// targetPos = robot.view.rolePrefabGo.transform.position; +// } +// break; +// } + +// if (cell == null) +// return; + +// //修改特效发送source和taget的位置 +// if (skill.userIndex == myrole.mem.userindex) +// { +// HotfixEntry.MainPlayer.myView.Attack(cell, script.Motion); +// myrole.move.state = 1; +// source = HotfixEntry.MainPlayer.myView.rolePrefabGo.transform; +// } +// else +// { +// S_ROLE_BASE role = UserData.findRoleData(skill.userIndex); +// if (role == null) +// throw new GameException("the role is null"); + +// role.userview.Attack(role.userview.CurCell, script.Motion, false); +// source = role.userview.rolePrefabGo.transform; +// } + + +// //播放技能特效 +// string path = string.Empty; +// //如果有技能动作,则播放 +// if (!string.IsNullOrEmpty(script.BindEffect) && script.BindEffect != "0") +// { +// path = Utility.Path.GetPrefabPath("Effects", script.BindEffect); +// HotfixEntry.EffectMgr.PlayAttackEffect(path, source); +// } + +// if (!string.IsNullOrEmpty(script.WorldEffect) && script.WorldEffect != "0") +// { +// path = Utility.Path.GetPrefabPath("Effects", script.WorldEffect); +// HotfixEntry.EffectMgr.PlayWorldEffect(path, targetPos); +// } + +// if (!string.IsNullOrEmpty(script.BallisticEffect) && script.BallisticEffect != "0") +// { +// path = Utility.Path.GetPrefabPath("Effects", script.BallisticEffect); +// StartCoroutine(DelayPlayerEffect(script.EffectDelayTime, path, source, target)); + +// } + +// Log.Debug($"播放技能:ID={clientId}, 动作={script.Motion}, 绑定特效={script.BindEffect}, 世界特效={script.WorldEffect}, 弹道特效={script.BallisticEffect}, 被击特效={script.HitEffect}"); +// } + +// IEnumerator DelayPlayerEffect(int delay, string path, Transform source, Transform target) +// { +// yield return new WaitForSeconds(delay / 1000.0f); + +// HotfixEntry.EffectMgr.PlayBallisticEffect(path, source, target); +// } + +// //角色死亡 +// public void OnRoleDead(object sender, LogicEventArgs e) +// { +// RoleDeadEventArgs dead = (RoleDeadEventArgs)e; +// if (dead == null) +// throw new GameException("RoleDeadEventArgs is null"); + +// S_ROLE_BASE role = null; + +// if (dead.roleIndex == myrole.mem.userindex) +// { +// role = myrole; + +// //HotfixEntry.MainPlayer.myView.SetAnimation("Dead", true); +// myrole.myView.movement.characterAnimator.PlayDead(); + +// HotfixEntry.UI.OpenUI(); +// } +// else +// { +// role = UserData.findRoleData(dead.roleIndex); + +// if (role == null) +// throw new GameException("the role is null"); + +// //role.userview.SetAnimation("Dead", true); +// role.userview.movement.characterAnimator.PlayDead(); +// HotfixEntry.Map.ClearRoleCellData(dead.roleIndex, E_NODE_TYPE.N_ROLE); +// } + +// switch ((Lock_Type)role.tmp.lockData.lock_type) +// { +// case Lock_Type.LOCK_PLAYER://玩家 +// { +// var lockRole = UserData.findRoleData(role.tmp.lockData.lock_index); +// if (lockRole == null || lockRole.userview == null || lockRole.userview.go == null) +// return; + +// lockRole.userview.SetSublightOff(); +// } +// break; +// case Lock_Type.LOCK_MONSTER://怪物 +// { +// var lockRobot = RobotData.findRobotData(role.tmp.lockData.lock_index); +// if (lockRobot == null || lockRobot.view == null || lockRobot.view.go == null) +// return; + +// lockRobot.view.SetSublightOff(); +// } +// break; +// } + +// role.tmp.lockData.lock_state = 0; +// role.tmp.lockData.lock_index = -1; + +// } + +// //角色复活 +// public void OnRoleRevive(object sender, LogicEventArgs e) +// { +// RoleReviveEventArgs revive = (RoleReviveEventArgs)e; +// if (revive == null) +// throw new GameException("RoleReviveEventArgs is null"); + +// //传送 +// if (revive.userIndex == myrole.mem.userindex) +// { +// myrole.myView.movement.characterAnimator.DeadToIdle(); + +// AppEntry.Event.Fire(null, BattleRoleMovingEventArgs.Create(myrole.myDataSet.GetCharIndex(),E_NODE_TYPE.N_MAINPLAYER)); + +// HotfixEntry.MainPlayer.myView.TeleportingToPos(revive.pos); +// myrole.status.state = (int)CharacterState.Living; +// return; +// } + +// S_ROLE_BASE role = UserData.findRoleData(revive.userIndex); + +// if (role == null) +// throw new GameException("the role is null"); + +// role.userview.movement.characterAnimator.DeadToIdle(); +// role.userview.TeleportingToPos(revive.pos); +// role.status.state = (int)CharacterState.Living; +// } + +// //角色升级 +// public void OnRoleLevelUp(object sender, LogicEventArgs e) +// { +// RoleLevelupEventArgs msg = (RoleLevelupEventArgs)e; +// if (msg == null) +// throw new GameException("RoleLevelupEventArgs is null"); + +// S_ROLE_BASE role = null; +// if (msg.roleIndex == myrole.mem.userindex) +// { +// //如果升级的是自己 +// role = myrole; +// } +// else +// { +// role = UserData.findRoleData(msg.roleIndex); + +// if (role == null) +// throw new GameException("the role is null"); +// } + +// role.exp.level = msg.currentLevel; +// Log.Warning($"角色提升到{role.exp.level}级"); +// } + +// //角色播放buff +// public void AddBuffer(object sender, LogicEventArgs e) +// { +// //播放特效 +// AddRoleBufferEvent msg = (AddRoleBufferEvent)e; +// if (msg == null) +// throw new GameException("AddRoleBufferEvent is null"); + +// if (msg.roleIndex != myrole.mem.userindex) +// return; + +// AppEntry.Event.Fire(this, AddBufferIconEvent.Create(msg.buffId)); +// } + +// //角色删除buff +// public void RemoveBuffer(object sender, LogicEventArgs e) +// { +// //删除特效 +// RemoveRoleBufferEvent msg = (RemoveRoleBufferEvent)e; +// if (msg == null) +// throw new GameException("AddRoleBufferEvent is null"); + +// if (msg.roleIndex != myrole.mem.userindex) +// return; + +// AppEntry.Event.Fire(this, RemoveBufferIconEvent.Create(msg.buffId)); +// } + +// // Update is called once per frame +// void Update() +// { +// #region +// if (Input.GetKeyDown(KeyCode.O)) +// { +// CaoCaoLog.Debug("测试换装到,DD"); +// MainPlayerChangeEquipment((byte)eJob.Warrior, "DD"); +// } +// if (Input.GetKeyDown(KeyCode.P)) +// { +// CaoCaoLog.Debug("测试换装到,KD"); +// MainPlayerChangeEquipment((byte)eJob.Warrior, "KD"); +// } +// if (Input.GetKeyDown(KeyCode.U)) +// { +// CaoCaoLog.Debug("测试升级"); +// UIMgr.Instance.OpenUI(); +// } +// if (Input.GetKeyDown(KeyCode.Y)) +// { +// HotfixEntry.UI.OpenUI(); +// } +// if (Input.GetKeyDown(KeyCode.T)) +// { +// HotfixEntry.UI.OpenUI(); +// } +// //if (Input.GetKeyDown(KeyCode.M)) +// //{ +// // if (!HotfixEntry.UI.IsOpen()) +// // HotfixEntry.UI.OpenUI(); +// //} +// #endregion + +// if (HotfixEntry.MainPlayer.myView == null) +// return; + +// if (!UserData.role.isEntryWorld) +// return; + + +// //1、同步自己的移动 三大策略发送移动数据 +// SyncMove(); +// UserBuffManager.renderBuff(); + +// UpdateUserCell(); + +// //2、更新其他玩家显示 200毫秒检查一次 +// float ftime = Time.time - temp_CheckTime; +// if (ftime > 0.2f) +// { +// temp_CheckTime = Time.time; +// UpdateUserRect(); +// return; +// } + +// //3、更新其他玩家信息 +// foreach (var r in UserData.onlines) +// { +// var role = r.Value; +// if (role.userview == null) +// continue; + +// if (role.userview.go == null) +// continue; + +// if (role.status.state == (int)CharacterState.Dead) +// continue; + +// role.userview.Update(); +// } + +// //4、排队申请其他玩家和怪物数据 节约服务器性能 把峰值平摊在逐帧 +// float ftime2 = Time.time - temp_RequestTime; +// if (ftime2 > 0.05f) +// { +// temp_RequestTime = Time.time; +// UpdateRequestRoleData(); +// UpdateRequestRobotData(); +// } +// } + + +// private void UpdateUserCell() +// { +// int[] keys = UserData.onlines.Keys.ToArray(); + +// for (int i = 0; i < keys.Length; i++) +// { +// S_ROLE_BASE user = UserData.onlines[keys[i]]; +// if (user.mem.userindex != HotfixEntry.MainPlayer.myDataSet.GetCharIndex() && user.status.state < (byte)CharacterState.Dead && user.life.curHP > 0) +// { +// //产生时,标记角色格子占据 +// HotfixEntry.Map.SetRoleCell(keys[i], user.userview.go.transform.position, E_NODE_TYPE.N_ROLE); +// } +// } +// } + +// //更新请求玩家数据列表或者怪物数据列表 +// private void UpdateRequestRoleData() +// { +// if (UserData.requestRoleDatas.Count == 0) +// return; + +// Int32 count = 0; +// foreach (var r in UserData.requestRoleDatas) +// { +// int index = r.Value; +// temp_RemoveRequest.Enqueue(index); +// ++count; +// if (count >= UserData.MAX_REQUEST_ROLE_COUNT) +// break; +// } + +// //清理玩家 +// while (temp_RemoveRequest.Count > 0) +// { +// Int32 userindex = temp_RemoveRequest.Dequeue(); +// //移除其他玩家 +// UserData.removeRequestRoledata(userindex); +// //发送请求其他玩家详细数据 +// AppEntryWorld.send_700(userindex); +// //var entryWorld = HotfixEntry.Resources.m_Assembly.GetType("Game.HotFix.AppEntryWorld"); +// //var start = entryWorld.GetMethod("send_700"); +// //start?.Invoke(null, new object[] { userindex }); + + +// //AppEntryWorld.send_700(userindex); +// } + +// temp_RemoveRequest.Clear(); +// } + +// //更新请求玩家数据列表或者怪物数据列表 +// private void UpdateRequestRobotData() +// { +// if (UserData.requestRobotDatas.Count == 0) +// return; + +// Int32 count = 0; +// foreach (var r in UserData.requestRobotDatas) +// { +// int index = r.Value; +// temp_RemoveRequest.Enqueue(index); +// ++count; +// if (count >= UserData.MAX_REQUEST_ROBOT_COUNT) +// break; +// } +// //清理玩家 +// while (temp_RemoveRequest.Count > 0) +// { +// Int32 robotindex = temp_RemoveRequest.Dequeue(); +// //移除其他玩家 +// UserData.removeRequestRobotdata(robotindex); + +// //var app = HotfixEntry.Resources.m_Assembly.GetType("Game.HotFix.AppRobot"); +// //var method = app.GetMethod("send_8000"); +// //method?.Invoke(null, new object[] { robotindex }); + +// //发送请求怪物详细数据 +// AppRobot.send_8000(robotindex); +// } + +// temp_RemoveRequest.Clear(); +// } + +// //玩家离开世界 +// public void LeaveWorld(S_ROLE_BASE role) +// { +// if (role == null) +// return; + +// //释放角色,清楚角色格子占据数据 +// HotfixEntry.Map.ClearRoleCellData(role.mem.userindex, E_NODE_TYPE.N_ROLE); + +// //0、清理锁定 +// ClearLock(role, null); + +// //1、释放显示资源 +// if (role.userview != null) +// { +// //role.userview.Release(); +// Release(role); +// UserData.pushUserView(role.userview); +// role.userview = null; + +// //清除便捷数据类 +// UserData.pushRoleDataSet(role.dataSet); +// role.dataSet = null; +// } + +// //2、释放数据 +// UserData.removeRoleData(role.mem.userindex);//从玩家数据中移除 +// UserData.pushRoleData(role);//放回对象回收池 重复利用 + +// } + +// public void ClearLock(S_ROLE_BASE role, S_ROBOT_BASE robot) +// { +// bool islock = false; +// if (role == null && robot == null) +// { +// islock = true; +// } +// else +// { +// switch ((Lock_Type)UserData.role.tmp.lockData.lock_type) +// { +// case Lock_Type.LOCK_PLAYER: +// if (role != null) +// if (role.mem.userindex == UserData.role.tmp.lockData.lock_index) +// islock = true; +// break; +// case Lock_Type.LOCK_MONSTER: +// if (robot != null) +// if (robot.data.robotindex == UserData.role.tmp.lockData.lock_index) +// islock = true; +// break; +// } +// } + +// if (!islock) +// return; + +// if (UserData.role.tmp.lockData.lock_type > 0) +// { +// //FGUIManager.GetFUI(FGUIType.BattlePanel).GetComponent().HideSelectObjInfo(); +// //GameObject.Destroy(MyUserData.lockeffect); +// } + +// UserData.role.tmp.lockData.Init(); +// } + +// //同步移动 状态同步 +// //三种策略 1、状态发送变化 2、方向发生了变化 3、距离发生了变化 +// public void SyncMove() +// { +// float face = HotfixEntry.MainPlayer.myView.movement.CurRotate; + +// //1、状态发生变化 +// if (myrole.move.state != myrole.move.oldstate) +// { +// myrole.move.oldstate = myrole.move.state; +// SendMove(); +// return; +// } + +// if (myrole.move.state == 0) +// return; + +// //2、验证距离 +// float ftime = Time.time - myrole.move.syncTime; +// if (ftime > 0.2f) +// { +// //距离格子中心点0.2才算 +// Vector3 centerPos = HotfixEntry.Map.GetPosByCell(HotfixEntry.MainPlayer.myView.movement.CurCell.X, HotfixEntry.MainPlayer.myView.movement.CurCell.Y); +// float centerDis = Vector3.Distance(HotfixEntry.MainPlayer.myView.Pos, centerPos); +// if (centerDis >= 0.2f) +// return; + + +// Vector3 tPos = new Vector3(HotfixEntry.MainPlayer.myView.movement.CurCell.X, 0, HotfixEntry.MainPlayer.myView.movement.CurCell.Y); +// float distance = Vector3.Distance(myrole.move.pos, tPos); +// if (distance >= 0.8f) +// { +// SendMove(); +// return; +// } +// } +// else if (ftime > 0.1f) +// { +// //3、角度发生了变化 +// float angle = Math.Abs(myrole.move.face - face); +// if (angle >= 5) +// { +// SendMove(); +// return; +// } +// } +// } + +// public void SendMove() +// { +// float face = HotfixEntry.MainPlayer.myView.movement.CurRotate; + +// myrole.move.syncTime = Time.time; +// myrole.move.face = face; + +// //发送数据 +// if (myrole.move.state == 0) +// AppMove.send_1000(face, 0, myrole.status.pos, myrole.status.pos); +// else +// { +// myrole.move.pos = new Vector3(HotfixEntry.MainPlayer.myView.movement.CurCell.X, 0, HotfixEntry.MainPlayer.myView.movement.CurCell.Y); +// //Log.Debug($"发送路径:起始点:[{myrole.status.pos}], 结束点:[{myrole.move.pos}]"); +// AppMove.send_1000(face, HotfixEntry.MainPlayer.myView.movement.speed, myrole.status.pos, myrole.move.pos); +// myrole.status.pos = new Vector3(HotfixEntry.MainPlayer.myView.movement.CurCell.X, 0, HotfixEntry.MainPlayer.myView.movement.CurCell.Y); + +// } + +// HotfixEntry.Map.UpdateUserBC(myrole); + +// } + + +// //更新删除玩家显示 +// //玩家三大策略 1、收到服务器玩家离开信息删除ok 2、不在主控玩家九宫格范围删除 3、心跳包时间超时删除 +// private void UpdateUserRect() +// { +// foreach (var r in UserData.onlines) +// { +// var role = r.Value; +// if (role.userview == null) +// continue; + +// if (role.userview.go == null) +// continue; + +// role.userview.Update(); + +// //1、验证大格子是不是在主控玩家九宫格区域内 +// if (!myrole.bc.edge.IsRect(role.bc.grid_big.row, role.bc.grid_big.col)) +// { +// //需要删除 +// temp_RemoveUser.Enqueue(role); + +// Debug.Log("玩家不在九宫格范围..." + role.mem.userId); +// continue; +// } +// //2、心跳时间验证 超过60秒 认为这个玩家是个死链接 删除 +// float ftime = Time.time - role.tmp.heartTime; +// if (ftime > 60) +// { +// //需要删除 +// temp_RemoveUser.Enqueue(role); +// Debug.Log("玩家hearttime...删除" + role.mem.userId); +// continue; +// } +// } + +// //清理玩家 +// while (temp_RemoveUser.Count > 0) +// { +// var role = temp_RemoveUser.Dequeue(); +// //移除其他玩家 +// if (UserData.onlines.ContainsKey(role.mem.userindex)) +// { +// UserData.onlines.Remove(role.mem.userindex); +// } +// //玩家离开世界 +// LeaveWorld(role); +// } +// temp_RemoveUser.Clear(); +// } + +// public List GetRoleListInRadius(int cellNum, int curRobotIndex = -1) +// { +// CellNode cur = HotfixEntry.MainPlayer.myView.CurCell; +// List roles = new List(); + +// foreach (var r in UserData.onlines) +// { +// var role = r.Value; +// if (role.userview == null) +// continue; + +// var roleCell = role.userview.CurCell; + +// float count = Vector2Int.Distance(new Vector2Int(cur.X, cur.Y), new Vector2Int(roleCell.X, roleCell.Y)); +// //超过距离,过滤 +// if (count > cellNum) +// continue; + + +// //当前已选中怪,过滤, 并且取消选中状态 +// if (role.mem.userindex == curRobotIndex) +// continue; + +// roles.Add(role); +// } + +// return roles; +// } + +// public void SetAllSublightOff() +// { +// foreach (var r in UserData.onlines) +// { +// var role = r.Value; +// if (role.userview == null) +// continue; + +// role.userview.SetSublightOff(); +// } +// } +// } +//} + diff --git a/Assets/Scripts/Main/CustomsComponent/UserMgrComponent.cs.meta b/Assets/Scripts/Main/CustomsComponent/UserMgrComponent.cs.meta new file mode 100644 index 0000000..b2392f9 --- /dev/null +++ b/Assets/Scripts/Main/CustomsComponent/UserMgrComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43144cb712dca51408ee7f9be700a154 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Main/Definition/DataStruct/Role/RoleData.cs b/Assets/Scripts/Main/Definition/DataStruct/Role/RoleData.cs index 87a2a33..cef1c1e 100644 --- a/Assets/Scripts/Main/Definition/DataStruct/Role/RoleData.cs +++ b/Assets/Scripts/Main/Definition/DataStruct/Role/RoleData.cs @@ -3,6 +3,29 @@ using UnityEngine; namespace Game { + + //主控玩家角色数据 + public class S_ROLE_SELF : S_ROLE_DATA_BASE + { + public S_ROLE_ECON econ;//经济 + + public S_ROLE_MOVE move; + public S_ROLE_SELF(int RoleID) + { + RoleType = E_NODE_TYPE.N_MAINPLAYER; + move = new S_ROLE_MOVE(); + econ = new S_ROLE_ECON(); + } + + override public void Init() + { + base.Init(); + exp.Init(); + move.Init(); + econ.Init(); + } + } + //角色经验 public class S_ROLE_EXP { @@ -20,13 +43,9 @@ namespace Game public class S_ROLE_ECON { public long gold;//金币 - public long vcoin;//元宝 - public long silverCoin;//银币 public void Init() { gold = 0; - vcoin = 0; - silverCoin = 0; } } @@ -173,25 +192,4 @@ namespace Game pos.x = 0; pos.y = 0; pos.z = 0; } } - - //主控玩家角色数据 - public class S_ROLE_SELF : S_ROLE_BASE - { - public S_ROLE_ECON econ;//经济 - - public S_ROLE_MOVE move; - public S_ROLE_SELF() - { - move = new S_ROLE_MOVE(); - econ = new S_ROLE_ECON(); - } - override public void Init() - { - base.Init(); - exp.Init(); - move.Init(); - econ.Init(); - } - } -} - +} \ No newline at end of file diff --git a/Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_BASE.cs b/Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_DATA_BASE.cs similarity index 60% rename from Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_BASE.cs rename to Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_DATA_BASE.cs index df3f11e..a83a3b6 100644 --- a/Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_BASE.cs +++ b/Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_DATA_BASE.cs @@ -1,27 +1,29 @@ namespace Game { //玩家角色数据 - public class S_ROLE_BASE + public class S_ROLE_DATA_BASE { + public E_NODE_TYPE RoleType; + //玩家数据 public S_ROLE_INNATE innate;//先天属性 public S_ROLE_STATUS status;//状态 public S_ROLE_LIFE life;//生命 public S_ROLE_EXP exp;//经验 - public S_ROLE_BATTLEATTR_1ST battleattr1st;//1级战斗属性 - public S_ROLE_BATTLEATTR battleattr; + //public S_ROLE_BATTLEATTR_1ST battleattr1st;//1级战斗属性 + //public S_ROLE_BATTLEATTR battleattr; public bool isEntryWorld; - public S_ROLE_BASE() + public S_ROLE_DATA_BASE() { innate = new S_ROLE_INNATE(); status = new S_ROLE_STATUS(); life = new S_ROLE_LIFE(); exp = new S_ROLE_EXP(); - battleattr1st = new S_ROLE_BATTLEATTR_1ST(); - battleattr = new S_ROLE_BATTLEATTR(); + //battleattr1st = new S_ROLE_BATTLEATTR_1ST(); + //battleattr = new S_ROLE_BATTLEATTR(); isEntryWorld = false; } @@ -30,10 +32,8 @@ namespace Game { status.Init(); life.Init(); - exp.Init(); - - battleattr1st.Init(); + //exp.Init(); + //battleattr1st.Init(); } } -} - +} \ No newline at end of file diff --git a/Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_BASE.cs.meta b/Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_DATA_BASE.cs.meta similarity index 100% rename from Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_BASE.cs.meta rename to Assets/Scripts/Main/Definition/DataStruct/Role/S_ROLE_DATA_BASE.cs.meta diff --git a/Assets/Scripts/Main/Role.meta b/Assets/Scripts/Main/Role.meta new file mode 100644 index 0000000..e95c124 --- /dev/null +++ b/Assets/Scripts/Main/Role.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 863450b96fdef644d89f32a174fcf8b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Main/Role/CharacterMachine.meta b/Assets/Scripts/Main/Role/CharacterMachine.meta new file mode 100644 index 0000000..49d07f5 --- /dev/null +++ b/Assets/Scripts/Main/Role/CharacterMachine.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92dd00f3d5b6be043b7e9496acfaeddb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Main/Role/CharacterMachine/CharacterMachine.cs b/Assets/Scripts/Main/Role/CharacterMachine/CharacterMachine.cs new file mode 100644 index 0000000..520df1a --- /dev/null +++ b/Assets/Scripts/Main/Role/CharacterMachine/CharacterMachine.cs @@ -0,0 +1,80 @@ +using Game; +using Game.HotFix; +using System.Collections.Generic; +using UnityEngine; + + +namespace Game +{ + public class CharacterMachine : ICharMachineBase //是否使用其他基类或是否使用MonoBehaviour 靠外部驱动,按需修改 + { + + private Animator _animator; + + public bool IsAttacking() + { + AnimatorStateInfo stateInfo = _animator.GetCurrentAnimatorStateInfo(0); + + if (stateInfo.IsName("Idle01")) + return false; + + if (stateInfo.IsName("Run")) + return false; + + if (stateInfo.IsName("Hit")) + return false; + + return true; + } + + #region 虚函数实现 + public void InitMachine(Transform trans) + { + _animator = trans.GetComponent(); + } + + public void ReleazeMachine() + { + _animator = null; + } + public void Update_Logic() + { } + + public void StartRun() + { + _animator.SetInteger("Speed", 1); + } + + public void BackToIdle() + { + _animator.SetInteger("Speed", 0); + } + public void DeadToIdle() + { + _animator.SetBool("Dead", false); + } + + + public void SetAttack(string anim) + { + _animator.SetBool(anim, true); + } + + public void SetOtherAnime(string anim) + { + _animator.Play(anim); + } + + public void PlayDead() + { + _animator.SetBool("Dead", true); + } + + public void StartHit() + { + _animator.SetBool("Hit", true); + } + + #endregion + } +} diff --git a/Assets/Scripts/Main/Role/CharacterMachine/CharacterMachine.cs.meta b/Assets/Scripts/Main/Role/CharacterMachine/CharacterMachine.cs.meta new file mode 100644 index 0000000..b6515a7 --- /dev/null +++ b/Assets/Scripts/Main/Role/CharacterMachine/CharacterMachine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42d4639d3c8bb9543868f68d9315a75a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Main/Role/CharacterMachine/ICharMachineBase.cs b/Assets/Scripts/Main/Role/CharacterMachine/ICharMachineBase.cs new file mode 100644 index 0000000..63eb1f6 --- /dev/null +++ b/Assets/Scripts/Main/Role/CharacterMachine/ICharMachineBase.cs @@ -0,0 +1,24 @@ +using Axibug; +using System.Collections.Generic; +using UnityEngine; + +namespace Game +{ + public interface ICharMachineBase + { + /// + /// 传入有动画机的层级 + /// + /// + public abstract void InitMachine(Transform trans); + public abstract void ReleazeMachine(); + public abstract void Update_Logic(); + public abstract void SetAttack(string anim); + public abstract void SetOtherAnime(string anim); + public abstract void PlayDead(); + public abstract void StartHit(); + public abstract void StartRun(); + public abstract void BackToIdle(); + public abstract void DeadToIdle(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Main/Role/CharacterMachine/ICharMachineBase.cs.meta b/Assets/Scripts/Main/Role/CharacterMachine/ICharMachineBase.cs.meta new file mode 100644 index 0000000..0f24049 --- /dev/null +++ b/Assets/Scripts/Main/Role/CharacterMachine/ICharMachineBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 899a62e98309e3b4cb500fa3faa9e2a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Main/Role/MainRole.cs b/Assets/Scripts/Main/Role/MainRole.cs new file mode 100644 index 0000000..68cf61e --- /dev/null +++ b/Assets/Scripts/Main/Role/MainRole.cs @@ -0,0 +1,24 @@ +using Axibug; +using Axibug.Runtime; +using System.Collections.Generic; +using UnityEngine; + +namespace Game +{ + public abstract class MainRole : RoleBase + { + /// + /// 初始化 + /// + /// + public void Init(S_ROLE_SELF data) + { + base.Init(data); + } + + public override void Release() + { + + } + } +} diff --git a/Assets/Scripts/Main/Role/MainRole.cs.meta b/Assets/Scripts/Main/Role/MainRole.cs.meta new file mode 100644 index 0000000..9e2fa7c --- /dev/null +++ b/Assets/Scripts/Main/Role/MainRole.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89233ed8a4aa86247be5d5a1de5e66f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Main/Role/RoleBase.cs b/Assets/Scripts/Main/Role/RoleBase.cs new file mode 100644 index 0000000..7433b82 --- /dev/null +++ b/Assets/Scripts/Main/Role/RoleBase.cs @@ -0,0 +1,45 @@ +using Axibug; +using Axibug.Runtime; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Game +{ + public abstract class RoleBase : MonoBehaviour + { + protected E_NODE_TYPE mRoleType => mData.RoleType; + protected Int64 mRoleID => mData.innate.roleid; + + /// + /// 动画控制器 + /// + protected ICharMachineBase Anime; + + protected S_ROLE_DATA_BASE mData; + + /// + /// 初始化 + /// + /// + public virtual void Init(S_ROLE_DATA_BASE data) + { + mData = data; + if (mRoleType == E_NODE_TYPE.N_MAINPLAYER) + { + Anime = new CharacterMachine(); + Anime.InitMachine(transform.Find("Model")); + } + else if (mRoleType == E_NODE_TYPE.N_MONSTER) + { + + } + else if (mRoleType == E_NODE_TYPE.N_NPC) + { + + } + } + + public abstract void Release(); + } +} diff --git a/Assets/Scripts/Main/Role/RoleBase.cs.meta b/Assets/Scripts/Main/Role/RoleBase.cs.meta new file mode 100644 index 0000000..0be4b7b --- /dev/null +++ b/Assets/Scripts/Main/Role/RoleBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16d753beef6b04247956d321f0cc9a9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Game.csproj b/Game.csproj index b1f746a..c64714b 100644 --- a/Game.csproj +++ b/Game.csproj @@ -115,7 +115,7 @@ - + @@ -124,6 +124,11 @@ + + + + +