using CommonAI.ZoneClient; using CommonAI.Zone.Helper; using UnityEngine; using CommonAIClient.Unity.Utils; namespace CommonAIClient.Unity.Battle { public enum WeaponPart { WEAPON_LEFT, WEAPON_RIGHT, } public partial class ComAIUnit : ComAICell { private GameObject mAvatarRoot; protected ZoneUnit ZUnit { get { return ZObject as ZoneUnit; } } public byte Force { get { return this.ZUnit.Force; } } public float BodyHeight { get { return this.ZUnit.Info.BodyHeight; } } public float BodySize { get { return this.ZUnit.BodySize; } } public int MaxHP { get { return this.ZUnit.MaxHP; } } public int MP { get { return this.ZUnit.MP; } } public string FileName { get { return this.ZUnit.Info.FileName; } } public ComAIUnit(BattleScene battleScene, ZoneUnit obj) : base(battleScene, obj) { mAvatarRoot = new GameObject("AvatarRoot"); mAvatarRoot.ParentRoot(this.DisplayRoot); InitActionStatus(); this.ZUnit.OnActionChanged += ZUnit_OnActionChanged; this.ZUnit.OnLaunchSkill += ZUnit_OnLaunchSkill; this.ZUnit.OnSkillActionChanged += ZUnit_OnSkillActionChanged; this.ZUnit.OnSkillActionStart += ZUnit_OnSkillActionStart; this.ZUnit.OnBuffAdded += ZUnit_OnBuffAdded; this.ZUnit.OnBuffChanged += ZUnit_OnBuffChanged; this.ZUnit.OnBuffRemoved += ZUnit_OnBuffRemoved; //加载模型 BattleFactroy.Instance.GameObjectAdapter.Load( this.ZUnit.Info.FileName, System.IO.Path.GetFileNameWithoutExtension(this.ZUnit.Info.FileName), (succ, aoe) => { if (this.IsDisposed) { BattleFactroy.Instance.GameObjectAdapter.Unload(aoe); return; } OnLoadModelFinish(succ, aoe); }); } protected virtual void OnLoadModelFinish(bool success, AssetObjectExt aoe) { if (success) { this.DisplayCell.Model = aoe; CorrectDummyNode(); } } protected override void OnDispose() { this.ZUnit.OnActionChanged -= ZUnit_OnActionChanged; this.ZUnit.OnLaunchSkill -= ZUnit_OnLaunchSkill; this.ZUnit.OnSkillActionChanged -= ZUnit_OnSkillActionChanged; this.ZUnit.OnSkillActionStart -= ZUnit_OnSkillActionStart; this.ZUnit.OnBuffAdded -= ZUnit_OnBuffAdded; this.ZUnit.OnBuffChanged -= ZUnit_OnBuffChanged; this.ZUnit.OnBuffRemoved -= ZUnit_OnBuffRemoved; if (this.ZUnit.Info.RemovedEffect != null) { PlayEffect(this.ZUnit.Info.RemovedEffect, ObjectRoot.Position(), ObjectRoot.Rotation()); } foreach (var elem in mBuffs) { elem.Value.Dispose(); } mBuffs.Clear(); foreach (var elem in mAvatarStack) { elem.DisplayCell.Dispose(); } mAvatarStack.Clear(); base.OnDispose(); } protected override void OnUpdate(float deltaTime) { base.OnUpdate(deltaTime); UpdateAction(deltaTime); UpdateBuff(deltaTime); } protected virtual void ZUnit_OnLaunchSkill(ZoneUnit unit, ZoneUnit.SkillState skill , CommonAI.Zone.UnitLaunchSkillEvent evt) { this.ChangeAction(UnitActionStatus.Skill); if (this.CurrentActionStatus is SkillActionStatus) { (this.CurrentActionStatus as SkillActionStatus).ZUnit_OnLaunchSkill(this, skill, evt); } } protected virtual void ZUnit_OnSkillActionStart(ZoneUnit unit, ZoneUnit.ISkillAction action) { if (this.CurrentActionStatus is SkillActionStatus) { (this.CurrentActionStatus as SkillActionStatus).OnStart(this); } } protected virtual void ZUnit_OnSkillActionChanged(ZoneUnit unit, ZoneUnit.SkillState skill, byte index) { if (this.CurrentActionStatus is SkillActionStatus) { (this.CurrentActionStatus as SkillActionStatus).ZUnit_OnSkillActionChanged(this, index); } } protected virtual void ZUnit_OnActionChanged(ZoneUnit unit, CommonAI.Zone.Helper.UnitActionStatus status, object evt) { this.ChangeAction(status); } } }