Esempio n. 1
0
 public SpaceTrackedPoint(Transform unityPosition, Transform trackerRoot, Transform headPosition)
 {
     m_unityPointOfView   = new SpacePoint();
     m_trackerPointOfView = new SpacePoint();
     m_headPointOfView    = new SpacePoint();
     SetPoint(unityPosition, trackerRoot, headPosition);
 }
Esempio n. 2
0
    private void DrawLineOf(Vector3[] lines, Color color, SpacePoint point)
    {
        if (point == null)
        {
            DrawLineOf(lines, color);
            return;
        }

        Vector3 start;
        Vector3 end;

        if (lines.Length > 1)
        {
            for (int i = 1; i < lines.Length; i++)
            {
                start = SpacePoint.GetRelocatedPosition(lines[i - 1], point);
                end   = SpacePoint.GetRelocatedPosition(lines[i], point);

                Debug.DrawLine(start, end, color, m_drawTime);
            }
        }
        start = SpacePoint.GetRelocatedPosition(lines[lines.Length - 1], point);
        end   = SpacePoint.GetRelocatedPosition(lines[0], point);

        Debug.DrawLine(start, end, color, m_drawTime);
    }
Esempio n. 3
0
    public void Launch(GameObject launchSite, int count)
    {
        // DebugScript = DebugCollider.GetComponent<DebugGameScript>();
        // DebugScript.Collider = Collider;
        MissileCount++;
        missileCommnandScript.MissileLaunched();
        TargetPoint = MousePosition.ToWorldSpace().ChangeZ(Z);
        MarkTarget(TargetPoint);

        var shape2d = gameObject.GetComponent <Shapes2D.Shape>();
        //shape2d.enabled = false;
        var spriteRenderer = gameObject.GetComponent <SpriteRenderer>();

        spriteRenderer.enabled = false;

        Vector3[] poses1 = new Vector3[2];
        lineRenderer.GetPositions(poses1);

        var pos = launchSite.transform.position;

        pos.z       = Z;
        LaunchPoint = new SpacePoint(Graphics.Space.World, pos);
        poses1[0]   = poses1[1] = LaunchPoint.Position;
        lineRenderer.SetPositions(poses1);
        Delta = Delta(LaunchPoint, TargetPoint);
        lineRenderer.enabled = true;
        tweener = Tweener2d.LinearTweener(LaunchPoint.Position, TargetPoint.Position, Velocity).GetEnumerator();
        State   = PlayerMissileState.Traveling;
    }
Esempio n. 4
0
    private void MarkTarget(SpacePoint targetPoint)
    {
        var worldPostion = targetPoint.Position;

        worldPostion.z = 0;

        TargetCross1 = Instantiate(TargetCross1, worldPostion, TargetCross1.transform.rotation);
        TargetCross2 = Instantiate(TargetCross2, worldPostion, TargetCross1.transform.rotation);

        var lr1 = TargetCross1.GetComponent <LineRenderer>();
        var lr2 = TargetCross2.GetComponent <LineRenderer>();

        Vector3[] poses1 = new Vector3[2];
        var       pos    = lr1.GetPositions(poses1);

        poses1[0] += worldPostion;
        poses1[1] += worldPostion;
        lr1.SetPositions(poses1);
        lr1.enabled = true;

        Vector3[] poses2 = new Vector3[2];
        pos        = lr2.GetPositions(poses2);
        poses2[0] += worldPostion;
        poses2[1] += worldPostion;
        lr2.SetPositions(poses2);
        lr2.enabled = true;
    }
Esempio n. 5
0
        private void AppendNewHead <T>(Dimension <T> dimension, SpacePoint <T> sp, float position)
        {
            var newHead = new DimensionPoint <T>(dimension)
            {
                Position = position
            };

            newHead.AddPoint(sp);
            newHead.HeadLink = new DimensionLink <T>(0, newHead);

            var oldHead = dimension.HeadDimPoint;

            dimension.HeadDimPoint = newHead;
            newHead.HeadLink.AssignNext(oldHead.HeadLink);

            var upper = oldHead.HeadLink.Upper;

            newHead.HeadLink.AssignUpper(upper);
            oldHead.HeadLink.Upper = null;
            newHead.TailLink       = oldHead.TailLink.Level == 0 ? newHead.HeadLink : oldHead.TailLink;
            oldHead.TailLink       = oldHead.HeadLink;

            _spaceManager.TryAddLevel(dimension);
            var toExtendUp = dimension.HeadDimPoint.HeadLink.NextUntil((n, i) => i == 1);

            while (_spaceManager.TryExtendUp(toExtendUp, out toExtendUp))
            {
                _spaceManager.TryAddLevel(dimension);
            }
        }
        public SpacePoint GetPoint(string query)
        {
            using (SQLiteConnection connection = new SQLiteConnection($"Data Source={App.DatabasePath}"))
            {
                SpacePoint point = null;
                try
                {
                    connection.Open();
                    SQLiteCommand    command = new SQLiteCommand(query, connection);
                    SQLiteDataReader reader  = command.ExecuteReader();

                    while (reader.Read())
                    {
                        double ra  = (double)reader["ra"];
                        double dec = (double)reader["dec"];
                        point = new SpacePoint(ra, dec);
                    }

                    connection.Close();
                } catch (SQLiteException exception)
                {
                    string ErrorMessage = $"Error Connecting to Database. Error: {exception.Message}";
                    Messenger.Default.Send(ErrorMessage, "DatabaseError");
                }
                return(point);
            }
        }
Esempio n. 7
0
    public void SetWith(Vector3 position, Quaternion rotation, Vector3 pointOfViewPosition, Quaternion pointOfViewRotation)
    {
        SpacePoint pointOfView = new SpacePoint(pointOfViewPosition, pointOfViewRotation);

        m_position = GetRelocatedPosition(position, pointOfView);
        m_rotation = GetRelocatedRotation(rotation, pointOfView);
    }
Esempio n. 8
0
        private static bool RemovePointFromDimensions <T>(SpacePoint <T> sp, int index)
        {
            var isRemoved = false;
            var dPoint    = sp.Dimensions[index];

            if (dPoint == null)
            {
                return(false);
            }
            if (dPoint.NumberPoints > 1)
            {
                if (dPoint.RemovePoint(sp))
                {
                    isRemoved = true;
                }
            }
            else
            {
                if (dPoint.RemovePoint(sp))
                {
                    if (RemoveDimensionPoint(dPoint))
                    {
                        isRemoved = true;
                    }
                }
            }

            sp.Dimensions[index] = null;

            return(isRemoved);
        }
Esempio n. 9
0
    public static SpacePoint GetRelocatedPoint(SpacePoint point, SpacePoint pointOfView)
    {
        SpacePoint result = new SpacePoint();

        result.m_position = GetRelocatedPosition(point.m_position, pointOfView);
        result.m_rotation = GetRelocatedRotation(point.m_rotation, pointOfView);
        return(result);
    }
Esempio n. 10
0
        bool ISpaceManager.TryFindFirstSpacePoint <T>(Space <T> space, out SpacePoint <T> point, params float[] dimensionPositions)
        {
            HashSet <SpacePoint <T> > set;

            _spaceManager.TryFindSpacePoints(space, out set, dimensionPositions);
            point = set.FirstOrDefault();
            return(point != null);
        }
Esempio n. 11
0
 public void SetPoint(Transform unityPosition, Transform trackerRoot, Transform headPosition)
 {
     m_unityPointOfView   = new SpacePoint();
     m_trackerPointOfView = new SpacePoint();
     m_headPointOfView    = new SpacePoint();
     m_unityPointOfView.SetWith(unityPosition);
     m_trackerPointOfView.SetWith(trackerRoot, trackerRoot);
     m_headPointOfView.SetWith(headPosition, headPosition);
 }
Esempio n. 12
0
        List <SpacePoint <T> > ISpaceManager.FindAllNearWhere <T>(SpacePoint <T> center, float within, IDimensionSelector dimSelector, Func <SpacePoint <T>, SpacePoint <T>, float, bool> where)
        {
            if (dimSelector == null)
            {
                dimSelector = DimensionSelector.Default;
            }

            var list = new List <SpacePoint <T> >();

            var centerDimPoint = center.Dimensions[dimSelector.MainDimensionIndex];
            var centerLink     = centerDimPoint.HeadLink;

            if (centerDimPoint.NumberPoints > 1)
            {
                foreach (var sp in centerDimPoint.SpaPoints.Where(p => p.ID != center.ID))
                {
                    var dictance = sp.DistanceTo(center, dimSelector);
                    if (dictance <= within && where (sp, center, dictance))
                    {
                        list.Add(sp);
                    }
                }
            }
            var centerPos = centerDimPoint.Position;
            var next      = centerLink.Next;

            while (next != null && (next.Position - centerPos).Abs() <= within)
            {
                foreach (var nextSpaPoint in next.DimPoint.SpaPoints)
                {
                    var dictance = nextSpaPoint.DistanceTo(center, dimSelector);
                    if (dictance <= within && where (nextSpaPoint, center, dictance))
                    {
                        list.Add(nextSpaPoint);
                    }
                }
                next = next.Next;
            }
            var prev = centerLink.Prev;

            while (prev != null && (prev.Position - centerPos).Abs() <= within)
            {
                foreach (var prevSpaPoint in prev.DimPoint.SpaPoints)
                {
                    var dictance = prevSpaPoint.DistanceTo(center, dimSelector);
                    if (dictance <= within && where (prevSpaPoint, center, dictance))
                    {
                        list.Add(prevSpaPoint);
                    }
                }
                prev = prev.Prev;
            }
            return(list);
        }
Esempio n. 13
0
        TAccumulate ISpaceManager.AggregateWithin <TSource, TAccumulate>(SpacePoint <TSource> center, TAccumulate seed, float within, IDimensionSelector dimSelector, Func <TAccumulate, SpacePoint <TSource>, SpacePoint <TSource>, float, TAccumulate> func)
        {
            if (dimSelector == null)
            {
                dimSelector = DimensionSelector.Default;
            }

            var centerDimPoint = center.Dimensions[dimSelector.MainDimensionIndex];
            var centerLink     = centerDimPoint.HeadLink;

            if (centerDimPoint.NumberPoints > 1)
            {
                foreach (var sp in centerDimPoint.SpaPoints.Where(p => p.ID != center.ID))
                {
                    var dictance = sp.DistanceTo(center, dimSelector);
                    if (dictance <= within)
                    {
                        seed = func(seed, sp, center, dictance);
                    }
                }
            }
            var centerPos = centerDimPoint.Position;
            var next      = centerLink.Next;

            while (next != null && (next.Position - centerPos).Abs() <= within)
            {
                foreach (var nextSpaPoint in next.DimPoint.SpaPoints)
                {
                    var dictance = nextSpaPoint.DistanceTo(center, dimSelector);
                    if (dictance <= within)
                    {
                        seed = func(seed, nextSpaPoint, center, dictance);
                    }
                }
                next = next.Next;
            }
            var prev = centerLink.Prev;

            while (prev != null && (prev.Position - centerPos).Abs() <= within)
            {
                foreach (var prevSpaPoint in prev.DimPoint.SpaPoints)
                {
                    var dictance = prevSpaPoint.DistanceTo(center, dimSelector);
                    if (dictance <= within)
                    {
                        seed = func(seed, prevSpaPoint, center, dictance);
                    }
                }
                prev = prev.Prev;
            }
            return(seed);
        }
Esempio n. 14
0
 public static SpacePoint<string> FindNearest(this ISpaceManager sm, SpacePoint<string> center, float within)
 {
     var pan = new PointNfo<string>(null, Single.MaxValue);
     return sm.AggregateWithin(center, pan, within, (aggr, curr, cen, dis) =>
     {
         if (dis < aggr.Distance)
         {
             aggr.Point = curr;
             aggr.Distance = dis;
         }
         return aggr;
     }).Point;
 }
Esempio n. 15
0
        bool ISpaceManager.RemovePoint <T>(SpacePoint <T> sp)
        {
            var isRemoved = true;

            for (var i = 0; i < sp.Dimensions.Length; ++i)
            {
                if (!RemovePointFromDimensions(sp, i))
                {
                    isRemoved = false;
                }
            }
            return(isRemoved);
        }
Esempio n. 16
0
        /// <summary>
        /// 从一条犯罪数据中计算出其高斯平面坐标
        /// </summary>
        /// <returns>空间的二维点</returns>
        public PointInfo ParseXY()
        {
            PointInfo  pt  = new PointInfo();
            SpacePoint spt = new SpacePoint();

            spt.B = CoorTran.Algorithm.D2R(latitude);
            spt.L = CoorTran.Algorithm.D2R(longitude);
            CoorTran.Algorithm.BL2xy(new EarthPara(), spt);
            pt.x       = spt.x;
            pt.y       = spt.y;
            pt.pointID = incident_id;
            return(pt);
        }
Esempio n. 17
0
        bool ISpaceManager.Reposition <T>(SpacePoint <T> sp, params float[] dimensionPositions)
        {
            MustBe.Equal(sp.Dimensions.Length, dimensionPositions.Length, () => "space.Dimensions.Length AND dimensionPositions.Length");
            byte r = 0;

            for (var d = 0; d < sp.Dimensions.Length; ++d)
            {
                if (_spaceManager.Reposition(sp.Dimensions[d].Dimension, sp, dimensionPositions[d]))
                {
                    ++r;
                }
            }
            return(r > 0);
        }
Esempio n. 18
0
        public static SpacePoint <string> FindNearest(this ISpaceManager sm, SpacePoint <string> center, float within)
        {
            var pan = new PointNfo <string>(null, Single.MaxValue);

            return(sm.AggregateWithin(center, pan, within, (aggr, curr, cen, dis) =>
            {
                if (dis < aggr.Distance)
                {
                    aggr.Point = curr;
                    aggr.Distance = dis;
                }
                return aggr;
            }).Point);
        }
Esempio n. 19
0
 void LaunchMissiles()
 {
     for (int i = 0; i < 4; i++)
     {
         var missile = Instantiate(EnemyMissile);
         //missile.SetActive(true);
         var missileScript = missile.GetComponent <EnemyMissile>();
         var launchX       = Random.Range(LaunchBounds.min.x, LaunchBounds.max.x);
         var targetX       = Random.Range(TargetBounds.min.x, TargetBounds.max.x);
         var launchPos     = new SpacePoint(Graphics.Space.World, new Vector3(launchX, LaunchBounds.center.y, Z));
         var targetPos     = new SpacePoint(Graphics.Space.World, new Vector3(targetX, TargetBounds.center.y, Z));
         missileScript.Launch(launchPos, targetPos);
         MissilesToLaunch--;
     }
 }
Esempio n. 20
0
 private void OnSpacePointMouseDown(Rectangle rect, SpacePoint <int> point, MouseButtonEventArgs e)
 {
     if (e.ChangedButton == MouseButton.Middle)
     {
         _manager.RemovePoint(point);
         DrawTree();
     }
     else if (e.ChangedButton == MouseButton.Left)
     {
         _dragged = new Dragged {
             Point = point, Rect = rect
         };
         return;
     }
     _dragged = null;
 }
Esempio n. 21
0
        bool ISpaceManager.Reposition <T>(SpacePoint <T> sp, float x, float y, float z)
        {
            MustBe.Equal(sp.Dimensions.Length, 3, () => "space.Dimensions.Length AND x,y,z");
            byte r = 0;

            if (_spaceManager.Reposition(sp.Dimensions[0].Dimension, sp, x))
            {
                ++r;
            }
            if (_spaceManager.Reposition(sp.Dimensions[1].Dimension, sp, y))
            {
                ++r;
            }
            if (_spaceManager.Reposition(sp.Dimensions[2].Dimension, sp, z))
            {
                ++r;
            }
            return(r > 0);
        }
Esempio n. 22
0
        SpacePoint <T> ISpaceManager.AddPoint <T>(Space <T> space, T data, params float[] dimensionPositions)
        {
            MustBe.NotNull(space, () => "space");
            MustBe.NotNull(dimensionPositions, () => "dimensionPositions");
            MustBe.Equal(dimensionPositions.Length, space.Dimensions.Length, () => "number of dimensions does not match the number of dimension positions passed when adding point to space");

            var sp = new SpacePoint <T>(space)
            {
                Value = data
            };

            if (dimensionPositions == null)
            {
                throw new ArgumentException("Expected dimension positions");
            }

            for (var i = 0; i < space.Dimensions.Length; ++i)
            {
                _spaceManager.AddPoint(space.Dimensions[i], sp, dimensionPositions[i]);
            }

            return(sp);
        }
Esempio n. 23
0
    public void Launch(SpacePoint launchPoint, SpacePoint targetPoint)
    {
        Start();
        Debug.Log($"Missile {MissileCount}");
        Debug.Log($"Target {targetPoint}");
        MissileCount++;
        LaunchPoint = launchPoint.ToWorldSpace();
        TargetPoint = targetPoint.ToWorldSpace();
        Distance    = Vector3.Distance(LaunchPoint.Position, TargetPoint.Position);
        Counter     = 0;

        Vector3[] poses = new Vector3[3];
        var       start = LaunchPoint.Position;

        lineRenderer.SetPosition(0, start);
        lineRenderer.SetPosition(1, start);
        Debug.Log("LineRenderer");

        Rigidbody.MovePosition(start);

        lineRenderer.enabled = true;
        gameObject.SetActive(true);
    }
Esempio n. 24
0
 public PointNfo(SpacePoint <T> point, float distance)
 {
     Point    = point;
     Distance = distance;
 }
 private void OnSpacePointMouseUp(Rectangle rect, SpacePoint<int> point, MouseButtonEventArgs e)
 {
 }
Esempio n. 26
0
 public static Quaternion GetRelocatedRotation(Quaternion rotation, SpacePoint pointOfView)
 {
     // To verify
     return(rotation * Quaternion.Inverse(pointOfView.m_rotation));
 }
Esempio n. 27
0
 private void OnSpacePointMouseUp(Rectangle rect, SpacePoint <int> point, MouseButtonEventArgs e)
 {
 }
Esempio n. 28
0
 List <SpacePoint <T> > ISpaceManager.FindAllNearWhere <T>(SpacePoint <T> center, float within, Func <SpacePoint <T>, SpacePoint <T>, float, bool> where)
 {
     return(((ISpaceManager)this).FindAllNearWhere <T>(center, within, null, where));
 }
 private void OnSpacePointMouseDown(Rectangle rect, SpacePoint<int> point, MouseButtonEventArgs e)
 {
     if (e.ChangedButton == MouseButton.Middle)
     {
         _manager.RemovePoint(point);
         DrawTree();
     }
     else if (e.ChangedButton == MouseButton.Left)
     {
         _dragged = new Dragged { Point = point, Rect = rect };
         return;
     }
     _dragged = null;
 }
Esempio n. 30
0
        bool ISpaceManager.AddPoint <T>(Dimension <T> dimension, SpacePoint <T> sp, float position)
        {
            if (dimension == null || sp == null)
            {
                return(false);
            }

            MustBe.Null(sp.Dimensions[dimension.Index], () => "space point already has assigned the dimension with index=" + dimension.Index);

            if (dimension.HeadDimPoint == null)
            {
                var dp = new DimensionPoint <T>(dimension)
                {
                    Position = position
                };
                dp.HeadLink = dp.TailLink = new DimensionLink <T>(0, dp);
                dp.AddPoint(sp);
                dimension.HeadDimPoint = dimension.TailDimPoint = dp;
                dimension.Count        = 1;
                return(true);
            }

            // try to find existing dimension point
            DimensionPoint <T> left;
            DimensionPoint <T> right;

            if (_spaceManager.TryFindDimensionPoint(dimension, position, out left, out right))
            {
                // if found add the space point to it
                return(left.AddPoint(sp));
            }
            // new head
            if (left == null)
            {
                AppendNewHead(dimension, sp, position);
                dimension.Count++;
                return(true);
            }
            // new tail
            if (right == null)
            {
                AppendNewTail(dimension, sp, position);
                dimension.Count++;
                return(true);
            }

            // new in between
            var newPoint = new DimensionPoint <T>(dimension)
            {
                Position = position
            };

            newPoint.AddPoint(sp);
            var newLink = new DimensionLink <T>(0, newPoint);

            newPoint.HeadLink = newLink;
            newPoint.TailLink = newLink;

            left.HeadLink.AssignNext(newLink);
            newLink.AssignNext(right.HeadLink);

            // for fast movers do not normalize the tree
            if (!sp.IsFastMover)
            {
                _spaceManager.TryAddLevel(dimension);
                var toExtendUp = newLink.GetSiblingExtensionCandidate();
                while (_spaceManager.TryExtendUp(toExtendUp, out toExtendUp))
                {
                    _spaceManager.TryAddLevel(dimension);
                }
            }
            dimension.Count++;
            return(true);
        }
Esempio n. 31
0
        bool ISpaceManager.Reposition <T>(Dimension <T> dimension, SpacePoint <T> sp, float position)
        {
            var point = sp.Dimensions[dimension.Index];

            var next = position;
            var prev = point.Position;

            // no move
            if (dimension.Eq(prev, next))
            {
                return(false);
            }

            if (next < prev)
            {
                if (point.NumberPoints > 1)
                {
                    if (RemovePointFromDimensions(sp, dimension.Index))
                    {
                        sp.Dimensions[dimension.Index] = null;
                        _spaceManager.AddPoint(dimension, sp, next);
                    }
                }
                else
                {
                    var link = point.HeadLink;
                    if (link.Prev == null || link.Prev.DimPoint.Position < next)
                    {
                        point.Position = next;
                    }
                    else
                    {
                        if (RemovePointFromDimensions(sp, dimension.Index))
                        {
                            sp.Dimensions[dimension.Index] = null;
                            _spaceManager.AddPoint(dimension, sp, next);
                        }
                    }
                }
            }
            else // THIS IS: if (prev < next)
            {
                if (point.NumberPoints > 1)
                {
                    if (RemovePointFromDimensions(sp, dimension.Index))
                    {
                        sp.Dimensions[dimension.Index] = null;
                        _spaceManager.AddPoint(dimension, sp, next);
                    }
                }
                else
                {
                    var link = point.HeadLink;
                    if (link.Next == null || link.Next.DimPoint.Position > next)
                    {
                        point.Position = next;
                    }
                    else
                    {
                        if (RemovePointFromDimensions(sp, dimension.Index))
                        {
                            sp.Dimensions[dimension.Index] = null;
                            _spaceManager.AddPoint(dimension, sp, next);
                        }
                    }
                }
            }

            return(true);
        }
Esempio n. 32
0
 bool ISpaceManager.Any <T>(SpacePoint <T> center, float within, Func <SpacePoint <T>, SpacePoint <T>, float, bool> where)
 {
     return(((ISpaceManager)this).Any(center, within, null, where));
 }
Esempio n. 33
0
 TAccumulate ISpaceManager.AggregateWithin <TSource, TAccumulate>(SpacePoint <TSource> center, TAccumulate seed, float within, Func <TAccumulate, SpacePoint <TSource>, SpacePoint <TSource>, float, TAccumulate> func)
 {
     return(((ISpaceManager)this).AggregateWithin(center, seed, within, null, func));
 }