public ActionResult AddToTrack(int?VehicleId)
        {
            VehicleTrack = new VehicleTrack();

            int total = _trackDBContext.VehicleTracks.Count();

            if (total >= 5)
            {
                return(Json(new { success = false, message = "race track is full!" }));
            }

            var vehicle = _trackDBContext.VehicleTracks.FirstOrDefault(u => u.VehicleId == VehicleId);

            if (vehicle != null)
            {
                return(Json(new { success = false, message = "this vehicle is already on track!" }));
            }
            else
            {
                VehicleTrack.VehicleId = (int)VehicleId;
                VehicleTrack.TrackId   = 1;
                _trackDBContext.VehicleTracks.Add(VehicleTrack);
                _trackDBContext.SaveChanges();
            }

            return(View("Index"));
        }
示例#2
0
    void Update()
    {
        var chg = CheckChg();

        foreach (var vname in registeredVehicleTracks)
        {
            var vtrk = VehicleTrack.Lookup(vname);
            if (vtrk != null)
            {
                vtrk.UpdateState(chg);
            }
        }
        if (simulationRunning)
        {
            CheckVehicleCollisions();
        }
        if (moveToLastCollision)
        {
            MoveToLastCollision();
            moveToLastCollision = false;
        }
        if (restartCollisionVehicles)
        {
            RestartThings();
            restartCollisionVehicles = false;
        }
        if (loadAllTracks)
        {
            StartCoroutine(LoadAllTracks());
            loadAllTracks = false;
        }
        if (unloadAllTracks)
        {
            UnloadAllTracks();
            unloadAllTracks = false;
        }
        if (testStartSimulation)
        {
            RestartSimulation();
            testStartSimulation = false;
        }
        if (testStopSimulation)
        {
            StopSimulation();
            testStopSimulation = false;
        }
        UpdateSimulationTime();
        updatecount++;
    }
        public ActionResult RemoveFromTrack(int?VehicleId)
        {
            VehicleTrack = _trackDBContext.VehicleTracks.FirstOrDefault(u => u.VehicleId == VehicleId);

            if (VehicleTrack == null)
            {
                return(Json(new { success = false, message = "vehicle not found!" }));
            }
            else
            {
                _trackDBContext.VehicleTracks.Remove(VehicleTrack);
                _trackDBContext.SaveChanges();
            }

            return(Json(new { success = false, message = "Removed from track!" }));
        }
示例#4
0
    public static VehicleTrack[] RegisterTracks(VehicleTrackMan dtm, string[] tracknames, string[] colors)
    {
        var ln = tracknames.Length;
        var rv = new VehicleTrack[ln];

        for (int i = 0; i < ln; i++)
        {
            var iclr    = i % colors.Length;
            var newname = tracknames[i];
            var newclr  = colors[iclr];
            var vtrkgo  = new GameObject(newname);
            var vtrk    = vtrkgo.AddComponent <VehicleTrack>();
            vtrk.Init(dtm, newname, newclr);
            rv[i] = vtrk;
            dozyTrackLookup[newname] = vtrk;
        }
        tracklayer    = dtm.qmm.layerman.AddLayer("tracks");
        trackParent   = tracklayer.gameObject;
        vehiclelayer  = dtm.qmm.layerman.AddLayer("vehicles");
        vehicleParent = vehiclelayer.gameObject;
        return(rv);
    }
示例#5
0
 // Start is called before the first frame update
 void Start()
 {
     vehicleTracks           = VehicleTrack.RegisterTracks(this, tracknames, trackcolors);
     registeredVehicleTracks = VehicleTrack.GetRegisteredTracks();
 }
示例#6
0
    public void Init(VehicleTrack vehicleTrack, SimpleDf sdf, GameObject vehicleParent, string avatartype, float startime, float avaSecpersecInput)
    {
        this.vehicleTrack = vehicleTrack;
        this.vtm          = vehicleTrack.vtm;
        this.sdf          = sdf;
        this.avaSecpersec = avaSecpersecInput;
        var cnt = Count(avatartype);

        totcnt++;

        avaGo = new GameObject(avatartype + "_" + cnt);
        avaGo.transform.parent = vehicleParent.transform;
        GameObject prefabgo = null;
        var        shift    = Vector3.zero;
        var        angle    = 0;
        var        scale    = 1;

        switch (avatartype)
        {
        case "DumpTruck":
            scale    = 1;
            angle    = 180;
            prefabgo = Resources.Load <GameObject>("obj/DumpTruck_TS1");
            break;

        case "Dozer1":
            scale    = 1;
            angle    = 0;
            shift    = new Vector3(-28.80f, 0, 0);
            prefabgo = Resources.Load <GameObject>("obj/Dozer1");
            break;

        case "Dozer2":
            scale    = 1;
            angle    = 0;
            shift    = new Vector3(-20, 0, 0);
            prefabgo = Resources.Load <GameObject>("obj/Dozer2");
            break;

        case "Minehaul1":
            scale    = 1;
            angle    = 0;
            shift    = new Vector3(0, 0, 0);
            prefabgo = Resources.Load <GameObject>("obj/Minehaul1");
            break;

        case "Shovel1":
            scale    = 1;
            angle    = 0;
            shift    = new Vector3(-10, 0, 0);
            prefabgo = Resources.Load <GameObject>("obj/Shovel1");
            break;

        case "Rover":
            scale    = 1;
            angle    = 0;
            shift    = new Vector3(0, 0, 0);
            prefabgo = Resources.Load <GameObject>("obj/Rover2");
            break;

        case "Sailboat1":
            scale    = 1;
            angle    = 90;
            shift    = new Vector3(0, 0, 0);
            prefabgo = Resources.Load <GameObject>("obj/Sailboat1");
            break;

        case "Sailboat100":
            scale             = 100;
            angle             = 90;
            this.avaSecpersec = avaSecpersec * 100;
            shift             = new Vector3(0, 0, 0);
            prefabgo          = Resources.Load <GameObject>("obj/Sailboat1");
            break;
        }
        switch (vtm.vehicleInitialPlacement)
        {
        case VehicleInitialPlacement.zero:
            this.starttime = avaSecpersec * vehicleTrack.vtm.GetSimulationTime();
            break;

        case VehicleInitialPlacement.random:
            this.starttime = vehicleTrack.GetRandomTrackTime();
            break;
        }
        if (prefabgo == null)
        {
            Debug.LogWarning($"Prefab not loaded for {avatartype}");
            return;
        }
        var       skav3 = prefabgo.transform.localScale * scale;
        Transform t     = UnityEngine.Object.Instantiate <Transform>(prefabgo.transform);

        t.localScale    = skav3;
        t.localRotation = Quaternion.Euler(0, angle, 0);
        t.position      = shift;
        t.SetParent(avaGo.transform, worldPositionStays: false);
        MoveToTracktime();
    }