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); }
// 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); } } }