Example #1
0
        private static void ParseTracks(GpxFile xml, GpsData data)
        {
            if (xml.trk != null)
            {
                foreach (var trkType in xml.trk)
                {
                    var track = new Track();

                    track.Metadata.Attribute(x => x.Name, trkType.name);
                    track.Metadata.Attribute(x => x.Description, trkType.desc);
                    track.Metadata.Attribute(x => x.Comment, trkType.cmt);

                    foreach (var trksegTrkpt in trkType.trkseg.Where(seg => seg.trkpt != null))
                    {
                        var segment = new TrackSegment();
                        foreach (var wptType in trksegTrkpt.trkpt)
                        {
                            segment.Waypoints.Add(ConvertWaypoint(wptType));
                        }
                        track.Segments.Add(segment);
                    }
                    data.Tracks.Add(track);
                }
            }
        }
Example #2
0
    public override void Spawn(TrackSegment segment, float t)
    {
        //the tutorial very firts barricade need to be center and alone, so player can swipe safely in bother direction to avoid it
        bool isTutorialFirst = TrackManager.instance.isTutorial && TrackManager.instance.segments.Count == 0;

        int count     = isTutorialFirst ? 1 : Random.Range(k_MinObstacleCount, k_MaxObstacleCount + 1);
        int startLane = isTutorialFirst ? 0 : Random.Range(k_LeftMostLaneIndex, k_RightMostLaneIndex + 1);

        Vector3    position;
        Quaternion rotation;

        segment.GetPointAt(t, out position, out rotation);

        for (int i = 0; i < count; ++i)
        {
            int lane = startLane + i;
            lane = lane > k_RightMostLaneIndex ? k_LeftMostLaneIndex : lane;

            GameObject obj = Instantiate(gameObject, position, rotation);
            obj.transform.position += obj.transform.right * lane * segment.manager.laneOffset;

            obj.transform.SetParent(segment.objectRoot, true);

            //TODO : remove that hack related to #issue7
            Vector3 oldPos = obj.transform.position;
            obj.transform.position += Vector3.back;
            obj.transform.position  = oldPos;
        }
    }
Example #3
0
    public void SpawnObstacle(TrackSegment segment)
    {
        if (segment.possibleObstacles.Length != 0)
        {
            for (int i = 0; i < segment.obstaclePositions.Length; ++i)
            {
                Obstacle newObstacle = segment.possibleObstacles[Random.Range(0, segment.possibleObstacles.Length)];
                if (!AICharacterController.isVerticalMovementEnabled)
                {
                    // TODO fix pls
                    while (newObstacle is AllLaneObstacle)
                    {
                        newObstacle = segment.possibleObstacles[Random.Range(0, segment.possibleObstacles.Length)];
                    }
                }

                if (newObstacle is Missile ||
                    newObstacle is PatrollingObstacle)
                {
                    return;
                }
                newObstacle.Spawn(segment, segment.obstaclePositions[i]);
            }
        }

        SpawnCoinAndPowerup(segment);
    }
Example #4
0
        private bool ParseFix(string line, TrackSegment trackSegment, DateTime date)
        {
            if (string.IsNullOrWhiteSpace(line))
            {
                return(false);
            }

            var match = Regex.Match(line, B_LINE_REGEX);

            if (match.Success)
            {
                string h        = match.Groups["h"].Value;
                string m        = match.Groups["m"].Value;
                string s        = match.Groups["s"].Value;
                string coord    = match.Groups["coord"].Value;
                string validAlt = match.Groups["validAlt"].Value;
                string presAlt  = match.Groups["presAlt"].Value;
                string gpsAlt   = match.Groups["gpsAlt"].Value;

                var cood = ParseCoordinate(coord);
                var fix  = new Fix(cood.Latitude, cood.Longitude, double.Parse(gpsAlt), date.AddHours(int.Parse(h)).AddMinutes(int.Parse(m)).AddSeconds(int.Parse(s)));

                trackSegment.Fixes.Add(fix);
                return(true);
            }
            return(false);
        }
Example #5
0
        private bool ParseFix(string line, TrackSegment trackSegment)
        {
            if (string.IsNullOrWhiteSpace(line))
            {
                return(false);
            }

            var match = Regex.Match(line, FIX_SENTENCE);

            if (match.Success)
            {
                int    h   = int.Parse(match.Groups["h"].Value, CultureInfo.InvariantCulture);
                int    m   = int.Parse(match.Groups["m"].Value, CultureInfo.InvariantCulture);
                double s   = double.Parse(match.Groups["s"].Value, CultureInfo.InvariantCulture);
                double alt = double.Parse(match.Groups["alt"].Value, CultureInfo.InvariantCulture);
                double lat = ConvertOrd(match.Groups["lat"].Value, match.Groups["latd"].Value);
                double lon = ConvertOrd(match.Groups["lon"].Value, match.Groups["lond"].Value);

                var waypoint = new Waypoint(lat, lon, alt, DateTime.MinValue.AddHours(h).AddMinutes(m).AddSeconds(s));
                trackSegment.Waypoints.Add(waypoint);

                return(true);
            }
            return(false);
        }
Example #6
0
        private bool ParseFix(string line, TrackSegment trackSegment)
        {
            if (line.IsNullOrWhitespace())
            {
                return(false);
            }

            var match = Regex.Match(line, FIX_SENTENCE);

            if (match.Success)
            {
                int    h   = int.Parse(match.Groups["h"].Value);
                int    m   = int.Parse(match.Groups["m"].Value);
                double s   = double.Parse(match.Groups["s"].Value);
                double alt = double.Parse(match.Groups["alt"].Value);
                double lat = ConvertOrd(match.Groups["lat"].Value, match.Groups["latd"].Value);
                double lon = ConvertOrd(match.Groups["lon"].Value, match.Groups["lond"].Value);

                var fix = new Fix(lat, lon, alt, DateTime.MinValue.AddHours(h).AddMinutes(m).AddSeconds(s));
                trackSegment.Fixes.Add(fix);

                return(true);
            }
            return(false);
        }
Example #7
0
        public GpsData DeSerialize(StreamWrapper streamWrapper)
        {
            var data         = new GpsData();
            var trackSegment = new TrackSegment();

            streamWrapper.Position = 0;
            using (var reader = new StreamReader(streamWrapper))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (ParseFix(line, trackSegment))
                    {
                        continue;
                    }
                    if (ParseWaypoint(line, data))
                    {
                        continue;
                    }
                }
            }

            if (!trackSegment.IsEmpty())
            {
                data.Tracks.Add(new Track());
                data.Tracks[0].Segments.Add(trackSegment);
            }
            return(data);
        }
    public void StartGame()
    {
        canvas.gameObject.SetActive(true);
        pauseMenu.gameObject.SetActive(false);
        wholeUI.gameObject.SetActive(true);
        pauseButton.gameObject.SetActive(!trackManager.isTutorial);
        gameOverPopup.SetActive(false);

        sideSlideTuto.SetActive(false);
        upSlideTuto.SetActive(false);
        downSlideTuto.SetActive(false);
        finishTuto.SetActive(false);
        tutorialValidatedObstacles.gameObject.SetActive(false);

        if (!trackManager.isRerun)
        {
            m_TimeSinceStart = 0;
            trackManager.characterController.currentLife = trackManager.characterController.maxLife;
        }

        currentModifier.OnRunStart(this);

        m_IsTutorial            = !PlayerData.instance.tutorialDone;
        trackManager.isTutorial = m_IsTutorial;

        if (m_IsTutorial)
        {
            tutorialValidatedObstacles.gameObject.SetActive(true);
            tutorialValidatedObstacles.text = $"0/{k_ObstacleToClear}";

            m_DisplayTutorial = true;
            trackManager.newSegmentCreated = segment =>
            {
                if (trackManager.currentZone != 0 && !m_CountObstacles && m_NextValidSegment == null)
                {
                    m_NextValidSegment = segment;
                }
            };

            trackManager.currentSegementChanged = segment =>
            {
                m_CurrentSegmentObstacleIndex = 0;

                if (!m_CountObstacles && trackManager.currentSegment == m_NextValidSegment)
                {
                    trackManager.characterController.currentTutorialLevel += 1;
                    m_CountObstacles   = true;
                    m_NextValidSegment = null;
                    m_DisplayTutorial  = true;

                    tutorialValidatedObstacles.text = $"{m_TutorialClearedObstacle}/{k_ObstacleToClear}";
                }
            };
        }

        m_Finished = false;
        m_PowerupIcons.Clear();

        StartCoroutine(trackManager.Begin());
    }
Example #9
0
        public static Track ReadFromTrackElement(System.Xml.XmlElement TrackElement)
        {
            var Result = new Track();

            foreach (System.Xml.XmlNode TrackChildNode in TrackElement.ChildNodes)
            {
                if ((TrackChildNode.NodeType == System.Xml.XmlNodeType.Element) && (TrackChildNode.Name == "description"))
                {
                    Result._Description = TrackChildNode.FirstChild.InnerText;
                }
                else if ((TrackChildNode.NodeType == System.Xml.XmlNodeType.Element) && (TrackChildNode.Name == "name"))
                {
                    Result._Name = TrackChildNode.FirstChild.InnerText;
                }
                else if ((TrackChildNode.NodeType == System.Xml.XmlNodeType.Element) && (TrackChildNode.Name == "trkseg"))
                {
                    var TrackSegment = new TrackSegment();

                    foreach (System.Xml.XmlNode TrackSegmentChildNode in TrackChildNode)
                    {
                        if ((TrackSegmentChildNode.NodeType == System.Xml.XmlNodeType.Element) && (TrackSegmentChildNode.Name == "trkpt"))
                        {
                            TrackSegment.TrackPoints.Add(TrackPoint.LoadFromTrackPointElement((System.Xml.XmlElement)TrackSegmentChildNode));
                        }
                    }
                    Result._TrackSegments.Add(TrackSegment);
                }
            }

            return(Result);
        }
Example #10
0
        private static void ParseTracks(GpxFile xml, GpsData data)
        {
            if (xml.trk != null)
            {
                foreach (var trkType in xml.trk)
                {
                    var track = new Track();

                    track.Metadata.Attribute(x => x.Name, trkType.name);
                    track.Metadata.Attribute(x => x.Description, trkType.desc);
                    track.Metadata.Attribute(x => x.Comment, trkType.cmt);

                    foreach (var trksegType in trkType.trkseg)
                    {
                        var segment = new TrackSegment();
                        foreach (var wptType in trksegType.trkpt)
                        {
                            var fix = new Fix((double)wptType.lat, (double)wptType.lon, (double)wptType.ele, wptType.time);
                            segment.Fixes.Add(fix);
                        }
                        track.Segments.Add(segment);
                    }
                    data.Tracks.Add(track);
                }
            }
        }
Example #11
0
    /// <summary>
    /// Called by Unity engine when the player finish dragging mouse
    /// </summary>
    void IEndDragHandler.OnEndDrag(PointerEventData eventData)
    {
        switch (eventData.button)
        {
        // If Left mouse button, add last point and validate
        case PointerEventData.InputButton.Left:
        {
            // Determine active Track Segment
            TrackSegment currentTrack = _track.Last();

            // Add current point
            currentTrack.AddPoint(eventData.position.ScreenToWorld());

            // If new Track doesn't have enough points, remove it
            if (!currentTrack.IsValid)
            {
                _track.Remove(currentTrack);
                Destroy(currentTrack.gameObject);
            }

            break;
        }

        // If right button is pressed, switch back to default mouse cursor
        case PointerEventData.InputButton.Right:
        {
            Cursor.SetCursor(DrawingCursor, new Vector2(0, 64), CursorMode.ForceSoftware);
            break;
        }
        }
    }
Example #12
0
        public void AddSegments(TrackNode node)
        {
            List <KeyValuePair <int, int> > listTrItems = distributeTrItem(node);

            TrVectorSection[] items = node.TrVectorNode.TrVectorSections;
            for (int idx = 0; idx < items.Length - 1; idx++)
            {
                //Program.actEditor.DisplayStatusMessage("Init data for display...  Load Vector Nodes: " + node.Index + "." + idx);
                TrVectorSection item1 = node.TrVectorNode.TrVectorSections[idx];
                TrVectorSection item2 = node.TrVectorNode.TrVectorSections[idx + 1];

                AESegment    aeSegment = new AESegment(item1, item2);
                TrackSegment lineSeg   = new TrackSegment(aeSegment, node, idx, item1.Flag2, TSectionDat);
                var          values    = listTrItems.GroupBy(x => x.Key == idx);
                foreach (var idxTrItem in values)
                {
                    if (!idxTrItem.Key)
                    {
                        break;
                    }
                    foreach (var val in idxTrItem)
                    {
                        var item = TDB.TrackDB.TrItemTable[val.Value];
                        addTrItem(lineSeg, item);
                    }
                }
                //Program.actEditor.DisplayStatusMessage("Init data for display...  Load Vector Nodes: " + node.Index + "." + idx + ".");
                mstsItems.AddSegment(lineSeg);

                //lineSeg = new TrackSegment(node, i, TSectionDat);
                areaRoute.manageTiles(item1.TileX, item1.TileZ);
            }
            areaRoute.manageTiles(items[items.Length - 1].TileX, items[items.Length - 1].TileZ);
        }
Example #13
0
 public void addTrItem(TrackSegment tr)
 {
     if (tr != null)
     {
         trItems.Add(tr);
     }
 }
Example #14
0
    public override IEnumerator Spawn(TrackSegment segment, float t)
    {
        Vector3    position;
        Quaternion rotation;

        segment.GetPointAt(t, out position, out rotation);
        AsyncOperationHandle op = Addressables.InstantiateAsync(gameObject.name, position, rotation);

        yield return(op);

        if (op.Result == null || !(op.Result is GameObject))
        {
            Debug.LogWarning(string.Format("Unable to load obstacle {0}.", gameObject.name));
            yield break;
        }
        GameObject obj = op.Result as GameObject;

        obj.transform.SetParent(segment.objectRoot, true);

        //TODO : remove that hack related to #issue7
        Vector3 oldPos = obj.transform.position;

        obj.transform.position += Vector3.back;
        obj.transform.position  = oldPos;
    }
Example #15
0
    void Remove()
    {
        //Destroy the last piece on the stack and revert to the values before that
        if (pieceHistory.Count > 0)
        {
            TrackSegment lastPiece = pieceHistory.Pop();
            Destroy(lastPiece.gameObject);
            checkpointCounter -= segmentCount;
            if (pieceHistory.Count > 0)
            {
                lastPiece = pieceHistory.Peek();
                lastPiece.GetData(out x, out y, out ax, out bx, out cx, out ay, out by, out cy);
                return;
            }
        }

        //Stack is empty, use default values
        x  = 0;
        y  = 0;
        ax = 10;
        bx = 0;
        cx = -10;
        ay = 0;
        by = 0;
        cy = 0;
    }
        public TrackSegmentInterface(TrackSegment trackSegment, List <string> givenDestination)
        {
            List <string> destination = givenDestination;

            segment = trackSegment;
            InitializeComponent();
        }
    void OnSceneGUI()
    {
        // Creeation des ID
        int arrowIDForward = GUIUtility.GetControlID("Arrow Forward".GetHashCode(), FocusType.Passive);
        int arrowIDBack    = GUIUtility.GetControlID("Arrow Back".GetHashCode(), FocusType.Passive);

        // Recupere les variables utiles
        TrackSegment track          = target as TrackSegment;
        Vector3      origin         = track.GetControlPoint(0, Space.World);
        Vector3      tangentForward = track.GetControlPoint(1, Space.World);
        Vector3      tangentBack    = origin * 2 - tangentForward;
        Vector3      tangentDir     = track.transform.forward;

        // Creation du plane
        Vector3 camUp         = SceneView.lastActiveSceneView.camera.transform.up;
        Vector3 pNormal       = Vector3.Cross(tangentDir, camUp).normalized;
        Plane   draggingPlane = new Plane(pNormal, origin);
        float   newDistance   = 0;

        // Affichage des handles pour la tangente
        bool changedForward = DrawTangentHandle(arrowIDForward, tangentForward, origin, tangentDir, draggingPlane, ref newDistance);
        bool changedBack    = DrawTangentHandle(arrowIDBack, tangentBack, origin, -tangentDir, draggingPlane, ref newDistance);

        // Si un des handle est modifie on met a jour la distance
        if (changedForward || changedBack)
        {
            Undo.RecordObject(target, "adjust bezier tangent");
            track.tangentLength = newDistance;
            track.RoadChain?.UpdateSegments();
        }
    }
Example #18
0
 public static void DeSpawnObstacles(ref TrackSegment despawnSegment)
 {
     for (int i = 0; i < despawnSegment.possibleObstacles.Length; i++)
     {
         despawnSegment.possibleObstacles[i].gameObject.SetActive(false);
     }
 }
Example #19
0
    /// <summary>
    /// Recupere un des 4 point de control de la courbe de bezier
    /// </summary>
    /// <param name="i"></param>
    /// <param name="space"></param>
    /// <returns></returns>
    public Vector3 GetControlPoint(int i, Space space)
    {
        if (i < 2)
        {
            if (0 == i)
            {
                return((space == Space.Self) ? Vector3.zero : transform.TransformPoint(Vector3.zero));
            }
            if (1 == i)
            {
                return((space == Space.Self) ? Vector3.forward * tangentLength : transform.TransformPoint(Vector3.forward * tangentLength));
            }
        }
        else
        {
            TrackSegment next   = TryGetNextSegment();
            Transform    nextTf = next.transform;
            if (2 == i)
            {
                return((space == Space.World) ? nextTf.TransformPoint(Vector3.back * next.tangentLength) : transform.InverseTransformPoint(nextTf.TransformPoint(Vector3.back * next.tangentLength)));
            }

            if (3 == i)
            {
                return((space == Space.World) ? nextTf.position : transform.InverseTransformPoint(nextTf.position));
            }
        }
        return(default);
Example #20
0
        public void ReadGpxData(GpxFile gpxFile, Stream stream)
        {
            XmlSerializer serializer = new XmlSerializer (typeof (gpx));
            gpx gpx = (gpx)serializer.Deserialize (stream);

            if (gpx.trk != null)
            {
                foreach (gpxTrk trkType in gpx.trk)
                {
                    Track track = new Track ();

                    foreach (gpxTrkTrkseg trkseg in trkType.trkseg)
                    {
                        if (trkseg.trkpt.Length > 0)
                        {
                            TrackSegment segment = new TrackSegment ();
                            foreach (gpxTrkTrksegTrkpt trkpt in trkseg.trkpt)
                            {
                                TrackPoint waypoint = ReadTrackPoint (trkpt);
                                segment.AddPoint (waypoint);
                            }

                            track.AddSegment (segment);
                        }
                    }

                    gpxFile.AddTrack (track);
                }
            }

            if (gpx.wpt != null)
            {
                foreach (gpxWpt wptType in gpx.wpt)
                {
                    TrackPoint waypoint = ReadWayoint(wptType);
                    gpxFile.AddWaypoint (waypoint);
                }
            }

            if (gpx.rte != null)
            {
                foreach (gpxRte rteType in gpx.rte)
                {
                    Track route = new Track ();

                    if (rteType.rtept != null)
                    {
                        TrackSegment segment = new TrackSegment ();
                        foreach (gpxRteRtept wptType in rteType.rtept)
                        {
                            TrackPoint waypoint = ReadRoutePoint (wptType);
                            segment.AddPoint (waypoint);
                        }
                    }

                    gpxFile.AddRoute (route);
                }
            }
        }
Example #21
0
    public override void Spawn(TrackSegment segment, bool toChange)
    {
        GameObject obj = Instantiate(gameObject,
                                     new Vector3(-transform.position.x, transform.position.y, transform.position.z),
                                     new Quaternion(transform.rotation.x, transform.rotation.y + 180, transform.rotation.z, transform.rotation.w));

        obj.transform.SetParent(segment.objectRoot, true);
    }
Example #22
0
        public void CanSetMultiplePointsToATrackSegment()
        {
            var sut = new TrackSegment();

            sut.TrackPoints = new[] { new TrackPoint(), new TrackPoint() };

            Assert.That(sut.TrackPoints.Count(), Is.EqualTo(2));
        }
        /*--------------------------------------------------------------------------------------------*/
        public static TrackSegment[] SplitTrackSegments(TrackSegment[] pSegments, TrackSegment[] pCuts)
        {
            var slices = pSegments.ToList();

            foreach (TrackSegment cut in pCuts)
            {
                for (int i = 0; i < slices.Count; i++)
                {
                    TrackSegment slice = slices[i];

                    if (cut.StartValue >= slice.StartValue && cut.EndValue <= slice.EndValue)
                    {
                        var slice2 = new TrackSegment();
                        slice2.StartValue = cut.EndValue;
                        slice2.EndValue   = slice.EndValue;
                        slice2.IsFill     = slice.IsFill;
                        slices.Insert(i + 1, slice2);

                        slice.EndValue = cut.StartValue;
                        slices[i]      = slice;
                        continue;
                    }

                    if (cut.StartValue >= slice.StartValue && cut.StartValue <= slice.EndValue)
                    {
                        slice.EndValue = cut.StartValue;
                        slices[i]      = slice;
                        continue;
                    }

                    if (cut.EndValue <= slice.EndValue && cut.EndValue >= slice.StartValue)
                    {
                        slice.StartValue = cut.EndValue;
                        slices[i]        = slice;
                        continue;
                    }

                    if (cut.StartValue <= slice.StartValue && cut.EndValue >= slice.EndValue)
                    {
                        slices.RemoveAt(i);
                        i--;
                    }
                }
            }

            for (int i = 0; i < slices.Count; i++)
            {
                TrackSegment slice = slices[i];

                if (Math.Abs(slice.StartValue - slice.EndValue) <= 0.01f)
                {
                    slices.RemoveAt(i);
                    i--;
                }
            }

            return(slices.ToArray());
        }
Example #24
0
    // Start is called before the first frame update
    private void Start()
    {
        // Заполняем опорное точки
        corners = new Vector3[this.transform.childCount];
        for (var i = 0; i < corners.Length; i++)
        {
            GameObject obj = transform.GetChild(i).gameObject;
            corners[i] = obj.transform.position;
            //отключение отрисовки объекта/
            obj.GetComponent <MeshRenderer>().enabled = false;
        }

        //настраиваем Line Renderer
        m_lineRenderer.positionCount = corners.Length;
        m_lineRenderer.SetPositions(corners);

        //сгенерировать всех соседей в одном сегменте
        //проверять только массив соседей

        //запекаем меш сетку из Line Renderer
        Mesh mesh = new Mesh();

        m_lineRenderer.BakeMesh(mesh, true);

        //создаем массив сегментов трассы
        //(каждый треугольник описан 3-мя точками из массива вершин)
        segments = new TrackSegment[mesh.triangles.Length / 3];

        //каждую итерацию цикла проходим через каждый треий элемент
        for (int i = 0; i < mesh.triangles.Length; i += 3)
        {
            segments[segmentCounter] = new TrackSegment();

            segments[segmentCounter].Points = new Vector3[3];
            //в первую точку записываем вершину первого индекса из массива вершин
            segments[segmentCounter].Points[0] = mesh.vertices[mesh.triangles[i]];
            segments[segmentCounter].Points[1] = mesh.vertices[mesh.triangles[i + 1]];
            segments[segmentCounter].Points[2] = mesh.vertices[mesh.triangles[i + 2]];

            segmentCounter++;
        }

        //отдельно можно продебажить сегменты
        if (!m_Debug)
        {
            return;
        }

        foreach (var segment in segments)
        {
            foreach (var point in segment.Points)
            {
                GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                sphere.transform.position   = point;
                sphere.transform.localScale = Vector3.one * 0.1f;
            }
        }
    }
Example #25
0
 public static void AssertAreEqual(TrackSegment recData, GPBikes.SPluginsTrackSegment_t data)
 {
     Assert.AreEqual(recData.Type, data.Type);
     Assert.AreEqual(recData.Length, data.Length);
     Assert.AreEqual(recData.Radius, data.Radius);
     Assert.AreEqual(recData.Angle, data.Angle);
     Assert.AreEqual(recData.Start1, data.Start[0]);
     Assert.AreEqual(recData.Start2, data.Start[1]);
 }
Example #26
0
        public void CreateCheckpoint(TrackSegment Segment, GameObject CheckpointPref)
        {
            Array.Resize(ref ChPoints, ChPoints.Length + 1);
            ChPoints[0] = Segment.Points[0];
            ChPoints[1] = Segment.Points[1];
            ChPoints[2] = Segment.Points[2];

            //GameObject chp = Instantiate(CheckpointPref);
            //chp.transform.position = new Vector3(ChPoints[0].x, ChPoints[1].y, 0);
        }
Example #27
0
    public override void Spawn(TrackSegment segment, float t, int l)
    {
        Vector3    position;
        Quaternion rotation;

        segment.GetPointAt(t, out position, out rotation);
        GameObject obj = Instantiate(gameObject, position, rotation);

        obj.transform.SetParent(segment.objectRoot, true);
    }
Example #28
0
        static void Main(string[] args)
        {
            Parser.Default.ParseArguments <Options>(args)
            .WithParsed(o =>
            {
                Console.WriteLine($"Reading source {o.Source}");
                using StreamReader sw   = new StreamReader(o.Source);
                using JsonReader reader = new JsonTextReader(sw);
                var serializer          = new JsonSerializer();
                var json = serializer.Deserialize <GoogleLocationExport>(reader);


                Func <GooglePartialConvert, string> groupBy = o.SplitBy switch
                {
                    Options.Split.None => (GooglePartialConvert data) => "",
                    Options.Split.Year => (GooglePartialConvert data) => data.Time.Year.ToString(),
                    Options.Split.Month => (GooglePartialConvert data) => $"{data.Time.Year}-{data.Time.Month}",
                    _ => throw new NotImplementedException(),
                };

                Console.WriteLine($"Parsing source {o.Source}");

                var groups = json.locations.Select(x => new GooglePartialConvert
                {
                    Time = DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(x.timestampMs)).DateTime,
                    Data = x
                }).GroupBy(groupBy);

                foreach (var group in groups)
                {
                    var track        = new Track();
                    var trackSegment = new TrackSegment();

                    foreach (var data in group)
                    {
                        var location = data.Data;
                        trackSegment.Waypoints.Add(new Waypoint(location.latitudeE7 / 1e7, location.longitudeE7 / 1e7, location.altitude, data.Time));
                    }

                    track.Segments.Add(trackSegment);


                    var gpsData = new GpsData();
                    gpsData.Tracks.Add(track);

                    Console.WriteLine($"Found {trackSegment.Waypoints.Count} waypoints");
                    var output = Path.Combine(Path.GetDirectoryName(o.Output), $"{Path.GetFileName(o.Output)}_{group.Key}.gpx");
                    Console.WriteLine($"Writting output {output}");

                    var gpx11Serializer   = new Geo.Gps.Serialization.Gpx11Serializer();
                    using var writeStream = File.OpenWrite(output);
                    gpx11Serializer.Serialize(gpsData, writeStream);
                }
            });
        }
Example #29
0
    // Start is called before the first frame update
    void Start()
    {
        //заполняем массив опорных точек трассы
        corners = new Vector3[transform.childCount];
        for (int i = 0; i < corners.Length; i++)
        {
            GameObject obj = transform.GetChild(i).gameObject;
            corners[i] = obj.transform.position;
            obj.GetComponent <MeshRenderer>().enabled = false;
        }

        //задаём значения linerenderer
        m_lineRenderer.positionCount = corners.Length;
        m_lineRenderer.SetPositions(corners);

        //из полученного LineRenderer запекаем mesh
        Mesh mesh = new Mesh();

        m_lineRenderer.BakeMesh(mesh, true);

        //создаём массив сегментов трассы
        //каждый треугольник уписываем треугольниками из массива вершин
        segments = new TrackSegment[mesh.triangles.Length / 3];
        int segmentsCounter = 0;

        for (int i = 0; i < mesh.triangles.Length; i += 3)
        {
            segments[segmentsCounter]        = new TrackSegment();
            segments[segmentsCounter].points = new Vector3[3];
            int nm = mesh.triangles[i];
            segments[segmentsCounter].points[0] = mesh.vertices[nm];
            nm = mesh.triangles[i + 1];
            segments[segmentsCounter].points[1] = mesh.vertices[nm];
            nm = mesh.triangles[i + 2];
            segments[segmentsCounter].points[2] = mesh.vertices[nm];
            segmentsCounter++;
        }

        if (!m_viewDebug)
        {
            return;
        }
        else
        {
            foreach (var segment in segments)
            {
                foreach (var point in segment.points)
                {
                    GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                    sphere.transform.position   = point;
                    sphere.transform.localScale = Vector3.one * 0.1f;
                }
            }
        }
    }
Example #30
0
    public void SetupVehicle(ObjectPool _vehiclePool, bool _isFirstVehicle)
    {
        gameObjectType = GameObjectType.Vehicle;
        vehiclePool    = _vehiclePool;
        levelConfig    = TrackManager.Instance.levelConfig;

        // set track
        int     randomTrack         = UnityEngine.Random.Range(0, 3);
        Vector3 randomTrackPosition = Vector3.zero;

        if (randomTrack == 0)
        {
            randomTrackPosition.x = -TrackManager.Instance.laneOffset;
        }
        if (randomTrack == 2)
        {
            randomTrackPosition.x = TrackManager.Instance.laneOffset;
        }

        speed = UnityEngine.Random.Range(levelConfig.vehicleSpeedMin, levelConfig.vehicleSpeedMax);
        if (TrackManager.Instance.characterControlScript != null)
        {
            TrackSegment trackSegment = TrackManager.Instance.FindCurrentSegmentAt(TrackManager.Instance.characterControlScript.transform.position);

            if (trackSegment != null)
            {
                int  random    = UnityEngine.Random.Range(0, 2);
                bool fromFront = Convert.ToBoolean(random);

                int segmentIndex = trackSegment.segmentIndex - 1;
                speed = UnityEngine.Random.Range(levelConfig.vehicleSpeedMax * 0.5f, levelConfig.vehicleSpeedMax);
                if (fromFront)
                {
                    segmentIndex = trackSegment.segmentIndex + 5;
                    speed        = UnityEngine.Random.Range(levelConfig.vehicleSpeedMin, levelConfig.vehicleSpeedMax * 0.5f);
                }

                trackSegment          = TrackManager.Instance.GetSegmentWithSegmentIndex(segmentIndex);
                randomTrackPosition.z = trackSegment.startPoint.position.z;
            }

            if (_isFirstVehicle)
            {
                randomTrackPosition = new Vector3(TrackManager.Instance.characterControlScript.characterColliderScript.transform.position.x,
                                                  TrackManager.Instance.characterControlScript.transform.position.y,
                                                  TrackManager.Instance.characterControlScript.transform.position.z);
            }
        }
        else
        {
            // very first time. character will be created after vehicle.
            randomTrackPosition = Vector3.zero;
        }
        transform.position = randomTrackPosition;
    }
Example #31
0
    /// <summary>
    /// Called by Unity engine when the player start mouse drag
    /// </summary>
    void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)
    {
        switch (eventData.button)
        {
        // If Left mouse button, start a new Track Segment
        case PointerEventData.InputButton.Left:
        {
            // Convert position from Screen Coordinates into World ones
            Vector2 position = eventData.pressPosition.ScreenToWorld();

            // Check whether to snap to a previous point
            if (_track.Count > 0)
            {
                for (int ti = _track.Count - 1; ti >= 0; ti--)
                {
                    TrackSegment currentTrack = _track[ti];
                    for (int pi = currentTrack.PointCount - 1; pi >= 0; pi--)
                    {
                        if ((currentTrack[pi] - position).magnitude < SnapRange)
                        {
                            position = currentTrack[pi];
                            break;
                        }
                    }
                }
            }

            // Create a new Game Object for the new Track Segment
            GameObject newTrackSegmentGo = new GameObject("Track segment");

            // Set it as a child of this one
            newTrackSegmentGo.transform.parent = transform;

            // Add a Track Segment component to the newly created Game Object
            TrackSegment newTrackSegment = newTrackSegmentGo.AddComponent <TrackSegment>();

            // Set Line Renderer material
            newTrackSegment.GroundMaterial = GroundMaterial;

            // Add starting point
            newTrackSegment.AddPoint(position);

            // Add this new Track Segment to the whole Track
            _track.Add(newTrackSegment);
            break;
        }

        // If right button is pressed, switch mouse cursor to move
        case PointerEventData.InputButton.Right:
        {
            Cursor.SetCursor(MoveCursor, new Vector2(32, 32), CursorMode.ForceSoftware);
            break;
        }
        }
    }
		/*--------------------------------------------------------------------------------------------*/
		public static void SplitTrackSegments(ReadOnlyCollection<TrackSegment> pSegments, 
							ReadOnlyCollection<TrackSegment> pCuts, IList<TrackSegment> pSliceResults) {
			pSliceResults.Clear();

			for ( int segI = 0 ; segI < pSegments.Count ; segI++ ) {
				TrackSegment seg = pSegments[segI];
				pSliceResults.Add(seg);
			}

			for ( int cutI = 0 ; cutI < pCuts.Count ; cutI++ ) {
				TrackSegment cut = pCuts[cutI];

				for ( int sliceI = 0 ; sliceI < pSliceResults.Count ; sliceI++ ) {
					TrackSegment slice = pSliceResults[sliceI];

					if ( cut.StartValue >= slice.StartValue && cut.EndValue <= slice.EndValue ) {
						var slice2 = new TrackSegment();
						slice2.StartValue = cut.EndValue;
						slice2.EndValue = slice.EndValue;
						slice2.IsFill = slice.IsFill;
						pSliceResults.Insert(sliceI+1, slice2);

						slice.EndValue = cut.StartValue;
						pSliceResults[sliceI] = slice;
						continue;
					}

					if ( cut.StartValue >= slice.StartValue && cut.StartValue <= slice.EndValue ) {
						slice.EndValue = cut.StartValue;
						pSliceResults[sliceI] = slice;
						continue;
					}

					if ( cut.EndValue <= slice.EndValue && cut.EndValue >= slice.StartValue ) {
						slice.StartValue = cut.EndValue;
						pSliceResults[sliceI] = slice;
						continue;
					}

					if ( cut.StartValue <= slice.StartValue && cut.EndValue >= slice.EndValue ) {
						pSliceResults.RemoveAt(sliceI);
						sliceI--;
					}
				}
			}

			for ( int sliceI = 0 ; sliceI < pSliceResults.Count ; sliceI++ ) {
				TrackSegment slice = pSliceResults[sliceI];

				if ( Math.Abs(slice.StartValue-slice.EndValue) <= 0.01f ) {
					pSliceResults.RemoveAt(sliceI);
					sliceI--;
				}
			}
		}
Example #33
0
        public GpsData DeSerialize(StreamWrapper streamWrapper)
        {
            var data = new GpsData();
            DateTime date = default(DateTime);
            var trackSegment = new TrackSegment();

            streamWrapper.Position = 0;
            using (var reader = new StreamReader(streamWrapper))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (date == default(DateTime))
                    {
                        var match = Regex.Match(line, H_DATE_LINE_REGEX);
                        if (match.Success)
                        {
                            var d = int.Parse(match.Groups["d"].Value);
                            var m = int.Parse(match.Groups["m"].Value);
                            var y = int.Parse(match.Groups["y"].Value);
                            var yn = int.Parse(DateTime.UtcNow.ToString("yy"));
                            if (y > yn)
                                yn += 100;
                            var yd = yn - y;
                            date = new DateTime(DateTime.UtcNow.Year -yd, m, d);
                        continue;
                        }
                    }

                    if (ParseMetadata(data, x => x.Vehicle.Model, H_GLIDER_TYPE_REGEX, line))
                        continue;

                    if (ParseMetadata(data, x => x.Vehicle.Identifier, H_GLIDER_REG_REGEX, line))
                        continue;

                    if (ParseMetadata(data, x => x.Vehicle.Crew1, H_CREW1_REGEX, line))
                        continue;

                    if (ParseMetadata(data, x => x.Vehicle.Crew2, H_CREW2_REGEX, line))
                        continue;

                    if (ParseFix(line, trackSegment, date))
                        continue;
                }
            }

            if (!trackSegment.IsEmpty())
            {
                data.Tracks.Add(new Track());
                data.Tracks[0].Segments.Add(trackSegment);
            }

            return data;
        }
Example #34
0
    public static Quaternion SectionGetRotation(TrackSegment section)
    {
        // Obtiene las posiciones
        Vector3 sectionPosition = section.position;
        Vector3 nextPosition = section.next.position;

        // Obtiene la direccion y la normal de las posiciones
        Vector3 forward = (nextPosition - sectionPosition);
        Vector3 normal = section.normal;

        // Devuelve lookat
        return Quaternion.LookRotation(forward.normalized, normal.normalized);
    }
        /*--------------------------------------------------------------------------------------------*/
        public static TrackSegment[] SplitTrackSegments(TrackSegment[] pSegments, TrackSegment[] pCuts)
        {
            var slices = pSegments.ToList();

            foreach ( TrackSegment cut in pCuts ) {
                for ( int i = 0 ; i < slices.Count ; i++ ) {
                    TrackSegment slice = slices[i];

                    if ( cut.StartValue >= slice.StartValue && cut.EndValue <= slice.EndValue ) {
                        var slice2 = new TrackSegment();
                        slice2.StartValue = cut.EndValue;
                        slice2.EndValue = slice.EndValue;
                        slice2.IsFill = slice.IsFill;
                        slices.Insert(i+1, slice2);

                        slice.EndValue = cut.StartValue;
                        slices[i] = slice;
                        continue;
                    }

                    if ( cut.StartValue >= slice.StartValue && cut.StartValue <= slice.EndValue ) {
                        slice.EndValue = cut.StartValue;
                        slices[i] = slice;
                        continue;
                    }

                    if ( cut.EndValue <= slice.EndValue && cut.EndValue >= slice.StartValue ) {
                        slice.StartValue = cut.EndValue;
                        slices[i] = slice;
                        continue;
                    }

                    if ( cut.StartValue <= slice.StartValue && cut.EndValue >= slice.EndValue ) {
                        slices.RemoveAt(i);
                        i--;
                    }
                }
            }

            for ( int i = 0 ; i < slices.Count ; i++ ) {
                TrackSegment slice = slices[i];

                if ( Math.Abs(slice.StartValue-slice.EndValue) <= 0.01f ) {
                    slices.RemoveAt(i);
                    i--;
                }
            }

            return slices.ToArray();
        }
Example #36
0
        /// <summary>Нарезает трек на сегменты</summary>
        private static IList<TrackSegment> SliceForSegments(GpsTrack Track)
        {
            if (Track.TrackPoints.Count == 0)
                return new TrackSegment[0];

            if (Track.TrackPoints.Count == 1)
                return new[] { new TrackSegment(Track.TrackPoints[0], Track.TrackPoints[0], 0) };

            double offset = 0;
            var res = new List<TrackSegment>(Track.TrackPoints.Count - 1);
            for (int i = 1; i < Track.TrackPoints.Count; i++)
            {
                var segment = new TrackSegment(Track.TrackPoints[i - 1], Track.TrackPoints[i], offset);
                offset = segment.EndOffset;
                res.Add(segment);
            }
            return res;
        }
Example #37
0
        private bool ParseFix(string line, TrackSegment trackSegment)
        {
            if (line.IsNullOrWhitespace())
                return false;

            var match = Regex.Match(line, FIX_SENTENCE);
            if (match.Success)
            {
                int h = int.Parse(match.Groups["h"].Value);
                int m = int.Parse(match.Groups["m"].Value);
                double s = double.Parse(match.Groups["s"].Value);
                double alt = double.Parse(match.Groups["alt"].Value);
                double lat = ConvertOrd(match.Groups["lat"].Value, match.Groups["latd"].Value);
                double lon = ConvertOrd(match.Groups["lon"].Value, match.Groups["lond"].Value);

                var fix = new Fix(lat, lon, alt, DateTime.MinValue.AddHours(h).AddMinutes(m).AddSeconds(s));
                trackSegment.Fixes.Add(fix);

                return true;
            }
            return false;
        }
Example #38
0
        public GpsData DeSerialize(StreamWrapper streamWrapper)
        {
            var data = new GpsData();
            var trackSegment = new TrackSegment();
            streamWrapper.Position = 0;
            using (var reader = new StreamReader(streamWrapper))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (ParseFix(line, trackSegment))
                        continue;
                    if (ParseWaypoint(line, data))
                        continue;
                }
            }

            if (!trackSegment.IsEmpty())
            {
                data.Tracks.Add(new Track());
                data.Tracks[0].Segments.Add(trackSegment);
            }
            return data;
        }
Example #39
0
    /// <summary>
    /// 
    /// </summary>
    private void SegmentEditor()
    {
        if (segmentEditMode == 0) {
            if (selectedSegment != null) {
                selectedSegment.position = Handles.PositionHandle(selectedSegment.position, Helpers.SectionGetRotation(selectedSegment));
            }
        }

        RaycastHit hit;
        Vector3[] verts = new Vector3[4];
        Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);

        // reset hover selection
        managerData.trackData.editorSectionHover = -1;

        // Borrar la info del segmento
        for (int i = 0; i < segmentInfo.Length; ++i)
            segmentInfo[i] = "";

        if (Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << LayerMask.NameToLayer("Track"))) {
            HandleUtility.Repaint();

            // Obtener tile de la mesh
            Mesh m = hit.transform.GetComponent<MeshFilter>().sharedMesh;
            TrackTile tile = Helpers.TileFromTriangleIndex(hit.triangleIndex, managerData.trackData.mappedTiles);

            // Seleccionar segmento (Left Ctrl)
            if ((Event.current.type == EventType.keyDown && Event.current.keyCode == KeyCode.LeftControl) || updatedSelected) {
                updatedSelected = false;
                selectedSegment = tile.segment;
                customIndex = tile.segment.index;
                managerData.trackData.editorSectionCurrent = selectedSegment.index;
                managerData.trackData.editorSectionNext = selectedSegment.next.index;
            }

            // Asignar siguiente segmento
            if (segmentEditMode == 1) {
                if (Event.current.type == EventType.keyDown && Event.current.keyCode == KeyCode.Space) {
                    selectedSegment.next = tile.segment;
                    managerData.trackData.editorSectionNext = tile.segment.index;
                }
            }
            managerData.trackData.editorSectionHover = tile.segment.index;
        }

        // Actualizar la información del segmento
        if (selectedSegment != null) {
            segmentInfo[0] = "Segment Index: " + selectedSegment.index;
            segmentInfo[1] = "Segment Type: " + selectedSegment.type;
            segmentInfo[2] = "Segment Tiles: " + selectedSegment.tiles[0].index + " & " + selectedSegment.tiles[1].index;
            segmentInfo[3] = "Segment Width: " + selectedSegment.width;
            segmentInfo[4] = "Segment Height: " + selectedSegment.height;
            segmentInfo[5] = "Segment Next: " + selectedSegment.next.index;
        }
    }
Example #40
0
    private static void SegmentEdit()
    {
        segmentEditMode = GUILayout.Toolbar(segmentEditMode, new string[2] { "Set Position", "Set Next" });

        if (selectedSegment != null) {
            if (GUILayout.Button("Selext Next Segment")) {
                HandleUtility.Repaint();

                // Asignar el segmento siguiente al seleccionado
                updatedSelected = true;
                selectedSegment = selectedSegment.next;
                customIndex = selectedSegment.index;
            }
        }

        if (GUILayout.Button("Set Selected To Start")) {
            int i;
            for (i = 0; i < managerData.trackData.sections.Count; ++i) {
                if (managerData.trackData.sections[i] == selectedSegment)
                    managerData.trackData.sectionStart = i;
            }
        }

        if (GUILayout.Button("Reverse Track")) {
            int i;
            for (i = 0; i < managerData.trackData.sections.Count; ++i) {
                if (i > 0)
                    managerData.trackData.sections[i].next = managerData.trackData.sections[i - 1];
                else
                    managerData.trackData.sections[i].next = managerData.trackData.sections[managerData.trackData.sections.Count - 1];
            }
        }

        // info
        GUILayout.Space(10);
        for (int i = 0; i < segmentInfo.Length; ++i)
            GUILayout.Label(segmentInfo[i]);
    }
Example #41
0
            private void _GetTracks(ArrayList TrackInformation, GPX gpxfile)
            {
                //Die passende SQLite Tabelle lasen
                System.Data.DataTable datatableWP = _sqlitebase.ExecuteQuery("SELECT * FROM \"WP\"");
                System.Data.DataTable datatableGPS= _sqlitebase.ExecuteQuery("SELECT * FROM \"GPSLog\"");

                //Für jeden Track ausführen:
                foreach (SQLiteTracks sqlitetrack in TrackInformation)
                {
                    //Tracksegment erstellen
                    TrackSegment tracksegment = new TrackSegment();

                    //Variablen erstellen
                    double latitude,longitude,elevation;
                    DateTime gpxdatetime;

                    //Alle Punkte in der DB ablaufen
                    for (int i = sqlitetrack.FirstWP; i < sqlitetrack.LastWP; i++)
                    {
                        //Punktdaten holen
                        latitude = (float) (datatableWP.Rows[i][9]);
                        longitude = (float) datatableWP.Rows[i][8];
                        elevation = (float) datatableWP.Rows[i][10];
                        gpxdatetime = DateTime.FromFileTime((((long)(int)datatableGPS.Rows[i][2]) << 32)+(int)datatableGPS.Rows[i][3]);

                        //Wenn Sommerzeit war, dann ziehe eine Stunde ab
                        TimeZone localZone = TimeZone.CurrentTimeZone;
                        if(localZone.IsDaylightSavingTime(gpxdatetime))
                        {
                            gpxdatetime = gpxdatetime.AddHours(-1);
                        }

                        //Zu UTC konvertieren
                        gpxdatetime = gpxdatetime.ToUniversalTime();

                        //Punkt erstellen
                        DanielLibrary.GPXWriter.Utils.Point pointtmp = new Point(latitude,longitude,elevation,gpxdatetime);

                        //Punkt zum Segment hinzufügen
                        tracksegment.AddPoint(pointtmp);
                    }

                    //Track erstellen
                    Track track = new Track();

                    //Track, Segment und GPX verbinden
                    track.AddSegment(tracksegment);
                    gpxfile.AddTrack(track);
                }
            }
Example #42
0
    private TrackSegment createSection(Vector3[] normals, Vector3[] verts, TrackTile[] tiles, Transform floorT, Data gen, int i, int index)
    {
        TrackSegment newSection = new TrackSegment();
        newSection = gen.sectionsObject.AddComponent<TrackSegment>();
        newSection.hideFlags = HideFlags.HideInInspector;

        tiles[0] = gen.tiles[i];
        tiles[1] = gen.tiles[i + 1];

        newSection.type = E_SEGMENTTYPE.NORMAL;
        newSection.tiles = tiles;
        newSection.index = index;

        // Establecer la posicion de la seccion
        Vector3 position1 = floorT.transform.TransformPoint(verts[tiles[0].indices[0]]);
        Vector3 position2 = floorT.transform.TransformPoint(verts[tiles[1].indices[1]]);
        Vector3 positionMid = (position1 + position2) / 2;
        newSection.position = positionMid;

        // Establecer la normal de la seccion
        Vector3 normal1 = floorT.transform.TransformDirection(normals[tiles[0].indices[0]]);
        Vector3 normal2 = floorT.transform.TransformDirection(normals[tiles[1].indices[1]]);
        Vector3 normalMid = (normal1 + normal2) / 2;
        newSection.normal = normalMid;

        return newSection;
    }
Example #43
0
        private bool ParseFix(string line, TrackSegment trackSegment, DateTime date)
        {
            if (string.IsNullOrWhiteSpace(line))
                return false;

            var match = Regex.Match(line, B_LINE_REGEX);
            if (match.Success)
            {
                string h = match.Groups["h"].Value;
                string m = match.Groups["m"].Value;
                string s = match.Groups["s"].Value;
                string coord = match.Groups["coord"].Value;
                string validAlt = match.Groups["validAlt"].Value;
                string presAlt = match.Groups["presAlt"].Value;
                string gpsAlt = match.Groups["gpsAlt"].Value;

                var cood = ParseCoordinate(coord);
                var fix = new Fix(cood.Latitude, cood.Longitude, double.Parse(gpsAlt), date.AddHours(int.Parse(h)).AddMinutes(int.Parse(m)).AddSeconds(int.Parse(s)));

                trackSegment.Fixes.Add(fix);
                return true;
            }
            return false;
        }
Example #44
0
    private Quaternion SectionGetRotation(TrackSegment section)
    {
        // Obtener las posiciones de la seccion y su siguiente
        Vector3 sectionPosition = section.position;
        Vector3 nextPosition = section.next.position;

        // Calcular la distacia entre la posiciones y la normal
        Vector3 forward = (nextPosition - sectionPosition);
        Vector3 normal = section.normal;
        // Devolver la rotacion
        return Quaternion.LookRotation(forward.normalized, normal.normalized);
    }
Example #45
0
    private void IndexSections()
    {
        TrackSegment[] sections = trackData.trackData.sections.ToArray();
        TrackSegment startSection = sections[trackData.trackData.sectionStart];
        startSection.index = 0;

        int index = 1;
        int maxIteration = 100000;
        int iteration = 0;

        TrackSegment currentSection = startSection.next;
        bool ended = false;
        while (!ended && iteration < maxIteration) {
            currentSection.index = index;
            currentSection = currentSection.next;
            if (currentSection.next == startSection)
                endSection = currentSection;

            if (currentSection == startSection)
                ended = true;

            ++index;
            ++iteration;
        }
    }
Example #46
0
    void OnTriggerEnter(Collider other)
    {
        Debug.Log(other.tag);
        if (other.tag == "Checkpoint1") {
            if (secondSector || currentLap == 0) {
                UpdateLap();
                secondSector = false;
            }
        }

        if (other.tag == "Checkpoint2") {
            if (currentLap > 0 && currentLap <= RaceSettings.laps)
                sector1[currentLap - 1] = currentTime;
            secondSector = true;
            midSection = currentSection;
        }
    }
Example #47
0
    void Start()
    {
        laps = new float[RaceSettings.laps];
        sector1 = new float[RaceSettings.laps];
        sector2 = new float[RaceSettings.laps];
        perfects = new bool[RaceSettings.laps];

        if (!isNetworked) {
            input.OnStart();
            effects.OnStart();
            music.OnStart();
            ai.OnStart();
            control.OnStart();
        }
        position.OnStart();

        trackTransform = new GameObject("TrackTransform");
        trackTransform.transform.parent = base.transform;

        secondSector = true;
        midSection = RaceSettings.raceManager.trackData.trackData.sections[RaceSettings.raceManager.trackData.trackData.sections.Count / 2];
    }
Example #48
0
 public void AddSegment(TrackSegment segment)
 {
     segments.Add(segment);
 }