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>(); }
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); } }
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"); }); }
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"); }); }
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; } } } }
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); }
public bool isInSameCamp(HeroBaseModel model) { return Camp.Equals(model.Camp); }
//群攻 public void attackGroup(HeroBaseModel model) { }
//普通攻击 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); }
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>(); }
//群攻 public void attackGroup(HeroBaseModel model) { }
//普通攻击 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); }
public bool isInSameCamp(HeroBaseModel model) { return(Camp.Equals(model.Camp)); }