static CharacterPositions GetAllInCylinder(List <CharacterPosition> characterPositions, VectorDto volumeFloorCenter, float diameter, float height) { CharacterPositions result = new CharacterPositions(); Vector3 floorCenter = volumeFloorCenter.GetVector3(); Vector3 floorCenter2d = new Vector3(floorCenter.x, 0, floorCenter.z); float verticalSlop = 0.5f; // Amount above/below cylinder to include in the target. float floorY = volumeFloorCenter.y - verticalSlop; float ceilingY = floorY + height + verticalSlop; float radius = diameter / 2f; foreach (CharacterPosition characterPosition in characterPositions) { // TODO: Thinking about adding a "slop" to take creature size (radius & height) into account. bool inVerticalRange = characterPosition.Position.y >= floorY && characterPosition.Position.y <= ceilingY; if (inVerticalRange) { Vector3 position = characterPosition.Position.GetVector3(); Vector3 position2d = new Vector3(position.x, 0, position.z); Vector3 delta = position2d - floorCenter2d; float distanceFromCenter = delta.magnitude; if (distanceFromCenter < radius) { result.Characters.Add(characterPosition); } } } return(result); }
static CharacterPositions GetAllInCube(List <CharacterPosition> characterPositions, VectorDto volumeCenter, float sideEdgeLength) { CharacterPositions result = new CharacterPositions(); foreach (CharacterPosition characterPosition in characterPositions) { if (characterPosition.IsInsideCube(volumeCenter, sideEdgeLength)) { result.Characters.Add(characterPosition); } } return(result); }
static CharacterPositions GetAllInCircle(List <CharacterPosition> characterPositions, VectorDto volumeCenter, float diameter) { CharacterPositions result = new CharacterPositions(); foreach (CharacterPosition characterPosition in characterPositions) { if (characterPosition.IsInsideCircle(volumeCenter, diameter / 2.0f)) { result.Characters.Add(characterPosition); } } return(result); }
public static CharacterPositions GetPositions() { CreatureBoardAsset[] allCreatureAssets = GetAll(); if (allCreatureAssets == null) { return(null); } CharacterPositions characterPositions = new CharacterPositions(); foreach (CreatureBoardAsset creatureAsset in allCreatureAssets) { CharacterPosition characterPosition = creatureAsset.GetCharacterPosition(); characterPositions.Characters.Add(characterPosition); } return(characterPositions); }