private GameObject FindClosestTarget(PositionBehavior currentPosition, PreferedTarget targetPriority, List <UnitBasicProperties> inRangeTargets) { var tile = gameState.GetActiveTile(); var positions = tile.GetPositions(); var closestPlayers = new List <GameObject>(); var closestDistance = 20; foreach (var target in inRangeTargets) { if (targetPriority == PreferedTarget.Aggro && !target.hasAggroToken) { continue; } var position = tile.GetUnitPosition(target.gameObject); var distance = PathFinder.GetPath(currentPosition, position).Count; if (distance < closestDistance) { closestPlayers.Clear(); closestPlayers.Add(target.gameObject); closestDistance = distance; } else if (distance == closestDistance) { closestPlayers.Add(target.gameObject); } } if (!closestPlayers.Any()) { return(null); } var closestProperties = closestPlayers.Select(p => p.GetComponent <PlayerProperties>()).ToList(); if (closestProperties.Count == 1) { return(closestProperties.First().gameObject); } if (closestProperties.Count > 1) { var aggro = closestProperties.FirstOrDefault(p => p.hasAggroToken); if (aggro != null) { return(aggro.gameObject); } else { var taunt = closestProperties.OrderByDescending(p => p.initiative).First(); return(taunt.gameObject); } } return(null); }
private void ShowValidDirections(PositionBehavior currentPosition, PositionBehavior awayFromPosition = null) { if (awayFromPosition == null || currentPosition == awayFromPosition) { EnableAll(); } else { var currentDistance = PathFinder.GetPath(awayFromPosition, currentPosition).Count; var validCount = 0; if (currentPosition.NorthPosition != null && PathFinder.GetPath(awayFromPosition, currentPosition.NorthPosition.GetComponent <PositionBehavior>()).Count > currentDistance) { validCount++; NorthArrowBehavior.SetTarget(currentPosition.NorthPosition); } if (currentPosition.NorthEastPosition != null && PathFinder.GetPath(awayFromPosition, currentPosition.NorthEastPosition.GetComponent <PositionBehavior>()).Count > currentDistance) { validCount++; NorthEastArrowBehavior.SetTarget(currentPosition.NorthEastPosition); } if (currentPosition.EastPosition != null && PathFinder.GetPath(awayFromPosition, currentPosition.EastPosition.GetComponent <PositionBehavior>()).Count > currentDistance) { validCount++; EastArrowBehavior.SetTarget(currentPosition.EastPosition); } if (currentPosition.SouthEastPosition != null && PathFinder.GetPath(awayFromPosition, currentPosition.SouthEastPosition.GetComponent <PositionBehavior>()).Count > currentDistance) { validCount++; SouthEastArrowBehavior.SetTarget(currentPosition.SouthEastPosition); } if (currentPosition.SouthPosition != null && PathFinder.GetPath(awayFromPosition, currentPosition.SouthPosition.GetComponent <PositionBehavior>()).Count > currentDistance) { validCount++; SouthArrowBehavior.SetTarget(currentPosition.SouthPosition); } if (currentPosition.SouthWestPosition != null && PathFinder.GetPath(awayFromPosition, currentPosition.SouthWestPosition.GetComponent <PositionBehavior>()).Count > currentDistance) { validCount++; SouthWestArrowBehavior.SetTarget(currentPosition.SouthWestPosition); } if (currentPosition.WestPosition != null && PathFinder.GetPath(awayFromPosition, currentPosition.WestPosition.GetComponent <PositionBehavior>()).Count > currentDistance) { validCount++; WestArrowBehavior.SetTarget(currentPosition.WestPosition); } if (currentPosition.NorthWestPosition != null && PathFinder.GetPath(awayFromPosition, currentPosition.NorthWestPosition.GetComponent <PositionBehavior>()).Count > currentDistance) { validCount++; NorthWestArrowBehavior.SetTarget(currentPosition.NorthWestPosition); } if (validCount == 0) { EnableAll(); } } }
private void NotifyPositionSelected(PositionBehavior position) { if (PositionClicked != null) { var moveCommand = new UnitMovement() { MoveFrom = currentPosition, MoveTo = position ?? currentPosition, Unit = movingUnit.gameObject, }; EventManager.RaiseEvent(ObjectEventType.UnitMoved, moveCommand); PositionClicked(position); } }
// returns a world position public static Vector3 GetDesiredPositionForObject(AttachObject obj, PositionBehavior behavior, ParamSelector anchor1, ParamSelector anchor2) { switch (behavior) { case PositionBehavior.DoNothing: throw new System.InvalidOperationException("PositionBehavior is to do nothing"); // return obj.gameObject.transform.position; case PositionBehavior.Snap: return(GetSnapPosition(obj.attachable, obj.attachment, anchor1, anchor2, obj)); } throw new System.NotImplementedException("Position behavior not implemented."); }
public void SetupAndShow(UnitBasicProperties unit, MoveChoserType moveType, PositionBehavior awayFromPosition) { movingUnit = unit; DescriptionText.text = $"Choose {moveType.ToString()} {Environment.NewLine} Direction"; OcclusionBackground.SetActive(true); DescriptionText.gameObject.SetActive(true); var positions = GameStateManager.Instance.GetActiveTile().GetPositions(); currentPosition = positions.First(p => p.HasUnit(unit.gameObject)); ShowValidDirections(currentPosition, awayFromPosition); if (moveType == MoveChoserType.Shift) { NoneButton.SetActive(true); } }
private void MakePlayersFromBytes(byte[] data) { for (int x = 0; x < data.Length; x += 26) { var xPosition = BitConverter.ToSingle(data, x + 0); var yPosition = BitConverter.ToSingle(data, x + 4); var xSpeed = BitConverter.ToSingle(data, x + 8); var ySpeed = BitConverter.ToSingle(data, x + 12); PositionBehavior thisData = new PositionBehavior(xPosition, yPosition, xSpeed, ySpeed); var id = BitConverter.ToInt32(data, x + 16); var packetNumber = BitConverter.ToInt32(data, x + 20); if (id != this.id) { if (!otherPlayers.ContainsKey(id)) { var newObject = Instantiate(anotherPlayer); newObject.SetActive(true); var newInterpolator = new Interpolator(thisData); otherPlayers[id] = newObject; interpolators[id] = newInterpolator; LatestUpdate[id] = packetNumber; shouldDeleteOld[id] = 100; } else if (LatestUpdate[id] < packetNumber) { LatestUpdate[id] = packetNumber; shouldDeleteOld[id] = 100; interpolators[id].CalculateNewInterpolation(thisData); otherPlayers[id].GetComponent<Rigidbody>().position = interpolators[id].PositionAfterTime(0); } } } }
public void SetTarget(GameObject positionObject) { TargetPosition = positionObject != null?positionObject.GetComponent <PositionBehavior>() : null; }
public abstract List <UnitBasicProperties> FindTargetsInRange(UnitBasicProperties attacker, PositionBehavior attackerPosition, IEnumerable <PositionBehavior> positions);
public override List <UnitBasicProperties> FindTargetsInRange(UnitBasicProperties attacker, PositionBehavior attackerPosition, IEnumerable <PositionBehavior> positions) { var currentSide = attacker.side; var targetSide = currentSide == UnitSide.Hollow ? UnitSide.Player : UnitSide.Hollow; var targets = new List <UnitBasicProperties>(); foreach (var position in positions) { var potential = position.GetUnits(targetSide).ToList(); targets.AddRange(potential.Select(p => p.GetComponent <UnitBasicProperties>())); } return(targets); }
public List <UnitBasicProperties> FindTargetsOnNode(UnitBasicProperties attacker, PositionBehavior targetPosition, UnitBasicProperties originalTarget) { var currentSide = attacker.side; var targetSide = TargetAllies ? currentSide : currentSide == UnitSide.Hollow ? UnitSide.Player : UnitSide.Hollow; var targets = new List <UnitBasicProperties>(); if (NodeSplash) { targets = targetPosition.GetUnits(targetSide).Select(u => u.GetComponent <UnitBasicProperties>()).ToList(); } else { targets.Add(originalTarget); } return(targets); }
private List <UnitBasicProperties> FindTargetsInRangeInternal(UnitBasicProperties attacker, PositionBehavior attackerPosition, IEnumerable <PositionBehavior> positions, bool withShift) { var currentSide = attacker.side; var targetSide = TargetAllies ? currentSide : currentSide == UnitSide.Hollow ? UnitSide.Player : UnitSide.Hollow; var targets = new List <UnitBasicProperties>(); foreach (var position in positions) { var pathLength = PathFinder.GetPath(attackerPosition, position).Count; if (!InRange(pathLength, withShift)) { continue; } var potential = position.GetUnits(targetSide).ToList(); targets.AddRange(potential.Select(p => p.GetComponent <UnitBasicProperties>())); } return(targets); }
public List <UnitBasicProperties> FindTargetsInWeaponRange(UnitBasicProperties attacker, PositionBehavior attackerPosition, IEnumerable <PositionBehavior> positions) { return(FindTargetsInRangeInternal(attacker, attackerPosition, positions, false)); }