public override void Execute() { Actor pTarget = Owner.GetTarget(); switch (Owner.ActorType) { case EActorType.MONSTER: { if (pTarget != null) { //float dist = GTTools.GetHorizontalDistance(Owner.Pos, pTarget.Pos); if (Owner.AiConeDetection.IsEnter) { AI.ChangeAIState(EAIState.AI_CHASE); } } Patrol(); } break; case EActorType.PLAYER: { if (pTarget != null) { float dist = GTTools.GetHorizontalDistance(Owner.Pos, pTarget.Pos); if (dist < AI.WARDIST) { AI.ChangeAIState(EAIState.AI_CHASE); } } Patrol(); } break; } }
private void Fight() { float dist = GTTools.GetHorizontalDistance(Owner.Pos, Owner.GetTarget().Pos); if (dist > AI.ATKDIST) { AI.ChangeAIState(EAIState.AI_CHASE); return; } if (Owner.FSM == FSMState.FSM_SKILL) { return; } Owner.SendStateMessage(FSMState.FSM_Attack); Timerr += Time.deltaTime; if (Timerr >= SkillCD) { GameObject Bullet = ZTPool.Instance.GetGo("Model/Weapons/bullet"); BulletScript bulletScript = Bullet.GET <BulletScript>(); AudioClip clip = LoadResource.Instance.Load <AudioClip>("Sounds/AK47A"); ZTAudio.Instance.PlaySound(clip); bulletScript.damage = Owner.GetAttr(EAttr.Atk); bulletScript.AttackActor = this.Owner; if (Owner.mActorPart.AttackTransform != null) { Bullet.transform.position = Owner.mActorPart.AttackTransform.position; Bullet.transform.eulerAngles = Owner.mActorPart.AttackTransform.eulerAngles; } Timerr = 0; } }
public MoverFixPosition(ActMissile obj, Character target, HitCallbackFly onTriggerEnter) : base(obj, target, onTriggerEnter) { this.m_HAngle = obj.MoveHAngle; this.m_VAngle = obj.MoveVAngle; this.m_DestPosition = target != null?target.Avatar.GetBindPosition(EBind.Body) : CacheTransform.position + CacheTransform.forward * 10; this.m_DistanceToTarget = GTTools.GetHorizontalDistance(CacheTransform.position, m_DestPosition); }
protected override void Trigger() { base.Trigger(); for (int i = 0; i < GTWorld.Characters.Count; i++) { Character defender = GTWorld.Characters[i]; if (Carryer.Match(Affect, defender) && GTTools.GetHorizontalDistance(Carryer.Pos, defender.Pos) <= Radius) { CharacterHelper.CalcDamage(Carryer, defender, null, Type, Percent, FixValue, IgnoreDefense); } } }
protected override void Trigger() { base.Trigger(); for (int i = 0; i < GTWorld.Characters.Count; i++) { Character defender = GTWorld.Characters[i]; if (Carryer.Match(Affect, defender) && GTTools.GetHorizontalDistance(Carryer.Pos, defender.Pos) <= Radius) { CharacterHelper.CalcHeal(Type, Carryer, defender, string.Empty, Percent, FixValue); } } }
protected override void Trigger() { base.Trigger(); for (int i = 0; i < CharacterManager.Characters.Count; i++) { Character defender = CharacterManager.Characters[i]; if (Carryer.Match(Affect, defender) && GTTools.GetHorizontalDistance(Carryer.Pos, defender.Pos) <= Radius) { CharacterHelper.CalcAddBuff(Carryer, defender, BuffID); } } }
public override void Execute() { base.Execute(); CacheTransform.LookAt(m_DestPosition); float distance = GTTools.GetHorizontalDistance(CacheTransform.position, m_DestPosition); if (m_VAngle != 0 || m_HAngle != 0) { float percent = Mathf.Min(1, distance / m_DistanceToTarget); float v = percent * m_VAngle; float h = percent * m_HAngle; CacheTransform.rotation *= Quaternion.Euler(Mathf.Clamp(v, -60, 60), Mathf.Clamp(h, -60, 60), 0); } CacheTransform.position += CacheTransform.forward * mMoveSpeed * Time.deltaTime; }
protected override bool IsTouch(Character cc, Vector3 hitPoint, Vector3 dir) { if (cc == null || cc.CacheTransform == null) { return(false); } if (Radius <= 0) { return(false); } if (GTTools.GetHorizontalDistance(hitPoint, cc.Pos) < cc.Radius) { return(true); } return(false); }
public override bool IsTouch(Actor actor) { if (actor == null || actor.CacheTransform == null) { return(false); } if (Radius <= 0) { return(false); } if (GTTools.GetHorizontalDistance(Center.position, actor.Pos) < actor.Radius) { return(true); } return(false); }
public float Height = 2; //圆柱有效高度 public override bool IsTouch(Actor actor) { if (actor == null || actor.CacheTransform == null) { return(false); } if (HAngle <= 0 || Height <= 0) { return(false); } float y = Center.position.y; float yMax = y + Height / 2; float yMin = y - Height / 2; if (actor.Pos.y + actor.Height <= yMin) { return(false); } if (actor.Pos.y >= yMax) { return(false); } Vector3 dirPos = Euler + Center.forward; dirPos.y = 0; float radius = MaxDis + actor.Radius; if (GTTools.GetHorizontalDistance(Center.position, actor.Pos) > radius) { return(false); } Vector3 targetPos = actor.Pos; targetPos.y = 0; Vector3 centerPos = Center.position; centerPos.y = 0; if (Vector3.Angle(targetPos - centerPos, dirPos) > HAngle / 2) { return(false); } return(true); }
public override void Execute() { if (Owner.GetTarget() != null) { Owner.Command(new RTCommand(Owner.GetTarget())); Owner.mActorPathFinding.SetStopDis(2); } switch (Owner.ActorType) { case EActorType.MONSTER: { if (Owner.GetTarget() == null) { return; } float dist = GTTools.GetHorizontalDistance(Owner.Pos, Owner.GetTarget().Pos); if (dist > AI.WARDIST) { AI.ChangeAIState(EAIState.AI_BACK); } else if (dist < AI.ATKDIST && Owner.AiConeDetection.IsEnter) { AI.ChangeAIState(EAIState.AI_FIGHT); return; } } break; case EActorType.PLAYER: { if (Owner.GetTarget() == null) { AI.ChangeAIState(EAIState.AI_IDLE); return; } float dist = GTTools.GetHorizontalDistance(Owner.Pos, Owner.GetTarget().Pos); if (dist < AI.ATKDIST) { AI.ChangeAIState(EAIState.AI_FIGHT); return; } } break; } }
public Actor GetNearestEnemy(float radius = 10000) { List <Actor> actors = GetAllEnemy(); //Debug.LogError("敌人列表"+actors.Count); Actor nearest = null; float min = radius; for (int i = 0; i < actors.Count; i++) { float dist = GTTools.GetHorizontalDistance(actors[i].CacheTransform.position, this.CacheTransform.position); if (dist < min) { min = dist; nearest = actors[i]; } } return(nearest); }
public float Height; //圆柱有效高度 protected override bool IsTouch(Character cc, Vector3 hitPoint, Vector3 hitDir) { if (cc == null || cc.CacheTransform == null) { return(false); } if (HAngle <= 0 || Height <= 0) { return(false); } float y = hitPoint.y; float yMax = y + Height / 2; float yMin = y - Height / 2; if (cc.Pos.y + cc.Height <= yMin) { return(false); } if (cc.Pos.y >= yMax) { return(false); } Vector3 dirPos = Euler + hitDir; dirPos.y = 0; float radius = MaxDis + cc.Radius; if (GTTools.GetHorizontalDistance(hitPoint, cc.Pos) > radius) { return(false); } Vector3 targetPos = cc.Pos; targetPos.y = 0; Vector3 centerPos = hitPoint; centerPos.y = 0; if (Vector3.Angle(targetPos - centerPos, dirPos) > HAngle / 2) { return(false); } return(true); }
public Actor GetNearestEnemy(float radius = 10000) { if (AiConeDetection.TargetPlayer != null) { return(AiConeDetection.TargetPlayer); } List <Actor> actors = GetAllEnemy(); Actor nearest = null; float min = radius; for (int i = 0; i < actors.Count; i++) { float dist = GTTools.GetHorizontalDistance(actors[i].CacheTransform.position, this.CacheTransform.position); if (dist < min) { min = dist; nearest = actors[i]; } } return(nearest); }
public ActSkill SelectSkillByEnemy(Character enemy) { foreach (var current in mSkillAttacks) { ActSkill s = current.Value; if (s.CastDist > 0 && s.IsCD() == false) { if (enemy != null) { if (GTTools.GetHorizontalDistance(mCharacter.Pos, enemy.Pos) < s.CastDist) { return(s); } } else { return(s); } } } return(GetSkill(ESkillPos.Skill_0)); }
protected void HitCallback(MoverBeam mover) { if (mover.DstCharacter == null) { return; } ActHelper.RunChildrenInNewTree(this, (tree) => { for (int i = 0; i < tree.Children.Count; i++) { tree.Children[i].ApplyHitPoint = mover.DstCharacter.Avatar.GetBindPosition(TargetBind); tree.Children[i].ApplyHitDir = mover.CacheTransform.forward; tree.Children[i].AddInAttackList(mover.DstCharacter); } }); if (mCurrAttackList.Count >= MaxCount) { return; } List <Character> list = Skill.Caster.GetAffectCharacters(Affect, false); for (int i = 0; i < list.Count; i++) { Character cc = list[i]; if (mCurrAttackList.Contains(cc)) { continue; } mCurrAttackList.Add(cc); if (GTTools.GetHorizontalDistance(cc.Pos, mover.DstCharacter.Pos) < MaxBounceDis) { GTWorld.Instance.Act.MakeMove(this, mover.DstCharacter, cc, HitCallback); } } }
private void Fight() { float dist = GTTools.GetHorizontalDistance(Owner.Pos, Owner.GetTarget().Pos); if (dist > AI.ATKDIST) { AI.ChangeAIState(EAIState.AI_CHASE); return; } if (Owner.FSM == FSMState.FSM_SKILL) { return; } SkillTree skill = Owner.GetActorSkill().FindNextSkillByDist(dist); if (skill != null) { Owner.Command(new USCommand(skill.Pos)); } else { Owner.Command(new IDCommand()); } }
public override void Execute() { switch (Owner.ActorType) { case EActorType.MONSTER: { if (Owner.GetTarget() == null) { return; } float dist = GTTools.GetHorizontalDistance(Owner.Pos, Owner.GetTarget().Pos); if (dist > AI.WARDIST) { AI.ChangeAIState(EAIState.AI_BACK); } else if (dist < AI.ATKDIST) { AI.ChangeAIState(EAIState.AI_FIGHT); return; } } break; case EActorType.PARTNER: { if (Owner.GetTarget() == null) { AI.ChangeAIState(EAIState.AI_IDLE); return; } float dist = GTTools.GetHorizontalDistance(Owner.Pos, Owner.GetTarget().Pos); if (dist > AI.WARDIST) { AI.ChangeAIState(EAIState.AI_IDLE); return; } else if (dist < AI.ATKDIST) { AI.ChangeAIState(EAIState.AI_FIGHT); return; } } break; case EActorType.PLAYER: { if (Owner.GetTarget() == null) { AI.ChangeAIState(EAIState.AI_IDLE); return; } float dist = GTTools.GetHorizontalDistance(Owner.Pos, Owner.GetTarget().Pos); if (dist < AI.ATKDIST) { AI.ChangeAIState(EAIState.AI_FIGHT); return; } } break; } if (Owner.GetTarget() != null) { Owner.Command(new RTCommand(Owner.GetTarget())); } }
public override void Execute() { Actor pTarget = Owner.GetTarget(); if (pTarget != null) { Debug.LogError("找到的目標" + pTarget.Id); } switch (Owner.ActorType) { case EActorType.MONSTER: { if (pTarget != null) { float dist = GTTools.GetHorizontalDistance(Owner.Pos, pTarget.Pos); if (dist < AI.WARDIST) { AI.ChangeAIState(EAIState.AI_CHASE); } } } break; case EActorType.PARTNER: { //if (pTarget!=null) //{ // float dist = GTTools.GetHorizontalDistance(Owner.Pos, pTarget.Pos); // if (dist < AI.WARDIST) // { // AI.ChangeAIState(EAIState.AI_CHASE); // } //} //Actor pHost = Owner.GetHost(); //if (pHost != null) //{ // float dist = GTTools.GetHorizontalDistance(Owner.Pos, Owner.GetHost().Pos); // if (dist > AI.FOLLOWDIST) // { // AI.ChangeAIState(EAIState.AI_FOLLOW); // return; // } //} } break; case EActorType.PLAYER: { if (pTarget != null) { float dist = GTTools.GetHorizontalDistance(Owner.Pos, pTarget.Pos); if (dist < AI.WARDIST) { AI.ChangeAIState(EAIState.AI_CHASE); } } } break; } }