public void CreateOrderUse() { if (Agent.BlackBoard.IsOrderAddPossible(AgentOrder.E_OrderType.E_USE) == false) { return; } InteractionGameObject onObject = MissionZone.Instance.CurrentGameZone.GetNearestInteractionObject(Agent.Position, 2); if (onObject == null) { return; } if (onObject is InteractionLever) { InteractionLever lever = onObject as InteractionLever; if (lever.State != InteractionLever.E_State.E_OFF && lever.State != InteractionLever.E_State.E_OFF) { return; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_USE); order.InteractionObject = onObject; order.Position = order.InteractionObject.GetEntryTransform().position; order.Interaction = E_InteractionType.On; Agent.BlackBoard.AddOrder(order); return; } ComboProgress.Clear(); ClearBufferedOrder(); //GuiManager.Instance.ShowComboProgress(ComboProgress); }
private void CreateOrderAttack(E_AttackType type) { if (CouldBufferNewOrder() == false && CouldAddnewOrder() == false) { return; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_ATTACK); if (MoveDirection != Vector3.zero) { order.Direction = MoveDirection; } else { order.Direction = Transform.forward; } order.AnimAttackData = ProcessCombo(type); order.Target = MissionZone.Instance.GetBestTarget(Agent, LastAttacketTarget);; if (CouldAddnewOrder()) { Agent.BlackBoard.AddOrder(order); } else { BufferedOrders.Enqueue(order); } }
private void CreateOrderDodge() { if (Agent.BlackBoard.IsOrderAddPossible(AgentOrder.E_OrderType.E_DODGE) == false) { return; } Vector3 rollDir; if (MoveDirection != Vector3.zero) { rollDir = MoveDirection; } else { rollDir = Agent.Forward; } rollDir.Normalize(); AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_DODGE); order.Direction = rollDir; Agent.BlackBoard.AddOrder(order); ComboProgress.Clear(); ClearBufferedOrder(); //GuiManager.Instance.ShowComboProgress(ComboProgress); }
private void CreateOrderAttack(E_AttackType type) { if (CouldBufferNewOrder() == false && CouldAddnewOrder() == false) { //Debug.Log(Time.timeSinceLevelLoad + " attack order rejected, already buffered one "); return; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_ATTACK); if (InputDirection != Vector3.zero) //Controls.Joystick.Direction != Vector3.zero) { order.Direction = InputDirection; //Controls.Joystick.Direction; } else { order.Direction = Transform.forward; } order.AnimAttackData = ProcessCombo(type); order.Target = GetBestTarget(false); if (CouldAddnewOrder()) { //Debug.Log("order " + (order.Target != null ? order.Target.name : "no target") + " " + order.AnimAttackData.AnimName); Owner.BlackBoard.OrderAdd(order); } else { //Debug.Log("order to queue " + (order.Target != null ? order.Target.name : "no target") + " " + order.AnimAttackData.AnimName); BufferedOrders.Enqueue(order); } }
private void CreateOrderMove(Vector3 direction) { if (CouldAddnewOrder() == false) { // Debug.Log("不能添加动作"); return; } if (lastDir != null) { direction = (direction + lastDir).normalized; lastDir = direction; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_GOTO); order.Direction = direction; order.MoveSpeedModifier = moveSpeed; Owner.BlackBoard.OrderAdd(order); Owner.BlackBoard.DesiredDirection = direction; ActionMove actionMove = ActionFactory.Create(ActionFactory.E_Type.E_MOVE) as ActionMove; GetComponent <AnimComponent>().HandleAction(actionMove); }
private void CreateOrderDodge() { if (Owner.BlackBoard.IsOrderAddPossible(AgentOrder.E_OrderType.E_DODGE) == false) { return; } Vector3 rollDir; if (InputDirection != Vector3.zero) //Controls.Joystick.Direction != Vector3.zero) { rollDir = InputDirection; // Controls.Joystick.Direction; } else { rollDir = Owner.Forward; } rollDir.Normalize(); AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_DODGE); order.Direction = rollDir; Owner.BlackBoard.OrderAdd(order); ComboProgress.Clear(); ClearBufferedOrder(); GuiManager.Instance.ShowComboProgress(ComboProgress); }
void ClearBufferedOrder() { while (BufferedOrders.Count > 0) { AgentOrderFactory.Return(BufferedOrders.Dequeue()); } }
public void AddOrder(AgentOrder order) { Owner.WorldState.SetWSProperty(E_PropKey.E_ORDER, order.Type); switch (order.Type) { case AgentOrder.E_OrderType.E_GOTO: Owner.WorldState.SetWSProperty(E_PropKey.E_AT_TARGET_POS, false); DesiredDirection = order.Direction; DesiredPosition = order.Position; MoveSpeedModifier = order.MoveSpeedModifier; break; case AgentOrder.E_OrderType.E_STOPMOVE: Owner.WorldState.SetWSProperty(E_PropKey.E_AT_TARGET_POS, true); DesiredPosition = order.Position; break; case AgentOrder.E_OrderType.E_ATTACK: bool inRange = order.Target == null || (order.Target.Position - Owner.Position).magnitude <= WeaponRange; Owner.WorldState.SetWSProperty(E_PropKey.E_IN_WEAPONS_RANGE, inRange); DesiredTarget = order.Target; DesiredAttackType = order.AttackType; DesiredAttackPhase = order.AnimAttackData; break; default: break; } AgentOrderFactory.Return(order); }
public void OnTriggerEnter(Collider other) { TriggerObject interaction = other.GetComponent <TriggerObject>(); if (interaction != null) { if (interaction.GetEntryTransform() == null) { return; } // 当玩家碰到触发器,播放使用动画 Owner.transform.position = interaction.GetEntryTransform().position; Owner.transform.rotation = interaction.GetEntryTransform().rotation; useMode = false; AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_USE); order.InteractionObject = interaction; order.Position = order.InteractionObject.GetEntryTransform().position; order.Interaction = E_InteractionType.On; Owner.BlackBoard.OrderAdd(order); ActionUseLever actionUseLever = ActionFactory.Create(ActionFactory.E_Type.E_USE_LEVER) as ActionUseLever; actionUseLever.InterObj = interaction; actionUseLever.Interaction = E_InteractionType.On; GetComponent <AnimComponent>().HandleAction(actionUseLever); return; } }
private void CreateOrderStop() { AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_STOPMOVE); Owner.BlackBoard.OrderAdd(order); GetComponent <AnimComponent>().HandleAction(ActionFactory.Create(ActionFactory.E_Type.E_IDLE)); }
void CreateOrderGoTo(Vector3 _moveDirection) { AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_GOTO); order.Direction = _moveDirection; order.Position = Agent.Position; order.MoveSpeedModifier = 1.0f; Agent.BlackBoard.AddOrder(order); }
private void CreateOrderGoTo() { if (CouldAddnewOrder() == false) { return; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_GOTO); order.Direction = Controls.Joystick.Direction; order.MoveSpeedModifier = Controls.Joystick.Force; Owner.BlackBoard.OrderAdd(order); }
void OnTriggerEnter(Collider other) { InteractionTrigger interaction = other.GetComponent <InteractionTrigger>(); if (interaction != null) { AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_USE); order.InteractionObject = interaction; order.Position = order.InteractionObject.GetEntryTransform().position; order.Interaction = E_InteractionType.On; Owner.BlackBoard.OrderAdd(order); return; } }
void CreateOrderAttack(E_AttackType type) { AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_ATTACK); order.AttackType = type; //todo ... 移动方向或者正前方 order.Direction = Transform.forward; //todo ... 攻击动画信息 order.AnimAttackData = null; //todo ... 获取当前最佳攻击对象 order.Target = null; //todo ... 根据条件添加 Agent.BlackBoard.AddOrder(order); }
private void CreateOrderGoTo(Vector3 dir, float force) { if (CouldAddnewOrder() == false) { return; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_GOTO); order.Direction = dir; order.MoveSpeedModifier = force; Agent.BlackBoard.AddOrder(order); }
private void CreateOrderGoTo() { if (CouldAddnewOrder() == false) { return; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_GOTO); Owner.BlackBoard.CameraDirection = CameraBehaviour.Instance.lookAt; order.Direction = InputDirection; // Controls.Joystick.Direction; order.MoveSpeedModifier = 0.6f; //Controls.Joystick.Force; //Debug.Log("order.MoveSpeedModifier=" + order.MoveSpeedModifier); Owner.BlackBoard.OrderAdd(order); }
void CreateOrderGoto(Vector3 _moveDirection) { // Agent.BlackBoard.DesiredDirection = _moveDirection; // Agent.BlackBoard.DesiredPosition = Agent.Position; // AgentAction _action = AgentActionFactory.Create(AgentActionFactory.E_Type.E_Move); // Agent.BlackBoard.AddAction(_action); AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_GOTO); order.Direction = _moveDirection; order.MoveSpeedModifier = 1; order.Position = Agent.Position; Agent.BlackBoard.AddOrder(order); }
// 闪避动作 private void CreateOrderDodge() { if (Owner.BlackBoard.IsOrderAddPossible(AgentOrder.E_OrderType.E_DODGE) == false) { return; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_DODGE); order.Direction = Owner.Transform.forward; Owner.BlackBoard.OrderAdd(order); GetComponent <AnimComponent>().HandleAction(ActionFactory.Create(ActionFactory.E_Type.E_ROLL) as ActionRoll); // 清空连招 comboProgress.Clear(); ClearBufferedOrder(); // 清空画面显示 MainPanelCtrl.Instance.ComboProgressMessage(comboProgress); }
// 攻击动作 private void CreateOrderAttack(E_AttackType type) { if (CouldBufferNewOrder() == false && CouldAddnewOrder() == false) { // Debug.Log(Time.timeSinceLevelLoad + " attack order rejected, already buffered one "); return; } AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_ATTACK); order.Direction = Owner.Transform.forward; order.AnimAttackData = ProcessCombo(type); // 查找最优的目标对象 order.Target = GetBestTarget(false); if (CouldAddnewOrder()) { //Debug.Log("order " + (order.Target != null ? order.Target.name : "no target") + " " + order.AnimAttackData.AnimName); Owner.BlackBoard.OrderAdd(order); } else { //Debug.Log("order to queue " + (order.Target != null ? order.Target.name : "no target") + " " + order.AnimAttackData.AnimName); bufferedOrders.Enqueue(order); } ActionAttack attack = ActionFactory.Create(ActionFactory.E_Type.E_ATTACK) as ActionAttack; attack.Data = order.AnimAttackData; attack.AttackDir = Owner.Transform.forward; attack.Target = order.Target; Owner.BlackBoard.WeaponState = E_WeaponState.Ready; // currentAttackAction = attack; weaponStartTime = 0; GetComponent <AnimComponent>().HandleAction(attack); }
public void OrderAdd(AgentOrder order) { // Debug.Log(Time.timeSinceLevelLoad + " order arrived " + order.Type); if (IsOrderAddPossible(order.Type)) { Owner.WorldState.SetWSProperty(E_PropKey.E_ORDER, order.Type); switch (order.Type) { case AgentOrder.E_OrderType.E_STOPMOVE: Owner.WorldState.SetWSProperty(E_PropKey.E_AT_TARGET_POS, true); DesiredPosition = Owner.Position; break; case AgentOrder.E_OrderType.E_GOTO: Owner.WorldState.SetWSProperty(E_PropKey.E_AT_TARGET_POS, false); DesiredPosition = order.Position; DesiredDirection = order.Direction; MoveSpeedModifier = order.MoveSpeedModifier; break; case AgentOrder.E_OrderType.E_DODGE: DesiredDirection = order.Direction; // Debug.Log(Time.timeSinceLevelLoad + " order arrived " + order.Type); break; case AgentOrder.E_OrderType.E_USE: Owner.WorldState.SetWSProperty(E_PropKey.E_USE_WORLD_OBJECT, true); if ((order.Position - Owner.Position).sqrMagnitude <= 1) { Owner.WorldState.SetWSProperty(E_PropKey.E_AT_TARGET_POS, true); } else { Owner.WorldState.SetWSProperty(E_PropKey.E_AT_TARGET_POS, false); } DesiredPosition = order.Position; InteractionObject = order.InteractionObject; Interaction = order.Interaction; break; case AgentOrder.E_OrderType.E_ATTACK: if (order.Target == null || (order.Target.Position - Owner.Position).magnitude <= (WeaponRange + 0.2f)) { Owner.WorldState.SetWSProperty(E_PropKey.E_IN_WEAPONS_RANGE, true); } else { Owner.WorldState.SetWSProperty(E_PropKey.E_IN_WEAPONS_RANGE, false); } DesiredAttackType = order.AttackType; DesiredTarget = order.Target; DesiredDirection = order.Direction; DesiredAttackPhase = order.AnimAttackData; break; } // Debug.Log(Time.timeSinceLevelLoad + " order arrived " + order.Type); } else if (order.Type == AgentOrder.E_OrderType.E_ATTACK) { // Debug.Log(Time.timeSinceLevelLoad + " " +order.Type + " is nto allowed because " + currentOrder); } AgentOrderFactory.Return(order); }
private void CreateOrderStop() { AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_STOPMOVE); Owner.BlackBoard.OrderAdd(order); }
void CreateOrderStop() { AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_STOPMOVE); Agent.BlackBoard.AddOrder(order); }