Exemple #1
0
    protected override void Start()
    {
        mAnim      = GetComponent <Animator>();
        mNavAgent  = GetComponent <NavMeshAgent>();
        mRigidBody = GetComponent <Rigidbody>();

        mRigidBody.useGravity = false;

        //配置文件
        mModel = HeroModelFactory.getHeroModel(gameObject.name);

        //从配置文件读取移动速度
        mNavAgent.speed = mModel.get(Constants.HERO_ATTR_RUNSPEED);

        //取消动画中的位移
        mAnim.applyRootMotion = false;

        //保存动画初始播放速度,只为run动画根据移动速度调整动画播放速度。
        mAnimInitSpeed = mAnim.speed;

        //动作状态机
        mStateManager = gameObject.AddComponent <StateManager>();
        mStateManager.addState(new HeroRunState());
        mStateManager.addState(new HeroChaseState());
        mStateManager.addState(new HeroIdleState());
        mStateManager.addState(new HeroJumpState());
        mStateManager.addState(new HeroAttackState());
        mStateManager.addState(new HeroDeathState());
        mStateManager.setDefaultState("HeroIdleState");

        //如果死亡,不管在什么状态下都跳转到死亡状态。
        mStateManager.setCondForState("HeroDeathState", 1, () => { return(mModel.isDead()); });

        mBloodBar = gameObject.AddComponent <HeroUI>();
    }
Exemple #2
0
    public HeroBaseModel clone()
    {
        HeroBaseModel model = newInstance();

        model.Config  = new HeroBossConfig();
        model.Type    = mType;
        model.Level   = mLevel;
        model.CurrExp = mCurrExp;
        return(model);
    }
    void doAttack()
    {
        GameObject enemy = AnimCtl.ChaseObject;

        if (enemy != null)
        {
            HeroBaseModel enemyModel = HeroModelFactory.getHeroModel(enemy.name);
            //攻击敌人
            AnimCtl.Model.attack(enemyModel);
        }
    }
Exemple #4
0
    protected override void Start()
    {
        mTexBlood = ResourceManager <Texture2D> .load("images/globalUI/pbBlood");

        mTexBg = ResourceManager <Texture2D> .load("images/globalUI/pbBg");

        mBc          = GetComponent <BoxCollider>();
        mBloodWidth  = 90;
        mBloodHeight = 10;
        mOffX        = 5;
        mOffY        = 5;

        mFactor       = mBc.bounds.extents.magnitude;
        mBloodWidth  *= mFactor * mTotalScale;
        mBloodHeight *= /*mFactor * */ mTotalScale;
        mOffX        *= mFactor * mTotalScale;
        mOffY        *= /*mFactor * */ mTotalScale;

        mBgWidth  = mBloodWidth + 2 * mOffX;
        mBgHeight = mBloodHeight + 2 * mOffY;

        mAdjustHeight = 50;

        mModel = HeroModelFactory.getHeroModel(gameObject.name);
        if (mModel != null)
        {
            float allBlood = mModel.get(Constants.HERO_ATTR_HEALTH_MAX);
            mPercent = mModel.get(Constants.HERO_ATTR_HEALTH) / allBlood;
            mapEvent(Events.EVT_HERO_ATTR_CHANGED, (string __, object data) =>
            {
                HeroAttrChange attrChange = (HeroAttrChange)data;
                if (attrChange.what.Equals(Constants.HERO_ATTR_HEALTH) && attrChange.which.Equals(gameObject.name))
                {
                    float currBlood = mModel.get(Constants.HERO_ATTR_HEALTH);
                    mPercent        = currBlood / allBlood;
                }
            });
        }

        mapEvent(Events.EVT_GAME_OVER, (string __, object data) =>
        {
            Time.timeScale = 0;
            Debug.Log("gameOver");
        });
    }
Exemple #5
0
    protected override void Start()
    {
        mTexBlood = ResourceManager<Texture2D>.load("images/globalUI/pbBlood");
        mTexBg = ResourceManager<Texture2D>.load("images/globalUI/pbBg");
        mBc = GetComponent<BoxCollider>();
        mBloodWidth = 90;
        mBloodHeight = 10;
        mOffX = 5;
        mOffY = 5;

        mFactor = mBc.bounds.extents.magnitude;
        mBloodWidth *= mFactor * mTotalScale;
        mBloodHeight *= /*mFactor * */mTotalScale;
        mOffX *= mFactor * mTotalScale;
        mOffY *= /*mFactor * */ mTotalScale;

        mBgWidth = mBloodWidth + 2 * mOffX;
        mBgHeight = mBloodHeight + 2 * mOffY;

        mAdjustHeight = 50;

        mModel = HeroModelFactory.getHeroModel(gameObject.name);
        if (mModel != null)
        {
            float allBlood = mModel.get(Constants.HERO_ATTR_HEALTH_MAX);
            mPercent = mModel.get(Constants.HERO_ATTR_HEALTH) / allBlood;
            mapEvent(Events.EVT_HERO_ATTR_CHANGED, (string __, object data) =>
            {
                HeroAttrChange attrChange = (HeroAttrChange)data;
                if (attrChange.what.Equals(Constants.HERO_ATTR_HEALTH) && attrChange.which.Equals(gameObject.name))
                {
                    float currBlood = mModel.get(Constants.HERO_ATTR_HEALTH);
                    mPercent = currBlood / allBlood;
                }
            });
        }

        mapEvent(Events.EVT_GAME_OVER, (string __, object data) =>
        {
            Time.timeScale = 0;
            Debug.Log("gameOver");
        });
    }
Exemple #6
0
    public void checkEnemy()
    {
        if (mChaseObj != null)
        {
            var chaseObjModel = HeroModelFactory.getHeroModel(mChaseObj.name);
            if (chaseObjModel.isDead())
            {
                mChaseObj = null;
            }
        }
        //如果不在追逐状态,并且距离目标为可攻击距离,那么就不需要追逐。
        if (!isChasing && mChaseObj != null && isArrivedTargetForChase())
        {
            return;
        }

        //10m内是否有敌人
        Collider[] colliders = Physics.OverlapSphere(transform.position, mModel.AlertDistance);
        foreach (var c in colliders)
        {
            if (c.gameObject.Equals(gameObject))
            {
                continue;
            }
            var cGameObj     = c.gameObject;
            var triggerObj   = cGameObj.GetComponent <HeroUI>();//有血有肉的人就可以被攻击
            var triggerModel = HeroModelFactory.getHeroModel(cGameObj.name);
            if (triggerObj != null && !triggerModel.isDead())
            {
                HeroBaseModel cmodel = HeroModelFactory.getHeroModel(cGameObj.name);
                if (!cmodel.isInSameCamp(mModel))
                {
                    startChase(cGameObj);
                    break;
                }
            }
        }
    }
Exemple #7
0
    public static HeroBaseModel getHeroModel(string type)
    {
        HeroBaseModel model = null;

        switch (type)
        {
        case Constants.HERO_NAME_BOSS:
            model = Singleton <HeroBossModel> .getInstance();

            break;

        case Constants.HERO_NAME_CHANGBIZI:
            model = Singleton <HeroChangbiziModel> .getInstance();

            break;

        case Constants.HERO_NAME_JINGCHA:
            model = Singleton <HeroJingchaModel> .getInstance();

            break;

        case Constants.HERO_NAME_HOME:
            model = Singleton <HeroHomeModel> .getInstance();

            break;

        default:
            break;
        }

        if (model != null)
        {
            model.Type = type;
        }

        return(model);
    }
Exemple #8
0
 public bool isInSameCamp(HeroBaseModel model)
 {
     return Camp.Equals(model.Camp);
 }
Exemple #9
0
 //群攻
 public void attackGroup(HeroBaseModel model)
 {
 }
Exemple #10
0
    //普通攻击
    public void attack(HeroBaseModel model)
    {
        bool isCrit = false;
        if(!BaseConfig.isHit(get(Constants.HERO_ATTR_HIT), get(Constants.HERO_ATTR_DODGE)))
        {
            Debug.Log("attack error! is not hit!!");
            return;
        }
        else
        {
            if(BaseConfig.isCrit(get(Constants.HERO_ATTR_CRIT), get(Constants.HERO_ATTR_DECRIT)))//暴击
            {
                Debug.Log("attack status is crit!!");
                GlobalObject.EventDispatcher.dispatchEvent(Events.EVT_HERO_CRIT);
                isCrit = true;
            }
            else if (BaseConfig.isFreeze(get(Constants.HERO_ATTR_FREEZE), get(Constants.HERO_ATTR_IMMUNITY)))//冰冻
            {
                Debug.Log("attack status is freeze!!");
                model.enableStatus(Constants.HERO_STATUS_FREEZE, new HeroStatus() {startTime=Time.time, isActive=true, time = 3 });
            }
            else if(BaseConfig.isVertigo(get(Constants.HERO_ATTR_VERTIGO), get(Constants.HERO_ATTR_IMMUNITY)))//眩晕
            {
                Debug.Log("attack status is vertigo!!");
                model.enableStatus(Constants.HERO_STATUS_FREEZE, new HeroStatus() { startTime = Time.time, isActive = true, time = 3 });
            }
            else if (BaseConfig.isPoison(get(Constants.HERO_ATTR_POISON), get(Constants.HERO_ATTR_IMMUNITY)))//中毒
            {
                Debug.Log("attack status is poison!!");
                model.enableStatus(Constants.HERO_STATUS_FREEZE, new HeroStatus() { startTime = Time.time, isActive = true, time = 3, value=300 });
            }
        }

        float attackValue = get(Constants.HERO_ATTR_ATTACK);
        float mattackValue = get(Constants.HERO_ATTR_MATTACK);
        float defenseValue = model.get(Constants.HERO_ATTR_DEFENSE);
        float mdefenseValue = model.get(Constants.HERO_ATTR_MDEFENSE);
        float damage = 0;
        if (attackValue < mattackValue)
        {
            damage = BaseConfig.damage(attackValue, mattackValue, defenseValue, mdefenseValue);
        }
        else
        {
            damage = BaseConfig.mdamage(attackValue, mattackValue, defenseValue, mdefenseValue);
        }

        if (isCrit)
        {
            damage *= 2;
        }

        //掉血
        model.add(Constants.HERO_ATTR_HEALTH, -damage);
    }
Exemple #11
0
    protected override void Start()
    {
        mAnim = GetComponent<Animator>();
        mNavAgent = GetComponent<NavMeshAgent>();
        mRigidBody = GetComponent<Rigidbody>();

        mRigidBody.useGravity = false;

        //配置文件
        mModel = HeroModelFactory.getHeroModel(gameObject.name);

        //从配置文件读取移动速度
        mNavAgent.speed = mModel.get(Constants.HERO_ATTR_RUNSPEED);

        //取消动画中的位移
        mAnim.applyRootMotion = false;

        //保存动画初始播放速度,只为run动画根据移动速度调整动画播放速度。
        mAnimInitSpeed = mAnim.speed;

        //动作状态机
        mStateManager = gameObject.AddComponent<StateManager>();
        mStateManager.addState(new HeroRunState());
        mStateManager.addState(new HeroChaseState());
        mStateManager.addState(new HeroIdleState());
        mStateManager.addState(new HeroJumpState());
        mStateManager.addState(new HeroAttackState());
        mStateManager.addState(new HeroDeathState());
        mStateManager.setDefaultState("HeroIdleState");

        //如果死亡,不管在什么状态下都跳转到死亡状态。
        mStateManager.setCondForState("HeroDeathState", 1, () => { return mModel.isDead(); });

        mBloodBar = gameObject.AddComponent<HeroUI>();
    }
Exemple #12
0
 //群攻
 public void attackGroup(HeroBaseModel model)
 {
 }
Exemple #13
0
    //普通攻击
    public void attack(HeroBaseModel model)
    {
        bool isCrit = false;

        if (!BaseConfig.isHit(get(Constants.HERO_ATTR_HIT), get(Constants.HERO_ATTR_DODGE)))
        {
            Debug.Log("attack error! is not hit!!");
            return;
        }
        else
        {
            if (BaseConfig.isCrit(get(Constants.HERO_ATTR_CRIT), get(Constants.HERO_ATTR_DECRIT)))//暴击
            {
                Debug.Log("attack status is crit!!");
                GlobalObject.EventDispatcher.dispatchEvent(Events.EVT_HERO_CRIT);
                isCrit = true;
            }
            else if (BaseConfig.isFreeze(get(Constants.HERO_ATTR_FREEZE), get(Constants.HERO_ATTR_IMMUNITY)))//冰冻
            {
                Debug.Log("attack status is freeze!!");
                model.enableStatus(Constants.HERO_STATUS_FREEZE, new HeroStatus()
                {
                    startTime = Time.time, isActive = true, time = 3
                });
            }
            else if (BaseConfig.isVertigo(get(Constants.HERO_ATTR_VERTIGO), get(Constants.HERO_ATTR_IMMUNITY)))//眩晕
            {
                Debug.Log("attack status is vertigo!!");
                model.enableStatus(Constants.HERO_STATUS_FREEZE, new HeroStatus()
                {
                    startTime = Time.time, isActive = true, time = 3
                });
            }
            else if (BaseConfig.isPoison(get(Constants.HERO_ATTR_POISON), get(Constants.HERO_ATTR_IMMUNITY)))//中毒
            {
                Debug.Log("attack status is poison!!");
                model.enableStatus(Constants.HERO_STATUS_FREEZE, new HeroStatus()
                {
                    startTime = Time.time, isActive = true, time = 3, value = 300
                });
            }
        }

        float attackValue   = get(Constants.HERO_ATTR_ATTACK);
        float mattackValue  = get(Constants.HERO_ATTR_MATTACK);
        float defenseValue  = model.get(Constants.HERO_ATTR_DEFENSE);
        float mdefenseValue = model.get(Constants.HERO_ATTR_MDEFENSE);
        float damage        = 0;

        if (attackValue < mattackValue)
        {
            damage = BaseConfig.damage(attackValue, mattackValue, defenseValue, mdefenseValue);
        }
        else
        {
            damage = BaseConfig.mdamage(attackValue, mattackValue, defenseValue, mdefenseValue);
        }

        if (isCrit)
        {
            damage *= 2;
        }

        //掉血
        model.add(Constants.HERO_ATTR_HEALTH, -damage);
    }
Exemple #14
0
 public bool isInSameCamp(HeroBaseModel model)
 {
     return(Camp.Equals(model.Camp));
 }