コード例 #1
0
        public async Task DragTo(string screenId, int x, int y)
        {
            var mosaicStore = _mosaicStoreManager.MosaicStore;

            //await Log($"[DragTo][Origin] ScreenId {screenIdToHuman} > Location x:{x} y:{y}");
            var mosaic  = mosaicStore.GetByScreenId(screenId);
            var element = new Element(80, 80);

            element.Move(x, y);

            //Location
            var mosaicLocation  = mosaic.WhereAreYou(element, mosaic.GetItem(screenId).Screen);
            var elementInMosaic = new Element(80, 80);

            elementInMosaic.Move(mosaicLocation.X, mosaicLocation.Y);
            var screenIdToHuman = GuidHelper.Shorter(screenId);

            await Log($"[DragTo][Origin] ScreenId {screenIdToHuman} > Location x:{x} y:{y} > Mosaic Location x:{mosaicLocation.X} y:{mosaicLocation.Y}");

            foreach (var item in mosaic.Items)
            {
                var locationInScreen = mosaic.MosaicToScreenLocation(elementInMosaic, item.Screen);
                await Log($"[DragTo] Screen > {item.Screen.Id} > Location x:{ locationInScreen.X} y: { locationInScreen.Y}");

                if (Context.ConnectionId != item.Screen.ConnectionId.ToString())
                {
                    //Only Screen in...
                    var moveToItem = new MoveToItem()
                    {
                        ScreenIdOrigin = screenId,
                        X = locationInScreen.X,
                        Y = locationInScreen.Y
                    };
                    await Clients.Client(item.Screen.ConnectionId.ToString()).SendAsync("dragTo", moveToItem);
                }
            }

            //foreach (var s in screens)
            //{
            //    var locationInScreen = MosaicApp.Mosaic.MosaicToScreenLocation(elementInMosaic, s);
            //    await Log($"[WhereAreYou] Screen > {s.Id} > Location x:{ locationInScreen.X} y: { locationInScreen.Y}");

            //    //var item = MosaicApp.Mosaic.GetItem(s);

            //    if (Context.ConnectionId != s.ConnectionId.ToString())
            //    {

            //        //await Log($"[DragTo] ScreenId {screenIdToHuman} > Location x:{locationInScreen.X} y:{locationInScreen.Y}");

            //        //Only Screen in...
            //        await Clients.Client(s.ConnectionId.ToString()).InvokeAsync("dragTo", locationInScreen.X, locationInScreen.Y);

            //    }

            //}

            //await Clients.AllExcept(new List<string> { Context.ConnectionId }).InvokeAsync("dragTo", x, y);
        }
コード例 #2
0
    // Use this for initialization
    void Start()
    {
        graph = GameObject.FindObjectsOfType <PathNode> ();

        for (int i = 0; i < 4; i++)
        {
            RunAllTask rootTask = new RunAllTask();

            /******* Attack ******/
            Sequence attackSequence = new Sequence();

            AquireTargetPriority aquireTargetNode = new AquireTargetPriority();
            //PredictAim predictAimNode = new PredictAim();
            ChooseWeapon chooseWeapon = new ChooseWeapon();
            AttackTarget attackNode   = new AttackTarget();

            attackSequence.AddTask(aquireTargetNode);
            //attackSequence.AddTask(predictAimNode);
            attackSequence.AddTask(chooseWeapon);
            attackSequence.AddTask(attackNode);

            /****** Movement *******/
            Selector movementSelector = new Selector();

            /****** Flee *******/
            Sequence fleeSequence = new Sequence();

            FindFleeDirection findFleeNode = new FindFleeDirection();
            Flee fleeNode = new Flee();

            fleeSequence.AddTask(findFleeNode);
            fleeSequence.AddTask(fleeNode);

            /****** Pickups ******/
            Selector       pickupSelector     = new Selector();
            MoveToItem     moveToItemNode     = new MoveToItem();
            PickupItem     pickupItemNode     = new PickupItem();
            Sequence       pickupSequence     = new Sequence();
            Selector       choosePickup       = new Selector();
            NeedAmmo       needAmmoNode       = new NeedAmmo();
            NeedHealth     needHealthNode     = new NeedHealth();
            FindPathToItem findPathToItemNode = new FindPathToItem();

            choosePickup.AddTask(needHealthNode);
            choosePickup.AddTask(needAmmoNode);

            pickupSequence.AddTask(choosePickup);
            pickupSequence.AddTask(findPathToItemNode);

            pickupSelector.AddTask(moveToItemNode);
            pickupSelector.AddTask(pickupItemNode);
            pickupSelector.AddTask(pickupSequence);

            movementSelector.AddTask(pickupSelector);
            movementSelector.AddTask(fleeSequence);



            // Add sequences to root
            rootTask.AddTask(attackSequence);
            rootTask.AddTask(movementSelector);
            //rootTask.AddTask(pickupSelector);

            if (i == 0)
            {
                Blackboard bd = new Blackboard(Francis, graph);
                bd.fleeDistance = 10.0f;
                FrancisBT       = new BehaviorTree(rootTask, bd);
            }
            else if (i == 1)
            {
                Blackboard bd = new Blackboard(Zoey, graph);
                bd.fleeDistance = 10.0f;
                ZoeyBT          = new BehaviorTree(rootTask, bd);
            }
            else if (i == 2)
            {
                Blackboard bd = new Blackboard(Bill, graph);
                bd.fleeDistance = 10.0f;
                BillBT          = new BehaviorTree(rootTask, bd);
            }
            else
            {
                Blackboard bd = new Blackboard(Louis, graph);
                bd.fleeDistance = 10.0f;
                LouisBT         = new BehaviorTree(rootTask, bd);
            }
        }
    }