Пример #1
0
    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);
    }
Пример #2
0
    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);
        }
    }
Пример #3
0
    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);
    }
Пример #4
0
    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;
        }
    }
Пример #5
0
    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);
    }
Пример #6
0
    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);
    }
Пример #7
0
    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);
    }
Пример #8
0
    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);
        }
    }
Пример #9
0
    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));
    }
Пример #10
0
    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);
    }
Пример #11
0
    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);
    }
Пример #12
0
    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;
        }
    }
Пример #13
0
    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);
    }
Пример #14
0
    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);
    }
Пример #15
0
    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);
    }
Пример #16
0
    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);
    }
Пример #17
0
    static public AgentOrder Create(AgentOrder.E_OrderType type)
    {
        AgentOrder o;

        if (m_UnusedOrders.Count > 0)
        {
            o      = m_UnusedOrders.Dequeue();
            o.Type = type;
        }
        else
        {
            o = new AgentOrder(type);
        }

        m_InAction.Add(o);
        return(o);
    }
Пример #18
0
    //  闪避动作
    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);
    }
Пример #19
0
    //  攻击动作
    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);
    }
Пример #20
0
    private void CreateOrderStop()
    {
        AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_STOPMOVE);

        Owner.BlackBoard.OrderAdd(order);
    }
Пример #21
0
        public ActionResult Checkout(OrderViewModel ovModel)
        {
            if (SessionHelper.GetObjectFromJson <List <CartItem> >(HttpContext.Session, "cart") == null)
            {
                return(RedirectToAction("Index", "Products"));
            }

            var customerChk = _context.Customers.Where(c => c.Email == ovModel.Order.Email);

            if (customerChk.ToList().Count < 1)
            {
                var cust = new Customer();
                cust.Name       = ovModel.Order.Name;
                cust.Email      = ovModel.Order.Email;
                cust.Phone      = ovModel.Customer.Phone;
                cust.DistrictId = ovModel.Order.DistrictId;
                _context.Customers.Add(cust);
                _context.SaveChanges();
                customer = cust;
            }
            else
            {
                customer = _context.Customers.Find(ovModel.Customer.Id);
            }

            var order = new Order
            {
                Name       = customer.Name,
                Email      = customer.Email,
                DistrictId = customer.DistrictId,
                //fixed portion
                ShippingAddress = ovModel.Order.ShippingAddress,
                PostalCode      = ovModel.Order.PostalCode,
                StreetNo        = ovModel.Order.StreetNo,
                CustomerId      = customer.Id,
                TotalPrice      = ovModel.TotalPrice,
                OrderDate       = DateTime.Now,
                AccountNo       = ovModel.Order.AccountNo,
                TransactionId   = ovModel.Order.TransactionId
            };

            _context.Orders.Add(order);
            _context.SaveChanges();


            var cartList = SessionHelper.GetObjectFromJson <List <CartItem> >(HttpContext.Session, "cart");

            ViewBag.total = cartList.Sum(c => c.Product.Price * c.Quantity);

            foreach (var item in cartList)
            {
                var order_product = new ProductOrder
                {
                    OrderId         = order.Id,
                    ProductId       = item.Product.Id,
                    NumberOfProduct = item.Quantity
                };

                _context.ProductOrders.Add(order_product);
                _context.SaveChanges();


                var quantity = _context.Products.Where(c => c.Id == item.Product.Id).SingleOrDefault();
                if (quantity != null)
                {
                    var pro = _context.Products.Find(item.Product.Id);
                    pro.ItemInStock = pro.ItemInStock - order_product.NumberOfProduct;

                    _context.Products.Update(pro);
                    _context.SaveChanges();
                }
            }
            //clear the session now
            HttpContext.Session.Clear();

            var agents = _context.Agents.Where(c => c.DistrictId == order.DistrictId).ToList();
            var random = new Random();
            var index  = random.Next(0, agents.Count);
            var agent  = agents[index];

            var agentorder = new AgentOrder
            {
                AgentId          = agent.Id,
                OrderId          = order.Id,
                IsPaid           = false,
                IsOnRoute        = false,
                IsFullyCompleted = false
            };

            _context.AgentOrders.Add(agentorder);
            _context.SaveChanges();



            TempData["orderSuccess"] = "Your order has been placed successfully!";
            return(RedirectToAction("Checkout"));
        }
Пример #22
0
    static public void Return(AgentOrder order)
    {
        m_UnusedOrders.Enqueue(order);

        m_InAction.Remove(order);
    }
Пример #23
0
    void CreateOrderStop()
    {
        AgentOrder order = AgentOrderFactory.Create(AgentOrder.E_OrderType.E_STOPMOVE);

        Agent.BlackBoard.AddOrder(order);
    }
Пример #24
0
    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);
    }
Пример #25
0
        public async Task <ActionResult> Checkout(OrderViewModel ovModel)
        {
            if (SessionHelper.GetObjectFromJson <List <CartItem> >(HttpContext.Session, "cart") == null)
            {
                return(RedirectToAction("Index", "Products"));
            }


            Customer customer        = new Customer();
            var      customerExisted = _context.Customers.Where(c => c.Email == ovModel.Order.Email).AsNoTracking().FirstOrDefault();

            if (customerExisted == null)
            {
                //nw user
                var user = new AppUser
                {
                    Email    = ovModel.Order.Email,
                    UserName = ovModel.Order.Email
                };
                var res = await _userManager.CreateAsync(user);

                if (res.Succeeded)
                {
                    var cust = new Customer
                    {
                        Id     = NumberUtilities.GetUniqueNumber(),
                        Name   = ovModel.Order.Name,
                        Email  = ovModel.Order.Email,
                        Phone  = ovModel.Customer.Phone,
                        UserId = user.Id
                    };
                    await _context.Customers.AddAsync(cust);

                    await _context.SaveChangesAsync();

                    customer = cust;
                }
            }
            else
            {
                customer = _context.Customers.Find(ovModel.Customer.Id);
            }

            var order = new Order
            {
                Id    = NumberUtilities.GetUniqueNumber(),
                Name  = customer.Name,
                Email = customer.Email,
                //fixed portion
                ShippingAddress = ovModel.Order.ShippingAddress,
                PostalCode      = ovModel.Order.PostalCode,
                StreetNo        = ovModel.Order.StreetNo,
                CustomerId      = customer.Id,
                TotalPrice      = ovModel.TotalPrice,
                OrderDate       = DateTime.Now,
                AccountNo       = ovModel.Order.AccountNo,
                TransactionId   = ovModel.Order.TransactionId
            };

            _context.Orders.Add(order);
            _context.SaveChanges();


            var cartList = SessionHelper.GetObjectFromJson <List <CartItem> >(HttpContext.Session, "cart");

            ViewBag.total = cartList.Sum(c => c.Product.Price * c.Quantity);

            foreach (var item in cartList)
            {
                var order_product = new ProductOrder
                {
                    Id              = NumberUtilities.GetUniqueNumber(),
                    OrderId         = order.Id,
                    ProductId       = item.Product.Id,
                    NumberOfProduct = item.Quantity
                };

                _context.ProductOrders.Add(order_product);
                _context.SaveChanges();


                var quantity = _context.Products.Where(c => c.Id == item.Product.Id).SingleOrDefault();
                if (quantity != null)
                {
                    var pro = _context.Products.Find(item.Product.Id);
                    pro.ItemInStock = pro.ItemInStock - order_product.NumberOfProduct;

                    _context.Products.Update(pro);
                    _context.SaveChanges();
                }
            }
            //clear the session now
            HttpContext.Session.Clear();

            var agents = _context.Agents.Where(c => c.User.DistrictId == customer.User.DistrictId).ToList();
            var random = new Random();
            var index  = random.Next(0, agents.Count);
            var agent  = agents[index];

            var agentorder = new AgentOrder
            {
                Id               = NumberUtilities.GetUniqueNumber(),
                AgentId          = agent.Id,
                OrderId          = order.Id,
                IsPaid           = false,
                IsOnRoute        = false,
                IsFullyCompleted = false
            };

            _context.AgentOrders.Add(agentorder);
            _context.SaveChanges();



            TempData["orderSuccess"] = "Your order has been placed successfully!";
            return(RedirectToAction("Checkout"));
        }