public void createAvailableMissionPanel(MissionDetails missionDetails) { //converts the string address to an integer array to be used with the sprite list int[] address = DestinationUtil.convertStringKeyToAddress(missionDetails.destinationDetails.destinationDefinition.address); //instantiating the new available mission panel and adding to the view Transform availablePanel = Instantiate(availableMissionPanel, Vector3.zero, Quaternion.identity).transform; availablePanel.SetParent(availableMissionView, false); //Set the panel title to something meaningful string title = missionDetails.missionDefinition.missionType.ToString() + " on " + missionDetails.destinationDetails.destinationDefinition.designation; availablePanel.Find("Title").GetComponent <Text>().text = title; //using the convert string address set all the address symbol images availablePanel.Find("Symbol1").GetComponent <Image>().sprite = symbolSprites[address[0]]; availablePanel.Find("Symbol2").GetComponent <Image>().sprite = symbolSprites[address[1]]; availablePanel.Find("Symbol3").GetComponent <Image>().sprite = symbolSprites[address[2]]; availablePanel.Find("Symbol4").GetComponent <Image>().sprite = symbolSprites[address[3]]; availablePanel.Find("Symbol5").GetComponent <Image>().sprite = symbolSprites[address[4]]; availablePanel.Find("Symbol6").GetComponent <Image>().sprite = symbolSprites[address[5]]; availablePanel.Find("Symbol7").GetComponent <Image>().sprite = symbolSprites[address[6]]; //converting the mission time to a more readable text System.TimeSpan time = System.TimeSpan.FromSeconds(missionDetails.missionTime); string missionTime = "Mission Time: "; missionTime += time.Days > 0 ? time.Days + "d " : ""; missionTime += time.Hours > 0 ? time.Hours + "h " : ""; missionTime += time.Minutes > 0 ? time.Minutes + "m " : ""; missionTime += time.Seconds > 0 ? time.Seconds + "s" : ""; //set the mission time text on the panel availablePanel.Find("MissionTime").GetComponent <Text>().text = missionTime; //set the pass rate text on the panel availablePanel.Find("PassRate").GetComponent <Text>().text = "Pass Chance: " + (missionDetails.passRate * 100) + "%"; //add a new listener to the selection button for the panel which calls the onMissionActivated function //passing in the mission details for this mission availablePanel.Find("SelectButton").GetComponent <Button>().onClick.AddListener(() => { onMissionActivated(missionDetails, availablePanel.gameObject); }); }
override protected BehaviorTreeResults Tick() { BehaviorVariableValue variableValue = tree.GetBehaviorVariableValue(BehaviorVariableName.String_LancePostAttackDestinationGUID); if (variableValue == null) { return(new BehaviorTreeResults(BehaviorNodeState.Failure)); } string destinationGUID = variableValue.StringVal; RoutePointGameLogic destination = DestinationUtil.FindDestinationByGUID(tree, destinationGUID); if (destination == null) { return(new BehaviorTreeResults(BehaviorNodeState.Failure)); } return(new BehaviorTreeResults(BehaviorNodeState.Success)); }
public void createActiveMissionPanel(int index) { //retrieve the active mission details using the team index ActiveMissionDetails activeMissionDetails = this.activeMissions.missions[index]; //converts the string address to an integer array to be used with the sprite list int[] address = DestinationUtil.convertStringKeyToAddress(activeMissionDetails.missionDetails.destinationDetails.destinationDefinition.address); //instantiating the new active mission panel and adding to the view Transform activePanel = Instantiate(activeMissionPanel, Vector3.zero, Quaternion.identity).transform; activePanel.SetParent(activeMissionView, false); //add and set up the active mission object ActiveMission activeMission = (ActiveMission)activePanel.gameObject.AddComponent(typeof(ActiveMission)); activeMission.initialise(activeMissionDetails); //Set the panel title to something meaningful string title = activeMissionDetails.missionDetails.missionDefinition.missionType.ToString() + " on " + activeMissionDetails.missionDetails.destinationDetails.destinationDefinition.designation; activePanel.Find("Title").GetComponent <Text>().text = title; //using the convert string address set all the address symbol images //possibly change this to be a new compoentn type for the class which sets the images up itself activePanel.Find("Symbol1").GetComponent <Image>().sprite = symbolSprites[address[0]]; activePanel.Find("Symbol2").GetComponent <Image>().sprite = symbolSprites[address[1]]; activePanel.Find("Symbol3").GetComponent <Image>().sprite = symbolSprites[address[2]]; activePanel.Find("Symbol4").GetComponent <Image>().sprite = symbolSprites[address[3]]; activePanel.Find("Symbol5").GetComponent <Image>().sprite = symbolSprites[address[4]]; activePanel.Find("Symbol6").GetComponent <Image>().sprite = symbolSprites[address[5]]; activePanel.Find("Symbol7").GetComponent <Image>().sprite = symbolSprites[address[6]]; //set the pass rate text on the panel activePanel.Find("PassRate").GetComponent <Text>().text = "Pass Chance: " + (activeMissionDetails.missionDetails.passRate * 100) + "%"; //add a new listener to the selection button for the panel which calls the onMissionActivated function //passing in the mission details for this mission activePanel.Find("SelectButton").GetComponent <Button>().onClick.AddListener(() => { onMissionCompleted(index, activePanel.gameObject); }); }
override protected BehaviorTreeResults Tick() { BehaviorVariableValue variableValue = tree.GetBehaviorVariableValue(destinationBVarName); if (variableValue == null) { return(new BehaviorTreeResults(BehaviorNodeState.Failure)); } string destinationGUID = variableValue.StringVal; RoutePointGameLogic destination = DestinationUtil.FindDestinationByGUID(tree, destinationGUID); if (destination == null) { return(new BehaviorTreeResults(BehaviorNodeState.Failure)); } float sprintDistance = Mathf.Max(unit.MaxSprintDistance, unit.MaxWalkDistance); if (waitForLance) { for (int lanceMemberIndex = 0; lanceMemberIndex < unit.lance.unitGuids.Count; ++lanceMemberIndex) { ITaggedItem item = unit.Combat.ItemRegistry.GetItemByGUID(unit.lance.unitGuids[lanceMemberIndex]); if (item == null) { continue; } AbstractActor lanceUnit = item as AbstractActor; if (lanceUnit == null) { continue; } float unitMoveDistance = Mathf.Max(lanceUnit.MaxWalkDistance, lanceUnit.MaxSprintDistance); sprintDistance = Mathf.Min(sprintDistance, unitMoveDistance); } } MoveType moveType = tree.GetBehaviorVariableValue(BehaviorVariableName.Bool_RouteShouldSprint).BoolVal ? MoveType.Sprinting : MoveType.Walking; unit.Pathing.UpdateAIPath(destination.Position, destination.Position, moveType); Vector3 offset = unit.Pathing.ResultDestination - unit.CurrentPosition; if (offset.magnitude > sprintDistance) { offset = offset.normalized * sprintDistance; } Vector3 destinationThisTurn = RoutingUtil.Decrowd(unit.CurrentPosition + offset, unit); destinationThisTurn = RegionUtil.MaybeClipMovementDestinationToStayInsideRegion(unit, destinationThisTurn); float destinationRadius = unit.BehaviorTree.GetBehaviorVariableValue(BehaviorVariableName.Float_RouteWaypointRadius).FloatVal; List <AbstractActor> unitsToWaitFor = new List <AbstractActor>(); if (waitForLance) { if (unit.lance != null) { for (int lanceGUIDIndex = 0; lanceGUIDIndex < unit.lance.unitGuids.Count; ++lanceGUIDIndex) { string guid = unit.lance.unitGuids[lanceGUIDIndex]; ITaggedItem item = unit.Combat.ItemRegistry.GetItemByGUID(guid); if (item != null) { AbstractActor lanceUnit = item as AbstractActor; if (lanceUnit != null) { unitsToWaitFor.Add(lanceUnit); } } } } else { unitsToWaitFor.Add(unit); } } if (RoutingUtil.AllUnitsInsideRadiusOfPoint(unitsToWaitFor, destination.Position, destinationRadius)) { tree.RemoveBehaviorVariableValue(destinationBVarName); } bool isSprinting = tree.GetBehaviorVariableValue(BehaviorVariableName.Bool_RouteShouldSprint).BoolVal; unit.Pathing.UpdateAIPath(destinationThisTurn, destination.Position, isSprinting ? MoveType.Sprinting : MoveType.Walking); destinationThisTurn = unit.Pathing.ResultDestination; float movementBudget = unit.Pathing.MaxCost; PathNodeGrid grid = unit.Pathing.CurrentGrid; Vector3 successorPoint = destination.Position; if ((grid.GetValidPathNodeAt(destinationThisTurn, movementBudget) == null) || ((destinationThisTurn - destination.Position).magnitude > 1.0f)) { // can't get all the way to the destination. if (unit.Combat.EncounterLayerData.inclineMeshData != null) { float maxSteepnessRatio = Mathf.Tan(Mathf.Deg2Rad * AIUtil.GetMaxSteepnessForAllLance(unit)); List <AbstractActor> lanceUnits = AIUtil.GetLanceUnits(unit.Combat, unit.LanceId); destinationThisTurn = unit.Combat.EncounterLayerData.inclineMeshData.GetDestination( unit.CurrentPosition, destinationThisTurn, movementBudget, maxSteepnessRatio, unit, isSprinting, lanceUnits, unit.Pathing.CurrentGrid, out successorPoint); } } Vector3 cur = unit.CurrentPosition; AIUtil.LogAI(string.Format("issuing order from [{0} {1} {2}] to [{3} {4} {5}] looking at [{6} {7} {8}]", cur.x, cur.y, cur.z, destinationThisTurn.x, destinationThisTurn.y, destinationThisTurn.z, successorPoint.x, successorPoint.y, successorPoint.z )); BehaviorTreeResults results = new BehaviorTreeResults(BehaviorNodeState.Success); MovementOrderInfo mvtOrderInfo = new MovementOrderInfo(destinationThisTurn, successorPoint); mvtOrderInfo.IsSprinting = isSprinting; results.orderInfo = mvtOrderInfo; results.debugOrderString = string.Format("{0} moving toward destination: {1} dest: {2}", this.name, destinationThisTurn, destination.Position); return(results); }