Beispiel #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>();
    }
Beispiel #2
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");
        });
    }
Beispiel #3
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");
        });
    }
Beispiel #4
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);
    }
Beispiel #5
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>();
    }
Beispiel #6
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);
    }