| | |
| | | public GameObject heroGo => _heroGo; |
| | | |
| | | public MotionBase motionBase; |
| | | |
| | | public TeamHero teamHero { get; private set; } |
| | | |
| | | // Buff 管理器(只有 Hero 有 buff 系统) |
| | | public BattleObjectBuffMgr buffMgr; |
| | | |
| | | private RectTransform m_heroRectTrans; |
| | | |
| | |
| | | public void Init(GameObject _heroGo, TeamHero _teamHero, BattleCamp _camp) |
| | | { |
| | | this._heroGo = _heroGo; |
| | | Init(_teamHero, _camp); |
| | | } |
| | | |
| | | public override void Init(TeamHero _teamHero, BattleCamp _camp) |
| | | { |
| | | teamHero = _teamHero; |
| | | Camp = _camp; |
| | | ObjID = _teamHero.ObjID; |
| | | InitInternal(); |
| | | } |
| | | |
| | | |
| | | private void InitInternal() |
| | | { |
| | | motionBase = new MotionBase(); |
| | | motionBase.Init(_heroGo.GetComponentInChildren<SkeletonAnimation>(true)); |
| | | buffMgr = new BattleObjectBuffMgr(); |
| | |
| | | heroInfoBar.SetActive(true); |
| | | } |
| | | SetFront(); |
| | | |
| | | if (battleField.ToString() != BattleConst.StoryBattleField && |
| | | battleField.ToString() != BattleConst.TianziBillboradBattleField) |
| | | { |
| | | var hitArea = heroGo.GetComponent<Image>(); |
| | | if (hitArea == null) |
| | | { |
| | | hitArea = heroGo.AddComponent<Image>(); |
| | | hitArea.color = new Color(0, 0, 0, 0); //让射线检测到 |
| | | } |
| | | |
| | | var btn = heroGo.GetComponent<ButtonEx>(); |
| | | if (btn == null) |
| | | { |
| | | btn = heroGo.AddComponent<ButtonEx>(); |
| | | btn.interval = 0.5f;// 防止频繁连续点击 |
| | | } |
| | | |
| | | btn.AddListener(() => |
| | | { |
| | | // 判断点击的是我方阵营还是敌方阵营,目前左边都是我方阵营 |
| | | bool isMySide = Camp == BattleCamp.Red; |
| | | EventBroadcast.Instance.Broadcast(EventName.BATTLE_CLICK_HERO, new BattleClickHeroData() |
| | | { |
| | | battleName = battleField.ToString(), |
| | | isMySide = isMySide, |
| | | mapID = battleField.MapID, |
| | | funcLineID = battleField.FuncLineID, |
| | | npcID = teamHero.NPCID, |
| | | posNum = teamHero.positionNum, |
| | | heroID = teamHero.heroId, |
| | | teams = battleField?.battleObjMgr.GetBattleObjList(isMySide ? BattleCamp.Red : BattleCamp.Blue), |
| | | }); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | public override void Run() |
| | |
| | | motionBase.ResetForReborn(false); |
| | | isReborning = false; |
| | | } |
| | | |
| | | // ============ 实现抽象访问方法 ============ |
| | | |
| | | public override BattleObjectBuffMgr GetBuffMgr() => buffMgr; |
| | | |
| | | public override int GetPositionNum() => teamHero.positionNum; |
| | | public override float GetModelScale() => teamHero.modelScale; |
| | | public override string GetName() => teamHero.name; |
| | | |
| | | protected override bool GetIsStunned() => teamHero.isStunned; |
| | | protected override bool GetIsFrozen() => teamHero.isFrozen; |
| | | protected override bool GetIsStoned() => teamHero.isStoned; |
| | | protected override bool GetIsSlient() => teamHero.isSlient; |
| | | protected override bool GetIsDisarmed() => teamHero.isDisarmed; |
| | | protected override bool GetIsInvincible() => teamHero.isInvinceble; |
| | | protected override bool GetIsDead() => teamHero.isDead; |
| | | public override int GetRage() => teamHero.rage; |
| | | |
| | | protected override void ApplyCasterHpChange(long newHp) |
| | | { |
| | | teamHero.curHp = newHp; |
| | | } |
| | | |
| | | public override long GetCurHp() => teamHero.curHp; |
| | | public override long GetMaxHp() => teamHero.maxHp; |
| | | public override void SetCurHp(long value) { teamHero.curHp = value; } |
| | | public override void SetIsDead(bool value) { teamHero.isDead = value; } |
| | | |
| | | public override int GetNPCID() => teamHero.NPCID; |
| | | public override long GetFightPower() => teamHero.fightPower; |
| | | |
| | | // 伤害还要看 是否闪避 暴击 and so on 需要有一个DamageType 服务器应该会给 |
| | | protected override BattleDmgInfo PopDamage(BattleHurtParam battleHurtParam) |