/// <summary> /// Used for debugging geometry vision and is responsible for drawing debugging info from the data providid by /// GeometryVision plugin /// </summary> private void OnDrawGizmos() { Gizmos.color = Color.green; if (geoVision == null) { geoVision = GetComponent <GeometryVision>(); } if (Selection.activeTransform == this.transform) { DrawHelper(); } void DrawHelper() { Handles.zTest = UnityEngine.Rendering.CompareFunction.LessEqual; Handles.color = Color.green; Vector3 resetToVector = Vector3.zero; if (geoVision == null) { geoVision = GetComponent <GeometryVision>(); return; } var geoVisionTransform = geoVision.transform; DrawTargetingVisualIndicators(geoVisionTransform.position, geoVision.ForwardWorldCoordinate, Color.green); var position = geoVision.transform.position; var forward = position + geoVision.transform.forward * maxDistance; var up = geoVisionTransform.up; var borderUp = Vector3.Scale(up, new Vector3(radius, radius, radius)); var right = geoVisionTransform.right; var borderRight = Vector3.Scale(right, new Vector3(radius, radius, radius)); var borderLeft = Vector3.Scale(-right, new Vector3(radius, radius, radius)); var borderDown = Vector3.Scale(-up, new Vector3(radius, radius, radius)); DrawTargetingVisualIndicators(forward + borderRight, position + borderRight, Color.green); DrawTargetingVisualIndicators(forward + borderLeft, position + borderLeft, Color.green); DrawTargetingVisualIndicators(forward + borderUp, position + borderUp, Color.green); DrawTargetingVisualIndicators(forward + borderDown, position + borderDown, Color.green); Handles.DrawWireArc(forward, geoVisionTransform.forward, right, 360, radius); Handles.DrawWireArc(position, geoVisionTransform.forward, right, 360, radius); void DrawTargetingVisualIndicators(Vector3 spherePosition, Vector3 lineStartPosition, Color color) { Gizmos.color = color; Gizmos.DrawLine(lineStartPosition, spherePosition); } } }
public NativeArray <GeometryDataModels.Target> GetTargetsAsNativeArray(Vector3 rayLocation, Vector3 rayDirection, GeometryVision geometryVision, TargetingInstruction targetingInstruction) { geoVision = geometryVision; this.rayLocation = rayLocation; this.rayDirectionWS = rayDirection; this.entityFilterComponent = targetingInstruction.GetCurrentEntityFilterType(); Update(); return(this.targets); }
List <GeometryDataModels.Target> IGeoTargeting.GetTargets(Vector3 rayLocation, Vector3 rayDirection, GeometryVision geometryVision, TargetingInstruction targetingInstruction) { geoVision = geometryVision; this.rayLocation = rayLocation; this.rayDirectionWS = rayDirection; this.entityFilterComponent = targetingInstruction.GetCurrentEntityFilterType(); Update(); return(this.targets.ToList()); }
// Start is called before the first frame update void Start() { cachedTransform = transform; if (cachedTransform.parent != null) { geoVision = cachedTransform.parent.GetComponent <GeometryVision>(); } cachedTransform.parent = null; particleSystem = GetComponent <ParticleSystem>(); }
// Start is called before the first frame update void Start() { cachedTransform = transform; if (transform.parent != null) { geoVision = transform.parent.GetComponent<GeometryVision>(); } transform.parent = null; cachedTransform.position = geoVision.GetClosestTarget().position; this.GetComponent<ParticleSystem>().Play(); }
// Start is called before the first frame update void Start() { GetGeometricVisionFromParentAndUnParent(); currentTarget = geoVision.GetClosestTarget(); lineRenderer = GetComponent <LineRenderer>(); void GetGeometricVisionFromParentAndUnParent() { if (transform.parent != null) { geoVision = transform.parent.GetComponent <GeometryVision>(); } transform.parent = null; } }
List <GeometryDataModels.Target> IGeoTargeting.GetTargets(Vector3 rayLocation, Vector3 rayDirectionWS, GeometryVision geoVision, TargetingInstruction targetingInstruction) { GeometryDataModels.Target targetInfo = new GeometryDataModels.Target(); List <GeometryDataModels.Target> gameObjectTargets = new List <GeometryDataModels.Target>(); if (targetingInstruction.TargetTag.Length > 0) { foreach (var geoInfoAsTarget in geoVision.GetEye <GeometryVisionEye>().SeenGeoInfos) { if (geoInfoAsTarget.gameObject.CompareTag(targetingInstruction.TargetTag)) { gameObjectTargets.Add(GetDataForTarget(geoInfoAsTarget)); } } } else { foreach (var geoInfoAsTarget in geoVision.GetEye <GeometryVisionEye>().SeenGeoInfos) { gameObjectTargets.Add(GetDataForTarget(geoInfoAsTarget)); } } return(gameObjectTargets); //Local functions GeometryDataModels.Target GetDataForTarget(GeometryDataModels.GeoInfo geoInfoAsTarget) { float3 point = geoInfoAsTarget.transform.position; float3 rayDirectionEndPoint = rayDirectionWS; point = pointToRaySpace(rayLocation, point); rayDirectionEndPoint = pointToRaySpace(rayLocation, rayDirectionWS); targetInfo.projectedTargetPosition = Vector3.Project(point, rayDirectionEndPoint) + rayLocation; targetInfo.position = pointFromRaySpaceToObjectSpace(point, rayLocation); targetInfo.distanceToRay = Vector3.Distance(targetInfo.position, targetInfo.projectedTargetPosition); targetInfo.distanceToCastOrigin = Vector3.Distance(rayLocation, targetInfo.projectedTargetPosition); targetInfo.GeoInfoHashCode = geoInfoAsTarget.GetHashCode(); return(targetInfo); } }
/// <summary> /// Used to check, if things inside scene has changed. Like if new object has been removed or moved. /// This trigger re fetch for desired transforms and objects /// </summary> public void CheckSceneChanges(GeometryVision geoVision) { SceneManager.GetActiveScene().GetRootGameObjects(RootObjects); var currentObjectCount = CountObjectsInHierarchy(RootObjects); UpdateSceneChanges(currentObjectCount); void UpdateSceneChanges(int currentObjectCountIn) { if (currentObjectCountIn != lastCount || geoVision.TargetingInstructions[0].TargetTag != currentTag) { currentTag = geoVision.TargetingInstructions[0].TargetTag; if (geoVision.TargetingInstructions[0].TargetTag.Length == 0) { UpdateSceneTransforms(RootObjects); void UpdateSceneTransforms(List <GameObject> rootObjects) { this.allTransforms = GetTransformsFromRootObjects(rootObjects, this.allTransforms); } } else { this.allTransforms = new HashSet <Transform>(GameObject .FindGameObjectsWithTag(geoVision.TargetingInstructions[0].TargetTag).ToList() .Select(go => go.transform).ToList()); } lastCount = currentObjectCountIn; CreateGeoInfoObjects(allTransforms, geoVision.Runner.GeoMemory.GeoInfos, geoVision.TargetingInstructions, geoVision.CollidersTargeted, geoVision.UseBounds); } } }
public NativeArray <GeometryDataModels.Target> GetTargetsAsNativeArray(Vector3 rayLocation, Vector3 rayDirection, GeometryVision geometryVision, TargetingInstruction targetingInstruction) { throw new System.NotImplementedException(); }
/// <summary> /// Used to check, if things inside scene has changed. Like if new object has been removed or moved. /// </summary> public void CheckSceneChanges(GeometryVision geoVision) { this.GeoVision = geoVision; Update(); }
private void Start() { geoVision = GetComponent <GeometryVision>(); }
public NativeArray <GeometryDataModels.Target> GetTargets(Vector3 rayLocation, Vector3 rayDirectionWS, GeometryVision geometryVision, List <GeometryDataModels.GeoInfo> targets) { List <GeometryDataModels.Target> targetInfos = new List <GeometryDataModels.Target>(); targetInfos = GetProjectionDataForTargets(rayLocation, rayDirectionWS, targets, targetInfos); return(new NativeList <GeometryDataModels.Target>()); //targetInfos; }
// Update is called once per frame void Update() { if (geoVision == null) { geoVision = GetComponent <GeometryVision>(); return; } var target = geoVision.GetClosestTarget(); if (target.isEntity) { AssignEntityName(); void AssignEntityName() { if (World.DefaultGameObjectInjectionWorld.EntityManager.HasComponent <Name>(target.entity)) { text.text = World.DefaultGameObjectInjectionWorld.EntityManager .GetComponentData <Name>(target.entity).Value.ToString(); } else { text.text = "Unknown"; } } } else { AssignGameObjectsName(); void AssignGameObjectsName() { var go = geoVision.GetGeoInfoBasedOnHashCode(target.GeoInfoHashCode); if (go.gameObject) { if (text != null) { text.text = geoVision.GetGeoInfoBasedOnHashCode(target.GeoInfoHashCode).gameObject.name; } } } } AnimateSimpleTargetIndicator(); void AnimateSimpleTargetIndicator() { if (target.distanceToCastOrigin > 0) { if (Vector3.Distance(this.transform.position, target.projectedTargetPosition) < maxDistance && Vector3.Distance(target.projectedTargetPosition, target.position) < radius) { spawnedTargetingIndicator.transform.position = target.position; spawnedTargetingIndicator.transform.LookAt(this.transform); } else { //move targeting cursor out of sight spawnedTargetingIndicator.transform.position = new Vector3(0f, -100f, 0f); } } } CleanUpTargetingIndicatorWhenThereAreNoTargets(); void CleanUpTargetingIndicatorWhenThereAreNoTargets() { if (geoVision.GetClosestTargetCount() == 0) { //move targeting cursor out of sight spawnedTargetingIndicator.transform.position = new Vector3(0f, -100f, 0f); } } }
// Start is called before the first frame update void Start() { geoVision = GetComponent <GeometryVision>(); spawnedTargetingIndicator = GameObject.Instantiate(targetingIndicator); text = spawnedTargetingIndicator.GetComponentInChildren <TextMesh>(); }