示例#1
0
        /// <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());
        }
示例#4
0
        // 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>();
        }
示例#5
0
        // 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();
        }
示例#6
0
        // 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;
            }
        }
示例#7
0
        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);
            }
        }
示例#8
0
        /// <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);
                }
            }
        }
示例#9
0
 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();
 }
示例#11
0
 private void Start()
 {
     geoVision = GetComponent <GeometryVision>();
 }
示例#12
0
        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;
        }
示例#13
0
        // 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);
                }
            }
        }
示例#14
0
 // Start is called before the first frame update
 void Start()
 {
     geoVision = GetComponent <GeometryVision>();
     spawnedTargetingIndicator = GameObject.Instantiate(targetingIndicator);
     text = spawnedTargetingIndicator.GetComponentInChildren <TextMesh>();
 }