void SendRevengeAttackEvent() { HandleSound.PlaySoundBerserk(); Agent.BlackBoard.invulnerable = true; _eventAttack = AnimFSMEventAttackMelee.pool.Get(); _eventAttack.animAttackData = Agent.AnimSet.ProcessCombo(ComboType.REVENGE); _eventAttack.attackDir = Agent.Forward; Agent.FSMComponent.SendEvent(_eventAttack); }
public override void OnExit(Phenix.Unity.AI.WorldState ws) { if (_eventAttack != null) { _eventAttack.Release(); _eventAttack = null; } base.OnExit(ws); }
void SendEvent() { //Owner.SoundPlayBerserk(); _eventAttack = AnimFSMEventAttackMelee.pool.Get(); _eventAttack.target = Agent.BlackBoard.HasAttackTarget ? Agent.BlackBoard.desiredTarget : null; //_eventAttack.attackType = OrderAttackType.COUNTER; _eventAttack.attackDir = Agent.BlackBoard.desiredDirection; _eventAttack.attackPhaseStart = false; _eventAttack.attackPhaseDone = false; _eventAttack.animAttackData = Agent.AnimSet.ProcessCombo(ComboType.COUNTER); Agent.FSMComponent.SendEvent(_eventAttack); }
public override void Reset() { base.Reset(); _injuryPhrase = 0; _eventInjury = null; _eventDeath = null; _eventAttack = null; _attacker = null; _attackerRepeatCount = 0; _damageResultType = DamageResultType.NONE; _startTrailTimer = 0; }
void SendEvent() { _eventAttack = AnimFSMEventAttackMelee.pool.Get(); //_eventAttack.attackType = (Agent.PlayerOrder.GetCurOrder() as OrderDataAttack).attackType; _eventAttack.attackPhaseStart = false; _eventAttack.attackPhaseDone = false; Agent.BlackBoard.desiredTarget = _eventAttack.target = Agent.Decision.SelectTarget( Agent.BlackBoard.combatRange, Game1.Instance.AgentMgr.agents); if (_eventAttack.target) { Agent.BlackBoard.desiredDirection = Agent.BlackBoard.desiredTarget.Position - Agent.Position; Agent.BlackBoard.desiredDirection.Normalize(); _eventAttack.attackDir = Agent.BlackBoard.desiredDirection; } else { _eventAttack.attackDir = Agent.Forward; } if (_eventAttack.target != null && _eventAttack.target.BlackBoard.IsKnockedDown) { _eventAttack.animAttackData = Agent.AnimSet.ProcessCombo(ComboType.JUMP_KILL); //_eventAttack.attackType = OrderAttackType.FATALITY; } else { _eventAttack.animAttackData = Agent.AnimSet.ProcessOrderCombo((Agent.PlayerOrder.GetCurOrder() as OrderDataAttack).attackType /*_eventAttack.attackType*/); } /*ComboMgr comboMgr = Agent.transform.GetComponent<ComboMgr>(); * if (comboMgr != null) * { * if (_eventAttack.target != null && _eventAttack.target.BlackBoard.IsKnockedDown) * { * _eventAttack.animAttackData = Agent.AnimSet.GetFirstAttackAnim( * Agent.BlackBoard.weaponSelected, AttackType.FATALITY); * _eventAttack.attackType = AttackType.FATALITY; * comboMgr.Reset(); * } * else * _eventAttack.animAttackData = comboMgr.ProcessCombo(_eventAttack.attackType); * } * else * { * _eventAttack.animAttackData = Agent.GetComponent<AnimSet>().GetFirstAttackAnim( * Agent.BlackBoard.weaponSelected, _eventAttack.attackType); * } */ Agent.FSMComponent.SendEvent(_eventAttack); }
public override void OnExit(Phenix.Unity.AI.WorldState ws) { Agent.BlackBoard.invulnerable = false; if (_eventInjury != null) { _eventInjury.Release(); _eventInjury = null; } if (_eventDeath != null) { _eventDeath.Release(); _eventDeath = null; } if (_eventAttack != null) { _eventAttack.Release(); _eventAttack = null; } base.OnExit(ws); }
void SendEvent() { _eventAttack = AnimFSMEventAttackMelee.pool.Get(); if (Agent.BlackBoard.desiredTarget) { Agent.BlackBoard.desiredDirection = Agent.BlackBoard.desiredTarget.Position - Agent.Position; Agent.BlackBoard.desiredDirection.Normalize(); _eventAttack.attackDir = Agent.BlackBoard.desiredDirection; _eventAttack.target = Agent.BlackBoard.HasAttackTarget ? Agent.BlackBoard.desiredTarget : null; } else { _eventAttack.attackDir = Agent.Forward; } _eventAttack.animAttackData = Agent.AnimSet.ProcessSingle(ComboType.SINGLE_SWORD); _eventAttack.attackPhaseStart = false; _eventAttack.attackPhaseDone = false; Agent.FSMComponent.SendEvent(_eventAttack); }
protected override void Initialize(FSMEvent ev = null) { _eventAttackMelee = ev as AnimFSMEventAttackMelee; _attackStatus = AttackStatus.PREPARING; Agent.BlackBoard.motionType = MotionType.ATTACK; _startRotation = Agent.Transform.rotation; _startPosition = Agent.Transform.position; if (_eventAttackMelee.target != null) { float angle = 0; float distance = 0; Vector3 finalDir = _eventAttackMelee.target.Position - Agent.Transform.position; distance = finalDir.magnitude; if (distance > 0.1f) { finalDir.Normalize(); angle = Vector3.Angle(Agent.Transform.forward, finalDir); if (angle < 40 && Vector3.Angle(Agent.Forward, _eventAttackMelee.target.Forward) < 80) { _backHit = true; } } else { finalDir = Agent.Transform.forward; } _finalRotation.SetLookRotation(finalDir); if (distance < Agent.BlackBoard.weaponRange || Agent.BlackBoard.allowedFlashToWeaponRange == false || distance > Agent.BlackBoard.combatRange * 1.2f) { _finalPosition = _startPosition; _rotationTime = angle / 720.0f; } else { // flash if (distance >= Agent.BlackBoard.weaponRange * 1.5) { if (Agent.BlackBoard.showMotionEffect) { ParticleTools.Instance.Play(Agent.particleSystemFlashTust, (_eventAttackMelee.target.Position - Agent.Position).RadianInXZ()); } } _finalPosition = _eventAttackMelee.target.transform.position - finalDir * Agent.BlackBoard.weaponRange; Agent.Transform.LookAt(_eventAttackMelee.target.transform); _rotationTime = 0; } _moveTime = (_finalPosition - _startPosition).magnitude / 20.0f; } else { _finalRotation.SetLookRotation(_eventAttackMelee.attackDir); _rotationTime = Vector3.Angle(Agent.Transform.forward, _eventAttackMelee.attackDir) / 720.0f; _moveTime = 0; } _rotationOk = (_rotationTime == 0); _positionOK = (_moveTime == 0); _currentRotationTime = 0; _currentMoveTime = 0; _isCritical = IsCritical(); _knockdown = IsKnockDown(); _hitTimeStart = false; }
public override void Reset() { base.Reset(); _eventAttack = null; }
// Update is called once per frame protected override void Update() { base.Update(); if (Input.GetKey(KeyCode.Alpha1)) { AnimFSMEventGoTo ev = AnimFSMEventGoTo.pool.Get(); ev.moveType = MoveType.FORWARD; ev.motionType = MotionType.RUN; ev.finalPosition = Agent.Decision.GetBestAttackStart(Agent.BlackBoard.desiredTarget); Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha2)) { AnimFSMEventShowHideSword ev = AnimFSMEventShowHideSword.pool.Get(); ev.show = true; Agent.BlackBoard.weaponState = WeaponState.IN_HAND; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha3)) { AnimFSMEventIdle ev = AnimFSMEventIdle.pool.Get(); Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha4)) { AnimFSMEventRotate ev = AnimFSMEventRotate.pool.Get(); ev.target = Agent.BlackBoard.desiredTarget; //ev.rotationModifier = 0.8f; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha5)) { AnimFSMEventCombatMove ev = AnimFSMEventCombatMove.pool.Get(); ev.target = Agent.BlackBoard.desiredTarget; ev.minDistanceToTarget = 3; ev.moveType = MoveType.FORWARD; if (Agent.agentType == AgentType.DOUBLE_SWORDS_MAN || Agent.agentType == AgentType.SWORD_MAN) // 这里暂时偷个懒,另外扩展一个不同参数的goapaction才是更灵活的做法 { ev.motionType = MotionType.WALK; ev.totalMoveDistance = Agent.BlackBoard.DistanceToDesiredTarget - (Agent.BlackBoard.combatRange * 0.8f); } else { ev.totalMoveDistance = UnityEngine.Random.Range((Agent.BlackBoard.DistanceToDesiredTarget - (Agent.BlackBoard.combatRange * 0.5f)) * 0.5f, Agent.BlackBoard.DistanceToDesiredTarget - (Agent.BlackBoard.combatRange * 0.5f)); } Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha6)) { AnimFSMEventCombatMove ev = AnimFSMEventCombatMove.pool.Get(); ev.moveType = MoveType.BACKWARD; ev.target = Agent.BlackBoard.desiredTarget; ev.minDistanceToTarget = 0; if (Agent.agentType == AgentType.DOUBLE_SWORDS_MAN) // 这里暂时偷个懒,另外扩展一个不同参数的goapaction才是更灵活的做法 { ev.motionType = MotionType.RUN; ev.totalMoveDistance = UnityEngine.Random.Range(4f, 6f); } else { ev.totalMoveDistance = UnityEngine.Random.Range(2f, 5f); } Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha7)) { AnimFSMEventCombatMove ev = AnimFSMEventCombatMove.pool.Get(); ev.moveType = MoveType.LEFTWARD; ev.target = Agent.BlackBoard.desiredTarget; ev.totalMoveDistance = UnityEngine.Random.Range(2.0f, 4.0f); ev.minDistanceToTarget = Agent.BlackBoard.DistanceToDesiredTarget * 0.7f; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha8)) { AnimFSMEventCombatMove ev = AnimFSMEventCombatMove.pool.Get(); ev.moveType = MoveType.RIGHTWARD; ev.target = Agent.BlackBoard.desiredTarget; ev.totalMoveDistance = UnityEngine.Random.Range(2.0f, 4.0f); ev.minDistanceToTarget = Agent.BlackBoard.DistanceToDesiredTarget * 0.7f; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha9)) { AnimFSMEventShowHideSword ev = AnimFSMEventShowHideSword.pool.Get(); ev.show = false; Agent.BlackBoard.weaponState = WeaponState.NOT_IN_HANDS; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha0)) { AnimFSMEventAttackMelee ev = AnimFSMEventAttackMelee.pool.Get(); ev.target = Agent.BlackBoard.desiredTarget; //ev.attackType = OrderAttackType.X; //ev.animAttackData = Agent.GetComponent<AnimSet>().GetFirstAttackAnim(Agent.BlackBoard.weaponSelected, // ev.attackType); Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Minus)) { AnimFSMEventAttackWhirl ev = AnimFSMEventAttackWhirl.pool.Get(); ev.data = Agent.GetComponent <AnimSet>().GetWhirlAttackAnim(); Agent.FSMComponent.SendEvent(ev); } }
public override void Reset() { base.Reset(); _eventAttack = null; _remainAttackCount = 0; }