示例#1
0
        public void CanGetNextTrackPiece(string track, int x, int y, Direction startDirection, String desiredResult)
        {
            // Arrange
            var            grid        = new Grid(track);
            Coord          pos         = new Coord(x, y);
            var            direction   = startDirection;
            var            resultTrack = new StringBuilder();
            bool           moreTrack   = true;
            int            i           = 0;
            IGridNavigator nav         = new GridNavigator();

            // Act
            do
            {
                char piece = grid[pos];
                resultTrack.Append(piece);
                var res = TrackBuilder.GetNextTrackPiece(nav, grid, pos, direction);
                moreTrack = res.Found;
                pos       = res.NextPos;
                direction = res.NextDir;
                i++;
            } while (moreTrack && i < 20);

            // Assert
            resultTrack.ToString().Should().Be(desiredResult);
        }
示例#2
0
        public TestTrain()
        {
            IGrid grid  = new Grid("/-------\\\n|       |\n|       |\n\\-------/\n");
            Coord start = grid.GetStart();

            track = TrackBuilder.GetTrack(start, grid);
        }
示例#3
0
        void Awake()
        {
            TrackBuilder = this.gameObject.GetComponent <TrackBuilder>();
            BindingFlags flags = BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic;

            _trackerRiderField = TrackBuilder.GetType().GetField("trackedRide", flags);
        }
示例#4
0
        private TrackSegment4 GetSelectedSegment()
        {
            int trackCursorPosition = (int)TrackBuilder.GetType().GetField("trackCursorPosition",
                                                                           BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic).GetValue(TrackBuilder);

            return(GetTrackRide().Track.trackSegments[trackCursorPosition]);
        }
    void Start()
    {
        GD = GridScript.gameObject.GetComponent <grid>();
        TB = TBS.gameObject.GetComponent <TrackBuilder>();

        Mat = GetComponent <Renderer>().material;
    }
示例#6
0
 public static void reset()
 {
     for (int i = 0; i < objects.Count; i++)
     {
         if (objects[i].tag == "train")
         {
             TrackBuilder tb = objects[i].GetComponent <RollerCoaster>().tb; if (tb != null)
             {
                 tb.reset();
             }
         }
         else if (objects[i].tag == "wall")
         {
             WallBuilder wb = objects[i].GetComponent <Wall>().wb; if (wb != null)
             {
                 wb.reset();
             }
         }
         GameObject.Destroy(objects[i]);
     }
     objects.Clear();
     animals.Clear();
     rollerCoasters.Clear();
     walls.Clear();
     Data.activeObj          = 0;
     Data.startingPointIndex = -1;
     GameObject.Destroy(landscape);
 }
示例#7
0
        // =======================================
        // Blaine is a pain, and that is the truth
        // =======================================
        public static int TrainCrash(string trackString, string aTrain, int aTrainPos, string bTrain, int bTrainPos, int limit, bool visualise = false)
        {
            Console.WriteLine($"aTrain: {aTrain}. aTrainPos: {aTrainPos}. bTrain: {bTrain}. bTrainPos: {bTrainPos}. Limit {limit}.");
            var grid = new Grid(trackString);

            grid.PrintGrid();

            var start = grid.GetStart();
            var track = TrackBuilder.GetTrack(start, grid);

            var gridables = new IGridable[] { track, new Train(aTrain, aTrainPos, track), new Train(bTrain, bTrainPos, track) };
            var moveables = gridables.OfType <IMoveable>();

            grid.ClearGrid();

            int timer = 0;

            do
            {
                grid.Visualise(gridables, visualise, timer == 0);

                if (moveables.IsCollision())
                {
                    Console.WriteLine($"Collision at time {timer}.");
                    return(timer);
                }

                moveables.MoveAll();
                timer++;
            }while (timer <= limit);

            Console.WriteLine($"No Collision before {timer}.");
            return(-1);
        }
示例#8
0
        internal static void OnBuildTracks(CustomDataDeserializer.DeserializeBeatmapEventArgs eventArgs)
        {
            TrackBuilder trackBuilder = eventArgs.TrackBuilder;

            foreach (CustomEventData customEventData in eventArgs.CustomEventDatas)
            {
                try
                {
                    switch (customEventData.type)
                    {
                    case ASSIGNPLAYERTOTRACK:
                        trackBuilder.AddTrack(customEventData.data.Get <string>(TRACK) ?? throw new InvalidOperationException("Track was not defined."));
                        break;

                    case ASSIGNTRACKPARENT:
                        trackBuilder.AddTrack(customEventData.data.Get <string>(PARENTTRACK) ?? throw new InvalidOperationException("Parent track was not defined."));
                        break;

                    default:
                        continue;
                    }
                }
                catch (Exception e)
                {
                    CustomDataDeserializer.LogFailure(Plugin.Logger, e, customEventData);
                }
            }
        }
示例#9
0
        public TestTrack()
        {
            IGrid grid  = new Grid(trackStr);
            Coord start = grid.GetStart();

            track = TrackBuilder.GetTrack(start, grid);
        }
    private void ExtrudeRoad(TrackBuilder trackBuilder, Vector3 pPrev, Vector3 pCurr, Vector3 pNext)
    {
        Vector3 offset       = Vector3.zero;
        Vector3 targetOffset = Vector3.forward * lineWidth;

        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, 0);
        offset      += targetOffset;
        targetOffset = Vector3.forward * roadWidth;

        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, 1);

        int stripeSubmesh = 2;

        if (stripeCheck)
        {
            stripeSubmesh = 3;
        }

        stripeCheck = !stripeCheck;

        offset      += targetOffset;
        targetOffset = Vector3.up * edgeHeight;
        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, stripeSubmesh);
        offset      += targetOffset;
        targetOffset = Vector3.forward * edgeWidth;
        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, stripeSubmesh);
        offset      += targetOffset;
        targetOffset = -Vector3.up * edgeHeight;
        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, stripeSubmesh);
    }
示例#11
0
 private void Start()
 {
     trackBuilder = this;
     waitTime     = 2.0f;
     min          = 0;
     max          = 3;
     Track();
 }
    private void MakeRoadQuad(TrackBuilder trackBuilder, Vector3 pPrev, Vector3 pCurr, Vector3 pNext,
                              Vector3 offset, Vector3 targetOffset, int submesh)
    {
        Vector3 forward     = (pNext - pCurr).normalized;
        Vector3 forwardPrev = (pCurr - pPrev).normalized;

        BuildHalfTrack(forward, forwardPrev, trackBuilder, pCurr, pNext, offset, targetOffset, submesh, false);
        BuildHalfTrack(-forward, -forwardPrev, trackBuilder, pCurr, pNext, offset, targetOffset, submesh, true);
    }
示例#13
0
    void train()
    {
        string     code       = "track 50 up 60 0 0;track 70 down 120 0 0;track 20 up 60 0 0;track 50 forward 0 0 0;";
        GameObject startPoint = new GameObject("track start point");

        startPoint.transform.position = new Vector3(0, 2, 0);
        tb = new TrackBuilder(startPoint);
        tb.generate(code);
        _trainAnimFlag = true;
    }
示例#14
0
    // Start is called before the first frame update
    void Start()
    {
        TB = Tb.gameObject.GetComponent <TrackBuilder>();

        //  foreach (var Block in TB.TrackPeices)
        //  {
        // GameObject Block1 = Block +1;
        //     Direction = (Block.transform.position - Block.transform.position);
        // }
    }
示例#15
0
 // Use this for initialization
 void Start()
 {
     vr = new VR();
     AStatus.sceneNumber = 3;
     builder             = new TrackBuilder();
     builder.BuildTrack();
     com = new Client();
     //tclient = new TcpClient();
     com.Connect();
 }
示例#16
0
        public static Coord GetStart(this IGrid grid)
        {
            var res = new GridNavigator().FindFirst(grid, c => TrackBuilder.IsTrackPiece(c));

            if (!res.IsInGrid)
            {
                throw new InvalidOperationException($"Grid Start could not be found.");
            }

            return(res.NewPosition);
        }
示例#17
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        TrackBuilder myScript = (TrackBuilder)target;

        if (GUILayout.Button("Generate Track"))
        {
            myScript.BuildTrack();
        }
    }
    void CreatePath(List <Vector3> points, TrackBuilder trackBuilder)
    {
        for (int i = 1; i < points.Count + 1; i++)
        {
            Vector3 pPrev = points[i - 1];
            Vector3 pCurr = points[i % points.Count];
            Vector3 pNext = points[(i + 1) % points.Count];

            ExtrudeRoad(trackBuilder, pPrev, pCurr, pNext);
        }
    }
示例#19
0
    void CreatePath(List <Vector3> points, TrackBuilder trackBuilder)
    {
        //2. function to define the path - the path is defined by each segment
        for (int i = 1; i < points.Count + 1; i++)
        {
            Vector3 pPrev = points[i - 1];
            Vector3 pCurr = points[i % points.Count];
            Vector3 pNext = points[(i + 1) % points.Count];

            ExtrudeRoad(trackBuilder, pPrev, pCurr, pNext);
        }
    }
示例#20
0
        private TrackSegment4 GetGhostSegment()
        {
            GameObject go = (GameObject)TrackBuilder.GetType()
                            .GetField("ghost", BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic)
                            .GetValue(TrackBuilder);

            if (go == null)
            {
                return(null);
            }
            return(go.GetComponent <TrackSegment4>());
        }
示例#21
0
        public void CanGetTrack(string trackStr, int x, int y, String desiredResult)
        {
            // Arrange
            var   grid = new Grid(trackStr);
            Coord pos  = new Coord(x, y);

            // Act
            var track = TrackBuilder.GetTrack(pos, grid);

            // Assert
            track.ToString().Should().Be(desiredResult);
        }
示例#22
0
    public static void SaveTrack(TrackBuilder tiles, string fileName)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        string          path      = Application.persistentDataPath + "/" + fileName + ".fun";

        Debug.Log("Created File: " + path);
        FileStream stream = new FileStream(path, FileMode.Create);

        Save SavedTracks = new Save(tiles);

        formatter.Serialize(stream, SavedTracks);
        stream.Close();
    }
示例#23
0
        internal static void OnTrackManagerCreated(TrackBuilder trackManager, CustomBeatmapData customBeatmapData)
        {
            List <CustomEventData> customEventsData = customBeatmapData.customEventsData;

            foreach (CustomEventData customEventData in customEventsData)
            {
                if (customEventData.type == ASSIGNPLAYERTOTRACK)
                {
                    string?trackName = customEventData.data.Get <string>(TRACK);
                    if (trackName != null)
                    {
                        trackManager.AddTrack(trackName);
                    }
                }
            }
        }
    void Awake()
    {
        inputManager = GetComponent <InputManager> ();
        trackPoints  = new Transform[track.childCount];

        for (int i = 0; i < trackPoints.Length; i++)
        {
            trackPoints [i] = track.GetChild(i);
        }
        car          = GetComponent <carController> ();
        carRigidbody = GetComponent <Rigidbody> ();
        trackBuilder = track.GetComponent <TrackBuilder> ();

        tdr   = GetComponent <TrainingDataRecorder> ();
        brain = GetComponent <NeuralBrain> ();
    }
        internal static void CreateEnvironmentTracks(TrackBuilder trackManager, CustomBeatmapData customBeatmapData)
        {
            IEnumerable <Dictionary <string, object?> >?environmentData = customBeatmapData.customData.Get <List <object> >(ENVIRONMENT)?.Cast <Dictionary <string, object?> >();

            if (environmentData != null)
            {
                foreach (Dictionary <string, object?> gameObjectData in environmentData)
                {
                    string?trackName = gameObjectData.Get <string>("_track");
                    if (trackName != null)
                    {
                        trackManager.AddTrack(trackName);
                    }
                }
            }
        }
示例#26
0
    public RailGenerator(TrackBuilder tmp_gt)
    {
        gt   = tmp_gt;
        data = Data.data;

        rollercoaster = new GameObject();
        track_main    = new GameObject("tracks");
        hoarding_main = new GameObject("hoardings");
        tunnels_main  = new GameObject("tunnels");
        railings      = new GameObject("railings");

        track_main.transform.parent    = rollercoaster.transform;
        hoarding_main.transform.parent = rollercoaster.transform;
        tunnels_main.transform.parent  = rollercoaster.transform;
        railings.transform.parent      = rollercoaster.transform;
    }
示例#27
0
    public Save(TrackBuilder tiles)
    {
        isLoop               = tiles.isLoop;
        numOfLaps            = 3;
        SizeOfTheGrid        = tiles.gridSize;
        index                = new int[tiles.count];
        rotacaoEmZdeCadaTile = new float[tiles.count];
        PosicoesDeEntradaX   = new float[tiles.count];
        PosicoesDeEntradaY   = new float[tiles.count];
        EscalaX              = new float[tiles.count];
        EscalaY              = new float[tiles.count];
        EscalaZ              = new float[tiles.count];
        numOfTiles           = tiles.count;

        for (int i = 0; i < index.Length;)
        {
            for (int x = 0; x < tiles.gridSize; x++)
            {
                for (int y = 0; y < tiles.gridSize; y++)
                {
                    if (tiles.SlotGrid[x, y].CurrentState == TrackSlot.State.FULL)
                    {
                        if (tiles.SlotGrid[x, y].hasPiece == true)
                        {
                            Debug.Log("Tile Index: " + tiles.SlotGrid[x, y].Holder.index);

                            index[i] = tiles.SlotGrid[x, y].Holder.index;
                            rotacaoEmZdeCadaTile[i] = tiles.SlotGrid[x, y].Piece.transform.localEulerAngles.y;

                            Debug.Log("Save/ Piece rot: " + tiles.SlotGrid[x, y].Piece.transform.localEulerAngles.y);
                            Debug.Log("Save/ supposed rot: " + tiles.SlotGrid[x, y].Holder.pieceRotation);
                            Debug.Log("Save/ Each Z rot: " + rotacaoEmZdeCadaTile[i]);

                            PosicoesDeEntradaX[i] = tiles.SlotGrid[x, y].transform.position.x;
                            PosicoesDeEntradaY[i] = tiles.SlotGrid[x, y].transform.position.z;
                            EscalaX[i]            = tiles.SlotGrid[x, y].transform.localScale.x;
                            EscalaY[i]            = tiles.SlotGrid[x, y].transform.localScale.y;
                            EscalaZ[i]            = tiles.SlotGrid[x, y].transform.localScale.z;

                            i++;
                        }
                    }
                }
            }
        }
    }
示例#28
0
    private void ExtrudeRoad(TrackBuilder trackBuilder, Vector3 pPrev, Vector3 pCurr, Vector3 pNext)
    {
        //3. This method will be usedto create the different segments for each segment we are going to draw the road marker
        // (i.e white line in the middle), draw the road on each side of the line, draw the edges -
        //all these are going to be placed in different positions

        //Roadline
        Vector3 offset       = Vector3.zero;
        Vector3 targetOffset = Vector3.forward * lineWidth;

        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, 0);

        //Road
        offset      += targetOffset;
        targetOffset = Vector3.forward * roadWidth;

        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, 1);

        int stripeSubmesh = 2;

        if (stripeCheck)
        {
            stripeSubmesh = 3;
        }

        stripeCheck = !stripeCheck;

        //Edge
        offset      += targetOffset;
        targetOffset = Vector3.up * edgeHeight;

        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, stripeSubmesh);

        //Edge Top
        offset      += targetOffset;
        targetOffset = Vector3.forward * edgeWidth;

        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, stripeSubmesh);

        //Edge
        offset      += targetOffset;
        targetOffset = -Vector3.up * edgeHeight;

        MakeRoadQuad(trackBuilder, pPrev, pCurr, pNext, offset, targetOffset, stripeSubmesh);
    }
示例#29
0
 void Start()
 {
     if (mode == usageMode.train)
     {
         c     = startIndex;
         track = GetComponent <CarAiController>().trackBuilder;
         if (initOnStart)
         {
             writer = new StreamWriter(write_path + "/track_data_temp.csv");
         }
         cc = FindObjectOfType <carController>();
     }
     else
     {
         ThreadStart ts = new ThreadStart(GetInfo);
         mThread = new Thread(ts);
         mThread.Start();
     }
 }
示例#30
0
        public List <Segment> Build(IDbRecordset recordset)
        {
            var points = new List <Point>();

            while (recordset.Read())
            {
                var dateTime        = (DateTime)recordset["EndTime"];
                var latitude        = (double)Convert.ChangeType(recordset["Latitude"], typeof(double));
                var longitude       = (double)Convert.ChangeType(recordset["Longitude"], typeof(double));
                var satellitesCount = (int)recordset["SatellitesCount"];

                var point = new Point(dateTime, latitude, longitude, satellitesCount);
                points.Add(point);
            }

            var builder = new TrackBuilder(Options);

            return(builder.Build(points));
        }
示例#31
0
 void OnEnable()
 {
     trackBuilder = target as TrackBuilder;
 }