예제 #1
0
    private void Start()
    {
        MapOrigin            = MapOrigin.Find();
        NPCSpawnCheckBitmask = LayerMask.GetMask("NPC", "Agent");
        SpawnBoundsSize      = new Vector3(MapOrigin.NPCSpawnBoundSize, 50f, MapOrigin.NPCSpawnBoundSize);
        NPCMaxCount          = MapOrigin.NPCMaxCount;
        SimulatorCamera      = SimulatorManager.Instance.CameraManager.SimulatorCamera;
        MapManager           = SimulatorManager.Instance.MapManager;

        NPCVehicles.Clear();
        foreach (var data in Simulator.Web.Config.NPCVehicles)
        {
            NPCVehicles.Add(new NPCS {
                NPCType = data.Value.NPCType,
                Prefab  = data.Value.prefab,
            });

            if (NPCColorData.Count(d => d.Type == data.Value.NPCType) == 0)
            {
                Debug.LogWarning($"NPC of type {data.Value.NPCType} loaded but no colors to pick configured for this type");
            }
        }

        var network = Loader.Instance.Network;

        network.MessagesManager?.RegisterObject(this);
        if (!SimulatorManager.Instance.IsAPI && !network.IsClient)
        {
            SpawnNPCPool();
            if (NPCActive)
            {
                SetNPCOnMap();
            }
        }
    }
예제 #2
0
    private void Start()
    {
        MapOrigin            = MapOrigin.Find();
        PedSpawnCheckBitmask = LayerMask.GetMask("Pedestrian", "Agent", "NPC");
        SpawnBoundsSize      = new Vector3(MapOrigin.PedSpawnBoundSize, 50f, MapOrigin.PedSpawnBoundSize);
        PedMaxCount          = MapOrigin.PedMaxCount;
        SimulatorCamera      = SimulatorManager.Instance.CameraManager.SimulatorCamera;

        SpawnInfo[] spawnInfos = FindObjectsOfType <SpawnInfo>();
        var         pt         = Vector3.zero;

        if (spawnInfos.Length > 0)
        {
            pt = spawnInfos[0].transform.position;
        }
        NavMeshHit hit;

        if (NavMesh.SamplePosition(pt, out hit, 1f, NavMesh.AllAreas))
        {
            InitPedestrians();
            if (PedestriansActive)
            {
                SetPedOnMap();
            }
        }
        else
        {
            var sceneName = SceneManager.GetActiveScene().name;
            Debug.LogError($"{sceneName} is missing Pedestrian NavMesh");
            gameObject.SetActive(false);
        }
    }
예제 #3
0
 private void Awake()
 {
     RigidBody = GetComponentInParent <Rigidbody>();
     Actions   = GetComponentInParent <VehicleActions>();
     Dynamics  = GetComponentInParent <IVehicleDynamics>();
     MapOrigin = MapOrigin.Find();
 }
예제 #4
0
        public void Execute(JSONNode args)
        {
            var api = ApiManager.Instance;

            var map = MapOrigin.Find();

            if (map == null)
            {
                api.SendError(this, "MapOrigin not found. Is the scene loaded?");
                return;
            }

            var position = args["transform"]["position"].ReadDouble3();
            var rotation = args["transform"]["rotation"].ReadDouble3();

            double northing, easting;

            map.PositionToNorthingEasting(position, out northing, out easting);

            double latitude, longitude;

            map.NorthingEastingToLatLong(northing, easting, out latitude, out longitude);

            var result = new JSONObject();

            result.Add("latitude", new JSONNumber(latitude));
            result.Add("longitude", new JSONNumber(longitude));
            result.Add("northing", new JSONNumber(northing));
            result.Add("easting", new JSONNumber(easting));
            result.Add("altitude", new JSONNumber(position.y + map.AltitudeOffset));
            result.Add("orientation", new JSONNumber(-rotation.y));

            api.SendResult(this, result);
        }
예제 #5
0
    private void Start()
    {
        MapOrigin            = MapOrigin.Find();
        spawnsManager        = GetComponent <SpawnsManager>();
        PedSpawnCheckBitmask = LayerMask.GetMask("Pedestrian", "Agent", "NPC");
        PedMaxCount          = MapOrigin.PedMaxCount;
        SimCameraManager     = SimulatorManager.Instance.CameraManager;
        SimulatorCamera      = SimCameraManager.SimulatorCamera;
        MapManager           = SimulatorManager.Instance.MapManager;

        SpawnInfo[] spawnInfos = FindObjectsOfType <SpawnInfo>();
        Loader.Instance.Network.MessagesManager?.RegisterObject(this);
        var pt = Vector3.zero;

        if (spawnInfos.Length > 0)
        {
            pt = spawnInfos[0].transform.position;
        }

        if (Loader.Instance.Network.IsClient)
        {
            return;
        }

        if (NavMesh.SamplePosition(pt, out NavMeshHit hit, 1f, NavMesh.AllAreas))
        {
            if (!SimulatorManager.Instance.IsAPI && !Loader.Instance.Network.IsClient)
            {
                SpawnPedPool();
                if (PedestriansActive)
                {
                    SetPedOnMap(true);
                }
            }
        }
예제 #6
0
    private void Start()
    {
        MapOrigin            = MapOrigin.Find();
        PedSpawnCheckBitmask = LayerMask.GetMask("Pedestrian", "Agent", "NPC");
        SpawnBoundsSize      = new Vector3(MapOrigin.PedSpawnBoundSize, 50f, MapOrigin.PedSpawnBoundSize);
        PedMaxCount          = MapOrigin.PedMaxCount;
        SimulatorCamera      = SimulatorManager.Instance.CameraManager.SimulatorCamera;

        SpawnInfo[] spawnInfos = FindObjectsOfType <SpawnInfo>();
        Loader.Instance.Network.MessagesManager?.RegisterObject(this);
        var pt = Vector3.zero;

        if (spawnInfos.Length > 0)
        {
            pt = spawnInfos[0].transform.position;
        }

        if (Loader.Instance.Network.IsClient)
        {
            return;
        }

        if (NavMesh.SamplePosition(pt, out NavMeshHit hit, 1f, NavMesh.AllAreas))
        {
            InitPedestrians();
            if (PedestriansActive)
            {
                SetPedOnMap();
            }
        }
예제 #7
0
        public void Start()
        {
            RigidBody = GetComponentInParent <Rigidbody>();
            MapOrigin = MapOrigin.Find();

            Task.Run(Publisher);
        }
예제 #8
0
    private void Start()
    {
        MapOrigin        = MapOrigin.Find();
        spawnsManager    = GetComponent <SpawnsManager>();
        NPCMaxCount      = MapOrigin.NPCMaxCount;
        SimCameraManager = SimulatorManager.Instance.CameraManager;
        SimulatorCamera  = SimCameraManager.SimulatorCamera;
        MapManager       = SimulatorManager.Instance.MapManager;
        InitSpawn        = true;

        NPCVehicles.Clear();

        if (Loader.Instance.CurrentSimulation == null)
        {
            return;
        }

        if (Loader.Instance.CurrentSimulation.NPCs == null)
        {
            Loader.Instance.CurrentSimulation.NPCs = Simulator.Web.Config.NPCVehicles.Values.ToArray();
        }

        foreach (var data in Loader.Instance.CurrentSimulation.NPCs)
        {
            if (data.Enabled)
            {
                GameObject obj = null;
                foreach (var item in Simulator.Web.Config.NPCVehicles.Values)
                {
                    if (item.Name == data.Name)
                    {
                        obj = item.Prefab;
                    }
                }
                NPCVehicles.Add(new NPCAssetData
                {
                    NPCType = data.NPCType,
                    Prefab  = obj,
                });

                if (NPCColorData.Count(d => d.Type == data.NPCType) == 0)
                {
                    Debug.LogWarning($"NPC of type {data.NPCType} loaded but no colors to pick configured for this type");
                }
            }
        }

        var network = Loader.Instance.Network;

        network.MessagesManager?.RegisterObject(this);
        if (!SimulatorManager.Instance.IsAPI && !network.IsClient)
        {
            SpawnNPCPool();
            if (NPCActive)
            {
                SetNPCOnMap(true);
            }
        }
    }
 void Start()
 {
     MapOrigin      = MapOrigin.Find();
     WireframeBoxes = SimulatorManager.Instance.WireframeBoxes;
     rangeTrigger.SetCallbacks(WhileInRange);
     rangeTrigger.transform.localScale = MaxDistance * UnityEngine.Vector3.one;
     nextSend = Time.time + 1.0f / Frequency;
 }
예제 #10
0
        public void Execute(JSONNode argsArray)
        {
            var api = ApiManager.Instance;

            var map = MapOrigin.Find();

            if (map == null)
            {
                api.SendError(this, "MapOrigin not found. Is the scene loaded?");
                return;
            }

            var results = new JSONArray();

            var arr = argsArray.AsArray;

            foreach (var args in arr.Children)
            {
                Vector3 position;
                if (args["latitude"] == null)
                {
                    var northing = args["northing"].AsDouble;
                    var easting  = args["easting"].AsDouble;

                    position = map.NorthingEastingToPosition(northing, easting);
                }
                else
                {
                    var latitude  = args["latitude"].AsDouble;
                    var longitude = args["longitude"].AsDouble;

                    double northing, easting;
                    map.LatLongToNorthingEasting(latitude, longitude, out northing, out easting);

                    position = map.NorthingEastingToPosition(northing, easting);
                }

                var altitude = args["altitude"];
                if (altitude != null)
                {
                    position.y = altitude.AsFloat - map.AltitudeOffset;
                }

                Vector3 rotation    = Vector3.zero;
                var     orientation = args["orientation"];
                if (orientation != null)
                {
                    rotation.y = -orientation.AsFloat;
                }

                var result = new JSONObject();
                result.Add("position", position);
                result.Add("rotation", rotation);

                results.Add(result);
            }
            api.SendResult(this, results);
        }
예제 #11
0
        public override void OnBridgeSetup(IBridge bridge)
        {
            Bridge = bridge;
            Writer = bridge.AddWriter <CanBusData>(Topic);

            RigidBody = GetComponentInParent <Rigidbody>();
            Actions   = GetComponentInParent <VehicleActions>();
            Dynamics  = GetComponentInParent <VehicleDynamics>();
            MapOrigin = MapOrigin.Find();
        }
예제 #12
0
 void Start()
 {
     WireframeBoxes = SimulatorManager.Instance.WireframeBoxes;
     rangeTrigger.SetCallbacks(WhileInRange);
     rangeTrigger.transform.localScale = MaxDistance * Vector3.one;
     nextSend   = SimulatorManager.Instance.CurrentTime + 1.0f / Frequency;
     MapOrigin  = MapOrigin.Find();
     startTime  = SimulatorManager.Instance.CurrentTime;
     prevTimes  = new Dictionary <string, double>();
     isToRecord = false;
 }
예제 #13
0
        public void Execute(JSONNode args)
        {
            var api = ApiManager.Instance;

            var map = MapOrigin.Find();

            if (map == null)
            {
                api.SendError("MapOrigin not found. Is the scene loaded?");
                return;
            }

            Vector3 position;

            if (args["latitude"] == null)
            {
                var northing = args["northing"].AsDouble;
                var easting  = args["easting"].AsDouble;

                position = map.FromNorthingEasting(northing, easting);
            }
            else
            {
                var latitude  = args["latitude"].AsDouble;
                var longitude = args["longitude"].AsDouble;

                double northing, easting;
                map.FromLatitudeLongitude(latitude, longitude, out northing, out easting);

                position = map.FromNorthingEasting(northing, easting);
            }

            var altitude = args["altitude"];

            if (altitude != null)
            {
                position.y = altitude.AsFloat - map.AltitudeOffset;
            }

            Vector3 rotation    = Vector3.zero;
            var     orientation = args["orientation"];

            if (orientation != null)
            {
                rotation.y = -orientation.AsFloat;
            }

            var result = new JSONObject();

            result.Add("position", position);
            result.Add("rotation", rotation);

            api.SendResult(result);
        }
예제 #14
0
    protected virtual void Start()
    {
        MapOrigin     = MapOrigin.Find();
        SpawnsManager = GetComponent <SpawnsManager>();
        NPCMaxCount   = MapOrigin.NPCMaxCount;
        NPCVehicles.Clear();
        InitialSpawn = false;

        if (Loader.Instance.CurrentSimulation == null)
        {
            return;
        }

        if (Loader.Instance.CurrentSimulation.NPCs == null)
        {
            Loader.Instance.CurrentSimulation.NPCs = Simulator.Web.Config.NPCVehicles.Values.ToArray();
        }

        foreach (var data in Loader.Instance.CurrentSimulation.NPCs)
        {
            if (data.Enabled)
            {
                GameObject obj = null;
                foreach (var item in Simulator.Web.Config.NPCVehicles.Values)
                {
                    if (item.Name == data.Name)
                    {
                        obj = item.Prefab;
                    }
                }
                NPCVehicles.Add(new NPCAssetData
                {
                    NPCType   = data.NPCType,
                    Prefab    = obj,
                    Name      = data.Name,
                    AssetGuid = data.AssetGuid
                });

                if (NPCColorData.Count(d => d.Type == data.NPCType) == 0)
                {
                    Debug.LogWarning($"NPC of type {data.NPCType} loaded but no colors to pick configured for this type");
                }
            }
        }

        var network = Loader.Instance.Network;

        network.MessagesManager?.RegisterObject(this);
        if (!SimulatorManager.Instance.IsAPI && !network.IsClient) // TODO API mode always remove need to pool check
        {
            SpawnNPCPool();
        }
    }
예제 #15
0
    protected virtual void Initialize()
    {
        if (IsInitialized)
        {
            return;
        }

        MapOrigin            = MapOrigin.Find();
        SpawnBoundsSize      = new Vector3(MapOrigin.NPCSpawnBoundSize, 50f, MapOrigin.NPCSpawnBoundSize);
        VisibleLM            = LayerMask.GetMask("Default", "NPC", "Pedestrian", "Obstacle");
        NPCSpawnCheckBitmask = LayerMask.GetMask("NPC", "Agent", "Pedestrian");
        CacheSpawnPoints();
        IsInitialized = true;
    }
예제 #16
0
    private void Start()
    {
        MapOrigin            = MapOrigin.Find();
        NPCSpawnCheckBitmask = LayerMask.GetMask("NPC", "Agent");
        SpawnBoundsSize      = new Vector3(MapOrigin.NPCSpawnBoundSize, 50f, MapOrigin.NPCSpawnBoundSize);
        NPCMaxCount          = MapOrigin.NPCMaxCount;
        SimulatorCamera      = SimulatorManager.Instance.CameraManager.SimulatorCamera;

        if (!SimulatorManager.Instance.IsAPI)
        {
            SpawnNPCPool();
            if (NPCActive)
            {
                SetNPCOnMap();
            }
        }
    }
예제 #17
0
        void Start()
        {
            WireframeBoxes = SimulatorManager.Instance.WireframeBoxes;

            if (RangeTrigger == null)
            {
                RangeTrigger = GetComponentInChildren <RangeTrigger>();
            }

            RangeTrigger.SetCallbacks(WhileInRange);
            RangeTrigger.transform.localScale = MaxDistance * Vector3.one;

            MapOrigin = MapOrigin.Find();

            Detected   = new Dictionary <uint, Tuple <Detected3DObject, Collider> >();
            CurrentIDs = new HashSet <uint>();

            StartCoroutine(OnPublish());
        }
예제 #18
0
    private void Start()
    {
        MapOrigin            = MapOrigin.Find();
        NPCSpawnCheckBitmask = LayerMask.GetMask("NPC", "Agent");
        SpawnBoundsSize      = new Vector3(MapOrigin.NPCSpawnBoundSize, 50f, MapOrigin.NPCSpawnBoundSize);
        NPCMaxCount          = MapOrigin.NPCMaxCount;
        SimulatorCamera      = SimulatorManager.Instance.CameraManager.SimulatorCamera;

        var network = Loader.Instance.Network;

        network.MessagesManager?.RegisterObject(this);
        if (!SimulatorManager.Instance.IsAPI && !network.IsClient)
        {
            SpawnNPCPool();
            if (NPCActive)
            {
                SetNPCOnMap();
            }
        }
    }
예제 #19
0
        bool ImportApolloMapCalculate(string filePath)
        {
            using (var fs = File.OpenRead(filePath))
            {
                ApolloMap = ProtoBuf.Serializer.Deserialize <Map>(fs);
            }

            var mapName = "Map" + "_" + Encoding.UTF8.GetString(ApolloMap.header.vendor) + "_" + Encoding.UTF8.GetString(ApolloMap.header.district);

            if (!CreateMapHolders(filePath, mapName))
            {
                return(false);
            }

            MapOrigin = MapOrigin.Find(); // get or create a map origin
            if (!CreateOrUpdateMapOrigin(ApolloMap, MapOrigin))
            {
                Debug.LogWarning("Could not find latitude or/and longitude in map header Or not supported projection, mapOrigin is not updated.");
            }

            ImportJunctions();
            ImportLanes();
            ImportRoads();
            ConnectLanes();
            ImportOverlaps();
            ImportStopSigns();
            ImportSignals();
            SetIntersectionTriggerBounds();
            ImportYields();
            UpdateStopLines(); // Update stoplines using intersecting lanes end points
            // SetLaneYieldLanes();
            // ImportCrossWalks();
            // ImportParkingSpaces();
            // ImportSpeedBumps();
            // ImportClearAreas();
            return(true);
        }
예제 #20
0
 protected override void Initialize()
 {
     WireframeBoxes = SimulatorManager.Instance.WireframeBoxes;
     MapOrigin      = MapOrigin.Find();
 }
예제 #21
0
        public void Start()
        {
            MapOrigin = MapOrigin.Find();

            Task.Run(Publisher);
        }
예제 #22
0
 private void Awake()
 {
     MapOrigin     = MapOrigin.Find();
     startPosition = transform.position;
     startRotation = transform.rotation;
 }
예제 #23
0
    private void Start()
    {
        MapOrigin = MapOrigin.Find();
        spawnsManager = GetComponent<SpawnsManager>();
        PedSpawnCheckBitmask = LayerMask.GetMask("Pedestrian", "Agent", "NPC");
        PedMaxCount = MapOrigin.PedMaxCount;
        SimCameraManager = SimulatorManager.Instance.CameraManager;
        SimulatorCamera = SimCameraManager.SimulatorCamera;
        MapManager = SimulatorManager.Instance.MapManager;

        PedestrianData.Clear();

        if (Loader.Instance.CurrentSimulation == null)
        {
            return;
        }

        if (Loader.Instance.CurrentSimulation.Peds == null)
        {
            Loader.Instance.CurrentSimulation.Peds = Simulator.Web.Config.Pedestrians.Values.ToArray();
        }

        foreach (var data in Loader.Instance.CurrentSimulation.Peds)
        {
            if (data.Enabled)
            {
                GameObject obj = null;
                foreach (var item in Simulator.Web.Config.Pedestrians.Values)
                {
                    if (item.Name == data.Name)
                    {
                        obj = item.Prefab;
                    }
                }
                PedestrianData.Add(new PedAssetData
                {
                    Prefab = obj,
                    Name = obj.name,
                });
            }
        }

        SpawnInfo[] spawnInfos = FindObjectsOfType<SpawnInfo>();
        Loader.Instance.Network.MessagesManager?.RegisterObject(this);
        var pt = Vector3.zero;
        if (spawnInfos.Length > 0)
        {
            pt = spawnInfos[0].transform.position;
        }

        if (Loader.Instance.Network.IsClient)
        {
            return;
        }

        if (NavMesh.SamplePosition(pt, out NavMeshHit hit, 1f, NavMesh.AllAreas))
        {
            if (!SimulatorManager.Instance.IsAPI && !Loader.Instance.Network.IsClient)
            {
                var pool = SpawnPedPool();
                if (pool != null)
                {
                    if (PedestriansActive)
                    {
                        SetPedOnMap(true);
                    }
                }
                else
                {
                    Debug.Log("No pedestrian pool, disabled pedestrian manager ");
                    gameObject.SetActive(false);
                }
            }
        }
예제 #24
0
 private void Awake()
 {
     MapOrigin   = MapOrigin.Find();
     GPSLocation = MapOrigin.PositionToGpsLocation(Vector3.zero);
 }
예제 #25
0
 private void Awake()
 {
     mapOrigin   = MapOrigin.Find();
     gpsLocation = mapOrigin.GetGpsLocation(Vector3.zero);
 }
예제 #26
0
 private void Awake()
 {
     MapOrigin = MapOrigin.Find();
 }
예제 #27
0
 private void Awake()
 {
     RigidBody = GetComponentInParent <Rigidbody>();
     MapOrigin = MapOrigin.Find();
 }