Пример #1
0
 public RoleAttack(RoleFSMMgr fsm)
 {
     m_CurrRoleFSMMgr = fsm;
     m_CurrRoleCtrl   = m_CurrRoleFSMMgr.CurrRoleCtrl;
     m_EnemyList      = new List <RoleCtrl>();
     m_SearchList     = new List <Collider>();
 }
Пример #2
0
    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++;
            }
        }
    }
Пример #3
0
    /// <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);
        }
    }
Пример #4
0
    /// <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);
            }
        }
    }
Пример #7
0
 /// <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);
             }
         });
     }
 }
Пример #8
0
    /// <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);
                    }
                }
            }
        }
    }
Пример #9
0
 public void Init(RoleFSMMgr fsm, RoleCtrl roleCtrl)
 {
     m_RoleFSMMgr      = fsm;
     m_EnemyList       = new List <RoleCtrl>();
     m_SearchEnemyList = new List <Collider>();
     m_RoleCtrl        = roleCtrl;
 }
Пример #10
0
    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++;
    }
Пример #11
0
    /// <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];
        }
    }
Пример #12
0
 /// <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;
     }
 }
Пример #14
0
 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];
     }
 }
Пример #15
0
    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);
        }
    }
Пример #16
0
    /// <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);
                    }
                }
            }
        }
    }
Пример #17
0
    /// <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++;
    }
Пример #18
0
    /// <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];
        }
    }
Пример #19
0
    /// <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];
        }
    }
Пример #20
0
    /// <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);
            }
        }
    }
Пример #21
0
    /// <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);
    }
Пример #22
0
    /// <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);
    }
Пример #23
0
    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);
    }
Пример #24
0
 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);
         }
     }
 }
Пример #25
0
    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;
    }
Пример #26
0
 private void OnPlayerDie(RoleCtrl obj)
 {
     StartCoroutine(OnRoleResurgence());
 }
Пример #27
0
 public RoleMonsterAI(RoleCtrl roleCtrl)
 {
     CurrRole = roleCtrl;
 }
Пример #28
0
 public GameLevelRoleMonsterAI(RoleCtrl roleCtrl, RoleInfoMonster info)
 {
     CurrRole = roleCtrl;
     //m_Info = CurrRole.CurrRoleInfo as RoleInfoMonster;
     m_Info = info;
 }
Пример #29
0
 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;
 }
Пример #30
0
 /// <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;
     }
 }
Пример #31
0
    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("战斗胜利");
            }
        }
    }
Пример #32
0
 public GameLevel_RoleMonsterAI(RoleCtrl roleCtrl, RoleInfoMonster info)
 {
     CurRoleCtrl = roleCtrl;
     RoleInfo    = info;
 }