public RoleAttack(RoleFSMMgr fsm) { m_CurrRoleFSMMgr = fsm; m_CurrRoleCtrl = m_CurrRoleFSMMgr.CurrRoleCtrl; m_EnemyList = new List <RoleCtrl>(); m_SearchList = new List <Collider>(); }
void Update() { if (m_CurrCount < m_MaxCount) { if (Time.time > m_PrevCreatTime + UnityEngine.Random.Range(1.5f, 3.5f)) { m_PrevCreatTime = Time.time; //创建怪 GameObject objClone = RoleMgr.Instance.LoadRole(monsterName, RoleType.Monster); objClone.transform.parent = transform; objClone.transform.position = transform.TransformPoint(new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f))); RoleCtrl roleCtrl = objClone.GetComponent <RoleCtrl>(); roleCtrl.BornPoint = objClone.transform.position; RoleInfoMonster roleInfo = new RoleInfoMonster(); roleInfo.RoelServerID = DateTime.Now.Ticks; roleInfo.RoleID = 1; roleInfo.CurrHP = roleInfo.MaxHP = 1000; roleInfo.NickName = "偷书盗贼"; roleCtrl.Init(RoleType.Monster, roleInfo, new RoleMonsterAI(roleCtrl)); roleCtrl.OnRoleDie = RoleDie; m_CurrCount++; } } }
/// <summary> /// 手指点击地面 /// </summary> private void OnPlayerClick() { if (EventSystem.current.IsPointerOverGameObject()) { return; } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitinfo; RaycastHit[] hitArr = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Role")); if (hitArr.Length > 0) { for (int i = 0; i < hitArr.Length; i++) { RoleCtrl ctrl = hitArr[i].collider.GetComponent <RoleCtrl>(); if (ctrl.CurRoleType == RoleType.MainPlayer) { continue; } Global.Instance.CurPlayer.LockEnemy = ctrl; return; } } if (Physics.Raycast(ray, out hitinfo, Mathf.Infinity, 1 << LayerMask.NameToLayer("Ground"))) { RaycastHit hitinfo1; Ray ray1 = new Ray(new Vector3(hitinfo.point.x, hitinfo.point.y + 1000, hitinfo.point.z), -Vector3.up); if (Physics.Raycast(ray1, out hitinfo1, 1000, 1 << LayerMask.NameToLayer("RegionMask"))) { return; } Global.Instance.CurPlayer.LockEnemy = null; Global.Instance.CurPlayer.MoveTo(hitinfo.point); } }
/// <summary> /// 刷怪 /// </summary> void Update() { if (m_CurrCount < m_MaxCount) { if (Time.time > m_CreateTime) { m_CreateTime = Time.time + UnityEngine.Random.Range(1.5f, 3.5f); GameObject moster = RoleMgr.Instance.LoadRole(RoleType.Monster, m_MonsterName); moster.transform.parent = transform; //在指定区域随机刷处怪物 moster.transform.position = transform.transform.TransformPoint(new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f))); m_CurrCount++; RoleInfoMonster roleInfo = new RoleInfoMonster(); roleInfo.NickName = "骑兵"; roleInfo.RoleServerId = DateTime.Now.Ticks; roleInfo.MaxHp = roleInfo.CurrHp = 1000; roleInfo.RoleId = 1; RoleCtrl ctrl = moster.GetComponent <RoleCtrl>(); ctrl.BornPos = transform; ctrl.OnDie = OnMonsterDie; RoleMonsterAI ai = new RoleMonsterAI(ctrl); ctrl.Init(RoleType.Monster, roleInfo, ai); } } }
private IEnumerator OnRoleDeadIE(RoleCtrl role) { EazySoundManager.StopAllMusic(0.3f); GameStatus = GameStatus.Over; if (GlobalInit.Instance.CurRoleCtrl.CurPlatform == null || GlobalInit.Instance.CurRoleCtrl.CurPlatform.PlatfromType == PlatfromType.Hide) { yield return(new WaitForSeconds(0.5f)); } else { if (GlobalInit.Instance.CurRoleCtrl.CurPlatform.PlatfromType == PlatfromType.HideTrap || GlobalInit.Instance.CurRoleCtrl.CurPlatform.PlatfromType == PlatfromType.OtherTrap) { //撞到障碍物,爆炸 CameraCtrl.Instance.Shake(); Destroy(GlobalInit.Instance.CurRoleCtrl.gameObject); yield return(new WaitForSeconds(1)); } } int maxScore = PlayerPrefs.GetInt("MaxScore"); if (Step > maxScore) { PlayerPrefs.SetInt("MaxScore", Step); } UIViewMgr.Instance.OpenView(UIViewType.GameLevelFail); }
/// <summary> /// 克隆新建角色 /// </summary> private void CloneCreateRole() { for (int i = 0; i < m_jobEntityList.Count; i++) { GameObject @object = Instantiate <GameObject>(GlobalInit.Instance.m_JobObjectDic[m_jobEntityList[i].Id]); if (m_CloneRolePrefabList.Contains(@object)) { continue; } m_CloneRolePrefabList.Add(@object); @object.transform.SetParent(m_roleContainer[i]); @object.transform.localScale = Vector3.one; @object.transform.localPosition = Vector3.zero; @object.transform.localRotation = Quaternion.identity; RoleCtrl roleCtrl = @object.GetComponent <RoleCtrl>(); if (roleCtrl != null && !m_jobRoleCtr.ContainsKey(m_jobEntityList[i].Id)) { m_jobRoleCtr.Add(m_jobEntityList[i].Id, roleCtrl); } } }
/// <summary> /// /// </summary> /// <param name="range"></param> private void SearchAndSortPlayers(float range) { m_SearchPlayerList.Clear(); Collider[] cols = Physics.OverlapSphere(CurRoleCtrl.transform.position, range, 1 << LayerMask.NameToLayer("Role")); if (cols != null && cols.Length > 0) { //找到敌人 for (int i = 0; i < cols.Length; i++) { RoleCtrl localEnemy = cols[i].GetComponent <RoleCtrl>(); if ((localEnemy.CurRoleType == RoleType.MainPlayer || localEnemy.CurRoleType == RoleType.OtherPlayer) && localEnemy.FSM.CurrentRoleStateEnum != RoleState.Die) { m_SearchPlayerList.Add(cols[i]); } } m_SearchPlayerList.Sort((Collider c1, Collider c2) => { if (Vector3.Distance(CurRoleCtrl.transform.position, c1.transform.position) < Vector3.Distance(CurRoleCtrl.transform.position, c2.transform.position)) { return(-1); } else { return(1); } }); } }
/// <summary> /// 玩家点击 /// </summary> private void OnPlayerClick() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; RaycastHit[] hitArr = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Role")); if (hitArr.Length > 0) { RoleCtrl hitRole = hitArr[0].collider.gameObject.GetComponent <RoleCtrl>(); if (hitRole.CurrRoleType == RoleType.Monster) { GlobalInit.Instance.CurrPlayer.LockEnemy = hitRole; } } else { if (Physics.Raycast(ray, out hitInfo)) { if (hitInfo.collider.gameObject.name.Equals("Ground", System.StringComparison.CurrentCultureIgnoreCase)) { if (GlobalInit.Instance.CurrPlayer != null) { GlobalInit.Instance.CurrPlayer.LockEnemy = null; GlobalInit.Instance.CurrPlayer.MoveTo(hitInfo.point); } } } } }
public void Init(RoleFSMMgr fsm, RoleCtrl roleCtrl) { m_RoleFSMMgr = fsm; m_EnemyList = new List <RoleCtrl>(); m_SearchEnemyList = new List <Collider>(); m_RoleCtrl = roleCtrl; }
private void CreateMonster() { //if (m_CurrentCreateCount > 0) return; m_Index = UnityEngine.Random.Range(0, m_CurrentRegionMonsterList.Count); GameLevelMonsterEntity levelMonsterEntity = m_CurrentRegionMonsterList[m_Index]; SpriteEntity spriteEntity = SpriteDBModel.Instance.Get(levelMonsterEntity.SpriteId); if (spriteEntity == null || levelMonsterEntity == null) { return; } if (!monsterCreateDic.ContainsKey(m_Index)) { monsterCreateDic[m_Index] = levelMonsterEntity.SpriteCount; } string prefabName = spriteEntity.PrefabName; monsterCreateDic[m_Index]--; if (monsterCreateDic[m_Index]-- < 0) { monsterCreateDic.Remove(m_Index); } Transform obj = m_Pool.Spawn(prefabName); obj.position = m_CurRegionCtrl.GetMonsterBornPos; obj.localEulerAngles = Vector3.zero; obj.localScale = Vector3.one; RoleCtrl ctrl = obj.GetComponent <RoleCtrl>(); ctrl.OnRoleDie = OnRoleDieCallBack; ctrl.OnRoleDestory = OnRoleDestoryCallBack; RoleInfoMonster info = new RoleInfoMonster(spriteEntity); info.RoleId = ++m_TempIndex; info.RoleNickName = spriteEntity.Name; info.Level = spriteEntity.Level; //info.Exp = spriteEntity.RewardExp; info.MaxHP = spriteEntity.HP; info.CurrentHP = spriteEntity.HP; info.MaxMP = spriteEntity.MP; info.CurrentMP = spriteEntity.MP; info.Attack = spriteEntity.Attack; info.Defense = spriteEntity.Defense; info.Hit = spriteEntity.Hit; info.Dodge = spriteEntity.Dodge; info.Res = spriteEntity.Res; info.Cri = spriteEntity.Cri; info.Fighting = spriteEntity.Fighting * 100; ctrl.Init(RoleType.Monster, info, new GameLevel_RoleMonsterAI(ctrl, info)); ctrl.Born(obj.position); ctrl.ViewRange = spriteEntity.Range_View; m_CurrentCreateCount++; }
/// <summary> /// 构造函数 /// </summary> /// <param name="currRoleCtrl"></param> public RoleFSMMgr(RoleCtrl currRoleCtrl) { CurrRoleCtrl = currRoleCtrl; m_RoleStateDic = new Dictionary <RoleState, RoleStateAbstract>(); m_RoleStateDic[RoleState.Idle] = new RoleStateIdle(this); m_RoleStateDic[RoleState.Run] = new RoleStateRun(this); m_RoleStateDic[RoleState.Attack] = new RoleStateAttack(this); m_RoleStateDic[RoleState.Hurt] = new RoleStateHurt(this); m_RoleStateDic[RoleState.Die] = new RoleStateDie(this); if (m_RoleStateDic.ContainsKey(CurrRoleStateEnum)) { m_CurrRoleState = m_RoleStateDic[CurrRoleStateEnum]; } }
/// <summary> /// ¸´»î /// </summary> public void ToResurrection() { CurRoleInfo.CurrentHP = CurRoleInfo.MaxHP; CurRoleInfo.CurrentMP = CurRoleInfo.MaxMP; CurCharacterController.enabled = true; ToIdle(IdleType.IdleFight); if (OnHPChange != null) { OnHPChange(ValueChangeType.Add); } if (OnMPChange != null) { OnMPChange(ValueChangeType.Add); } LockEnemy = null; }
// Update is called once per frame void Update() { if (currenCount < maxCounrt) { GameObject go = RoleMgr.Instance.LoadRole(RoleType.Monster, "Role_Monster_01"); go.transform.SetParent(this.transform); go.transform.position = transform.TransformPoint(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f)); RoleCtrl role = go.GetComponent <RoleCtrl>(); role.BornPoint = go.transform.position; //RoleInfoBase roleInfo = new RoleInfoMonster() { RoleServerID = DateTime.Now.Ticks, RoleID = 1, NickName = "ͶÊéµÁ½Ù", CurHP = 100, MaxHP = 100 }; //IRoleAI ai = new RoleMonsterAI(role); //role.Init(RoleType.Monster, roleInfo, ai); //currenCount++; //role.OnRoleDie += OnRoleDie; } }
public RoleFSMMgr(RoleCtrl roleCtrl, Action onDestory, Action onDie) { this.CurRoleCtrl = roleCtrl; states = new Dictionary <RoleState, RoleStateAbstract>(); //装载状态 states.Add(RoleState.Idle, new RoleStateIdle(this)); states.Add(RoleState.Run, new RoleStateRun(this)); states.Add(RoleState.Attack, new RoleStateAttack(this)); states.Add(RoleState.Hurt, new RoleStateHurt(this)); states.Add(RoleState.Die, new RoleStateDie(this, onDestory, onDie)); states.Add(RoleState.Select, new RoleStateSelect(this)); if (states.ContainsKey(CurrentRoleStateEnum)) { CurrentRoleState = states[CurrentRoleStateEnum]; } }
private void OnRoleDieCallBack(RoleCtrl ctrl) { //GameLevelCtrl.Instance.CurPassTime = (int)m_FightingTime; //UIViewMgr.Instance.OpenView(UIViewType.GameLevelVictory); m_KillRegionMonsterCount++; RoleInfoMonster info = (RoleInfoMonster)ctrl.CurRoleInfo; if (info != null) { GameLevelMonsterEntity monsterEntity = GameLevelMonsterDBModel.Instance.GetRegionMonsterInfo(m_GameLevelId, m_Grade, m_CurRegionCtrl.RegionId, info.SpriteEntity.Id); if (monsterEntity != null) { if (monsterEntity.Exp > 0) { UITipView.Instance.SetUI(0, monsterEntity.Exp.ToString()); GameLevelCtrl.Instance.CurGameLevelTotalExp += monsterEntity.Exp; } if (monsterEntity.Gold > 0) { UITipView.Instance.SetUI(1, monsterEntity.Gold.ToString()); GameLevelCtrl.Instance.CurGameLevelTotalGold += monsterEntity.Gold; } if (GameLevelCtrl.Instance.CurGameLevelKillMonsterDic.ContainsKey(monsterEntity.SpriteId)) { GameLevelCtrl.Instance.CurGameLevelKillMonsterDic[monsterEntity.SpriteId] += 1; } else { GameLevelCtrl.Instance.CurGameLevelKillMonsterDic[monsterEntity.SpriteId] = 1; } } } if (m_KillRegionMonsterCount >= m_CurrentRegionMonsterCount) { m_CurSelectRegionIndex++; if (LastRegion) { //胜利 m_IsFighting = false; GameLevelCtrl.Instance.CurPassTime = (int)m_FightingTime; TimeMgr.Instance.SetTimeScaleDuration(0.3f, 3); StartCoroutine("FightingWinIE"); return; } EnterRegion(m_CurSelectRegionIndex); } }
/// <summary> /// 点击地面主角移动 /// </summary> private void OnPlayerClick() { if (UICamera.currentCamera != null) { Ray rayUI = UICamera.currentCamera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(rayUI, Mathf.Infinity, 1 << LayerMask.NameToLayer("UI"))) { return; } } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit[] hitArray = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Role")); //如果点击到了敌人 if (hitArray.Length > 0) { RoleCtrl roleCtrl = hitArray[0].collider.gameObject.GetComponent <RoleCtrl>(); if (roleCtrl.CurrRoleType == RoleType.Monster) { //锁定敌人 GlobalInit.Instance.MainRoleCtrl.LockEnemy = roleCtrl; } } else { RaycastHit hit; //获取摄像机的射线碰撞地面点 if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.name.Equals("Ground", System.StringComparison.CurrentCultureIgnoreCase)) { if (GlobalInit.Instance.MainRoleCtrl != null) { GlobalInit.Instance.MainRoleCtrl.LockEnemy = null; GlobalInit.Instance.MainRoleCtrl.MoveTo(hit.point); } } } } }
/// <summary> 刷怪 </summary> private void CreateMonster() { //临时测试 //if (m_CurrRegionCreateMonsterCount>=1) return; if (m_RegionMonsterList.Count == 0) { return; } for (int i = 0; i < 1; i++) { m_Index = UnityEngine.Random.Range(0, m_RegionMonsterCountList.Count); if (m_RegionMonsterCountList[m_Index] == 0) { i--; } } int monsterId = m_RegionMonsterList[m_Index].MonsterId; RoleInfoMonster monsterInfo = new RoleInfoMonster(); MonsterEntity monsterEntity = MonsterDBModel.Instance.Get(monsterId); monsterInfo.MonsterEntity = monsterEntity; monsterInfo.GameLevelMonsterEntity = GameLevelMonsterDBModel.Instance.GetGameLevelMonsterEntity(GameLevelCtrl.Instance.ChapterId, GameLevelCtrl.Instance.GameLevelId, m_CurrRegionIndex + 1, monsterId); monsterInfo.RoleId = ++m_MonsterTempId; m_KillMonsterIdList.Add(monsterInfo.RoleId); monsterInfo.SetMonsterData(monsterEntity); //从池子中取怪 Transform monsterTrans = m_MonsterPool.Spawn(MonsterDBModel.Instance.Get(monsterId).PrefabName); //将怪放在出生点 Transform monsterBornPos = m_CurrRegionctrl.MonsterBornPos[UnityEngine.Random.Range(0, m_CurrRegionctrl.MonsterBornPos.Length)]; RoleCtrl monsterCtrl = monsterTrans.GetComponent <RoleCtrl>(); monsterCtrl.PatrolRadius = monsterEntity.PatrolRadius; monsterCtrl.ViewRadius = monsterEntity.ViewRadius; monsterCtrl.Speed = monsterEntity.MoveSpeed; monsterCtrl.Init(RoleType.Monster, monsterInfo, new GameLevelRoleMonsterAI(monsterCtrl, monsterInfo)); monsterCtrl.OnRoleDie = OnRoleDieCallBack; monsterCtrl.OnRoleDestroy = OnRoleDestroyCallBack; monsterCtrl.SetBornPoint(monsterBornPos.TransformPoint(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f))); m_RegionMonsterCountList[m_Index]--; m_CurrRegionCreateMonsterCount++; }
/// <summary> /// 构造 /// </summary> /// <param name="rolectrl"></param> public RoleFSMMgr(RoleCtrl rolectrl) { RoleCtrl = rolectrl; RoleStateType = RoleStateType.None; m_RoleStateDic = new Dictionary <RoleStateType, RoleStateAbstract>(); //初始化角色状态机字典 m_RoleStateDic.Add(RoleStateType.None, new RoleStateNone(this)); m_RoleStateDic.Add(RoleStateType.Idle, new RoleStateIdle(this)); m_RoleStateDic.Add(RoleStateType.Run, new RoleStateRun(this)); m_RoleStateDic.Add(RoleStateType.Hurt, new RoleStateHurt(this)); m_RoleStateDic.Add(RoleStateType.Die, new RoleStateDie(this)); m_RoleStateDic.Add(RoleStateType.Attack, new RoleStateAttack(this)); if (m_RoleStateDic.ContainsKey(RoleStateType)) { m_RoleState = m_RoleStateDic[RoleStateType]; } }
/// <summary> /// 构造函数 /// </summary> /// <param name="currRoleCtrl"></param> public RoleFSMMgr(RoleCtrl currRoleCtrl, Action onDie, Action onDestroy) { CurrRoleCtrl = currRoleCtrl; m_RoleStateDic = new Dictionary <RoleState, RoleStateAbstract>(); m_RoleStateDic[RoleState.Idle] = new RoleStateIdle(this); m_RoleStateDic[RoleState.Run] = new RoleStateRun(this); m_RoleStateDic[RoleState.Attack] = new RoleStateAttack(this); m_RoleStateDic[RoleState.Hurt] = new RoleStateHurt(this); m_RoleStateDic[RoleState.Die] = new RoleStateDie(this); m_RoleStateDic[RoleState.Select] = new RoleStateSelect(this); RoleStateDie dieState = m_RoleStateDic[RoleState.Die] as RoleStateDie; dieState.OnDie = onDie; dieState.OnDestroy = onDestroy; if (m_RoleStateDic.ContainsKey(CurrRoleStateEnum)) { m_CurrRoleState = m_RoleStateDic[CurrRoleStateEnum]; } }
/// <summary> /// 玩家点击 /// </summary> private void OnPlayerClick() { if (EventSystem.current.IsPointerOverGameObject()) { return; } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit[] hitArr; hitArr = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Role")); if (hitArr.Length > 0) { RoleCtrl hitRole = hitArr[0].collider.gameObject.GetComponent <RoleCtrl>(); if (hitRole.CurrRoleType == RoleType.Monster) { GlobalInit.Instance.CurrPlayer.LockEnemy = hitRole; return; } } RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo, 1000f, 1 << LayerMask.NameToLayer("Ground"))) { if (GlobalInit.Instance.CurrPlayer != null) { if (SceneMgr.Instance.CurrSceneType == ConstDefine.GameLevel) { Vector3 point = new Vector3(hitInfo.point.x, hitInfo.point.y + 50, hitInfo.point.z); if (Physics.Raycast(point, new Vector3(0, -100, 0), out hitInfo, 1000f, 1 << LayerMask.NameToLayer("RegionMask"))) { return; } } GlobalInit.Instance.CurrPlayer.LockEnemy = null; GlobalInit.Instance.CurrPlayer.MoveTo(hitInfo.point); } } }
/// <summary> 计算攻击信息 </summary> /// <param name="enemy"></param> /// <param name="entity"></param> /// <returns></returns> private RoleTransferAttackInfo CalculateHurtValue(RoleCtrl enemy, SkillEntity entity) { if (enemy == null || entity == null) { return(null); } int skillLevel = m_CurrRoleCtrl.CurrRoleInfo.GetSkillLevel(entity.Id); RoleTransferAttackInfo attackInfo = new RoleTransferAttackInfo(); attackInfo.AttackRoleId = m_CurrRoleCtrl.CurrRoleInfo.RoleId; attackInfo.AttackRolePos = m_CurrRoleCtrl.transform.position; attackInfo.BeAttackRoleId = enemy.CurrRoleInfo.RoleId; attackInfo.SkillId = entity.Id; attackInfo.SkillLevel = skillLevel; attackInfo.IsAbnormal = entity.AbnormalState == 1; //1.攻击数值 = 攻击者综合战斗力 * (技能伤害倍率 * 0.001f) float attackValue = (int)(m_CurrRoleCtrl.CurrRoleInfo.Fighting * (entity.HurtValueRate + entity.HurtValueRateUp * (skillLevel - 1)) * 0.001f); //2.基础伤害 = 攻击数值 * 攻击数值/(攻击数值+被攻击者的防御) float baseHurt = attackValue * attackValue / (attackValue + enemy.CurrRoleInfo.Defense); //3.暴击率 = 攻击方暴击/(被攻击方暴击*5); float criValue = m_CurrRoleCtrl.CurrRoleInfo.GetFinalCri() / (float)enemy.CurrRoleInfo.GetFinalCri(); //暴击率的最大值为50% criValue = criValue > 0.5f ? 0.5f : criValue; //4.是否暴击 bool isCri = UnityEngine.Random.Range(0f, 1f) <= criValue; //5.暴击伤害倍率 = 暴击?1.5f:1f float criHurt = isCri ? 1.5f : 1f; //6.随机数 = 0.9f-1.1f float random = UnityEngine.Random.Range(0.9f, 1.1f); //7.最终伤害 = 基础伤害 * 暴击伤害倍率 * 随机数 int finalHurt = Mathf.RoundToInt(baseHurt * criHurt * random); finalHurt = finalHurt < 1 ? 1 : finalHurt; attackInfo.HurtValue = finalHurt; attackInfo.IsCri = isCri; return(attackInfo); }
/// <summary> /// 加载其他玩家 /// </summary> /// <param name="roleId">角色编号</param> /// <param name="nickName">昵称</param> /// <param name="roleLevel">等级</param> /// <param name="jobId">职业编号</param> /// <param name="maxHP"></param> /// <param name="currHP"></param> /// <param name="maxMP"></param> /// <param name="currMP"></param> /// <returns></returns> public RoleCtrl LoadOtherRole(int roleId, string nickName, int roleLevel, int jobId, int maxHP, int currHP, int maxMP, int currMP) { GameObject roleObj = Object.Instantiate(GlobalInit.Instance.JobObjectDic[jobId]); RoleCtrl roleCtrl = roleObj.GetComponent <RoleCtrl>(); //角色初始化的时候 要赋值基本信息 //以后 包括 帮会信息 称号信息 等 也都要进行同步 RoleInfoMainPlayer roleInfo = new RoleInfoMainPlayer(); roleInfo.RoldId = roleId; roleInfo.RoleNickName = nickName; roleInfo.Level = roleLevel; roleInfo.JobId = (byte)roleId; roleInfo.MaxHP = maxHP; roleInfo.CurrHP = currHP; roleInfo.MaxMP = maxMP; roleInfo.CurrMP = currMP; roleCtrl.Init(RoleType.OTherRole, roleInfo, new OtherRoleAI(roleCtrl)); return(roleCtrl); }
private RoleTransferAttackInfo CalculationHurtValue(RoleCtrl enemy, SkillEntity skillEntity, SkillLevelEntity skillLevelEntity) { if (enemy == null || skillEntity == null || skillLevelEntity == null) { return(null); } RoleTransferAttackInfo t = new RoleTransferAttackInfo(); t.AttackRoleID = m_RoleCtrl.CurRoleInfo.RoleId; t.AttackRolePos = m_RoleCtrl.transform.position; t.BeAttaclRoleID = enemy.CurRoleInfo.RoleId; t.SkillId = skillEntity.Id; t.SkillLevel = skillLevelEntity.Level; t.IsAbnormal = skillEntity.AbnormalState == 1; //计算伤害 //1.攻击数值=攻击方的综合战斗力*(技能的伤害倍率*0.01f) float attackValue = m_RoleCtrl.CurRoleInfo.Fighting * (skillLevelEntity.HurtValueRate * 0.01f); //2.基础伤害=g攻击数值*攻击数值/(攻击数值+被攻击方的防御) float baseHurt = attackValue * attackValue / (attackValue * enemy.CurRoleInfo.Defense); //3.暴击概率=0.05f+(攻击方的暴击/(攻击方的暴击+防御方的抗性))*0.1f float cri = 0.05f + (m_RoleCtrl.CurRoleInfo.Cri / (m_RoleCtrl.CurRoleInfo.Cri / (float)enemy.CurRoleInfo.Res)) * 0.1f; cri = cri > 0.5f ? 0.5f : cri; //4.是否暴击=0-1随机数<=随机数 bool isCri = Random.Range(0f, 1f) <= cri; //5.暴击伤害倍率=有暴击?1.5f:1f float criHurt = isCri ? 1.5f : 1f; //6.随机数 0.9f-1.1f float random = Random.Range(0.9f, 1.1f); //7.最终伤害 =基础伤害*暴击伤害倍率*随机数 int hurtValue = (int)(baseHurt * criHurt * random); hurtValue = hurtValue < 1 ? 1 : hurtValue; t.IsCri = isCri; t.HurtValue = hurtValue; return(t); }
private void CloneCreateRole() { if (m_CreateCloneRoleGoList.Count == 0) { if (CreateRoleContainer == null || CreateRoleContainer.Length < 4) { return; } for (int i = 0; i < m_JobList.Count; i++) { GameObject obj = Instantiate(GlobalInit.Instance.JobDic[m_JobList[i].Id], CreateRoleContainer[i]); obj.transform.localPosition = Vector3.zero; obj.transform.localRotation = Quaternion.Euler(Vector3.zero); obj.transform.localScale = Vector3.one; JobEntity entity = JobDBModel.Instance.Get(m_JobList[i].Id); for (int j = 0; j < entity.WeaponPath.Length; j++) { GameObject weaponObj = AssetBundleManager.Instance.Load(string.Format("Download/Model/{0}/{1}.assetbundle", entity.WeaponFloader, entity.WeaponPath[j]), entity.WeaponPath[j]); Instantiate(weaponObj, obj.transform.GetChild(0).Find(entity.WeaponParent[j])); } RoleCtrl roleCtrl = obj.GetComponent <RoleCtrl>(); if (roleCtrl != null) { m_JobRoleCtrl[m_JobList[i].Id] = roleCtrl; } m_CreateCloneRoleGoList.Add(obj); } } else { for (int i = 0; i < m_CreateCloneRoleGoList.Count; i++) { m_CreateCloneRoleGoList[i].SetActive(true); } } }
public void LoadResources() { //role roleControllers = new RoleCtrl[6]; for (int i = 0; i < 6; ++i) { roleControllers[i] = new RoleCtrl(); roleControllers[i].CreateRole(Position.role_shore[i], i < 3 ? true : false, i); } //shore leftShoreController = new ShoreCtrl(); leftShoreController.CreateShore(Position.left_shore); leftShoreController.GetShore().shore.name = "left_shore"; rightShoreController = new ShoreCtrl(); rightShoreController.CreateShore(Position.right_shore); rightShoreController.GetShore().shore.name = "right_shore"; //将人物添加并定位至左岸 foreach (RoleCtrl roleController in roleControllers) { roleController.GetRoleModel().role.transform.localPosition = leftShoreController.AddRole(roleController.GetRoleModel()); } //boat boatController = new BoatCtrl(); boatController.CreateBoat(Position.left_boat); //river river = new River(Position.river); //move moveController = new MoveCtrl(); isRunning = true; time = 60; }
private void OnPlayerDie(RoleCtrl obj) { StartCoroutine(OnRoleResurgence()); }
public RoleMonsterAI(RoleCtrl roleCtrl) { CurrRole = roleCtrl; }
public GameLevelRoleMonsterAI(RoleCtrl roleCtrl, RoleInfoMonster info) { CurrRole = roleCtrl; //m_Info = CurrRole.CurrRoleInfo as RoleInfoMonster; m_Info = info; }
public void Init() { obstacleMapping = Statics.GetObstacle(Application.loadedLevelName); if (obstacleMapping == null) { return; } if (myCamera == null) { myCamera = Camera.main; } if (Host != null) { roleCtrl = Host.GetComponent<RoleCtrl>(); } endPostion = Vector3.zero; }
/// <summary> /// Sets the host. /// </summary> /// <param name="roleId">Role identifier.</param> public void SetHost(string roleId) { if (roleCtrls.ContainsKey(roleId)) { roleCtrl = roleCtrls[roleId]; Host = roleCtrl.transform; } }
private void OnRoleDieCallBack(RoleCtrl ctrl) { GameLevelMonsterEntity entity = ((RoleInfoMonster)ctrl.CurrRoleInfo).GameLevelMonsterEntity; TipsUtil.ShowExpTips(entity.DropExp); TipsUtil.ShowCoinTips(entity.DropCoin); m_DropExp += entity.DropExp; m_DropCoin += entity.DropCoin; m_CurrRegionKillMonsterCount++; //掉落装备/材料 int equipNum = UnityEngine.Random.Range(1, 101); if (equipNum > 50) { int tempNum = UnityEngine.Random.Range(1, 101); int equipId = 0; if (tempNum < 35) { equipId = entity.DropEquip[0][0].ToInt(); } else if (tempNum < 60) { equipId = entity.DropEquip[1][0].ToInt(); } else if (tempNum < 80) { equipId = entity.DropEquip[2][0].ToInt(); } else if (tempNum < 95) { equipId = entity.DropEquip[3][0].ToInt(); } else { equipId = entity.DropEquip[4][0].ToInt(); } //掉落装备 //Debuger.Log("掉落装备Id = " + equipId); GameLevelSuccessRequestProto.GoodsItem item = new GameLevelSuccessRequestProto.GoodsItem(); item.GoodsType = 1; item.GoodsCount = 1; item.GoodsId = equipId; m_DropGoodsList.Add(item); } int matNum = UnityEngine.Random.Range(1, 101); if (matNum > 50) { int tempNum2 = UnityEngine.Random.Range(1, 101); int matId = 0; if (tempNum2 < 35) { matId = entity.DropMaterial[0][0].ToInt(); } else if (tempNum2 < 60) { matId = entity.DropMaterial[1][0].ToInt(); } else if (tempNum2 < 80) { matId = entity.DropMaterial[2][0].ToInt(); } else if (tempNum2 < 95) { matId = entity.DropMaterial[3][0].ToInt(); } else { matId = entity.DropMaterial[4][0].ToInt(); } //掉落材料 //Debuger.LogError("掉落材料Id = " + matId); bool isHaveMat = false; for (int i = 0; i < m_DropGoodsList.Count; i++) { if (m_DropGoodsList[i].GoodsId == matId) { isHaveMat = true; GameLevelSuccessRequestProto.GoodsItem item = new GameLevelSuccessRequestProto.GoodsItem(); item.GoodsType = m_DropGoodsList[i].GoodsType; item.GoodsId = m_DropGoodsList[i].GoodsId; item.GoodsCount = m_DropGoodsList[i].GoodsCount + 1; m_DropGoodsList[i] = item; break; } } if (!isHaveMat) { GameLevelSuccessRequestProto.GoodsItem item = new GameLevelSuccessRequestProto.GoodsItem(); item.GoodsType = 2; item.GoodsCount = 1; item.GoodsId = matId; m_DropGoodsList.Add(item); } } if (m_CurrRegionKillMonsterCount >= m_CurrRegionMonsterCount) { if (m_CurrRegionIndex < m_Region.Length - 1) { //进入下一区域 m_CurrRegionIndex++; EnterRegion(m_CurrRegionIndex); } else { m_IsFighting = false; GameLevelCtrl.Instance.Result = 1; GameLevelCtrl.Instance.UseTime = m_UseTime; GameLevelCtrl.Instance.DropExp = m_DropExp; GameLevelCtrl.Instance.DropCoin = m_DropCoin; //最后一击播放慢动画 TimeManager.Instance.ChangeTimeScale(0.3f, 5f, OpenFightResultWindow); //战斗胜利 Debug.Log("战斗胜利"); } } }
public GameLevel_RoleMonsterAI(RoleCtrl roleCtrl, RoleInfoMonster info) { CurRoleCtrl = roleCtrl; RoleInfo = info; }