Ejemplo n.º 1
0
    public void InitializeDebrisArray(RobotEnvironment env)
    {
        environment = env;

        // Get list of debris Transforms
        List <Debris> debrisList = environment.GetDebris();

        // Initialize list of DebrisInfos
        debrisInfos = new List <DebrisInfo>();

        // Add each debris transform and starting values to info list
        foreach (Debris d in debrisList)
        {
            DebrisInfo info = new DebrisInfo();
            info.transform             = d.transform;
            info.lastKnownPosition     = Vector3.zero;
            info.isVisible             = false;
            info.distanceFromRobot     = Vector3.Distance(d.transform.position, transform.position);
            info.lastDistanceFromRobot = info.distanceFromRobot;

            debrisInfos.Add(info);
        }

        UpdateVision();
    }
Ejemplo n.º 2
0
    public List <DebrisInfo> UpdateVision()
    {
        if (debrisInfos == null)
        {
            return(new List <DebrisInfo>());
        }

        if (debrisInfos.Count > 0 && debrisInfos[0].transform == null)
        {
            return(new List <DebrisInfo>());
        }

        Vector3 currentSensorPosition = transform.InverseTransformPoint(sensorPosition.position);

        // For every debris -> check if it is visible
        for (int i = 0; i < debrisInfos.Count; i++)
        {
            // Assign struct to variable to allow modification
            DebrisInfo currentDebrisInfo = debrisInfos[i];

            // Current debris-position
            Vector3 currentDebrisPosition = transform.InverseTransformPoint(currentDebrisInfo.transform.position);

            // Vector from Sensor-position to current Debris-position
            Vector3 directionToDebris = currentDebrisPosition - currentSensorPosition;

            // Last Debris distance
            currentDebrisInfo.lastDistanceFromRobot = currentDebrisInfo.distanceFromRobot;

            // Debris distance from robot
            currentDebrisInfo.distanceFromRobot = currentDebrisPosition.magnitude;

            // If debris is within vision cone
            if (DirectionIsWithinVision(directionToDebris))
            {
                Ray   ray = new Ray(currentSensorPosition, directionToDebris);
                float distanceToDebris = Vector3.Distance(currentSensorPosition, currentDebrisPosition);

                // Cast a ray from the Sensor-position to Debris-position
                // If raycast from Robot to Debris gets blocked -> not visible, else -> visible
                if (Physics.Raycast(ray, out RaycastHit hitInfo, distanceToDebris, layerMask))
                {
                    currentDebrisInfo.isVisible = false;
                }
                else
                {
                    currentDebrisInfo.isVisible         = true;
                    currentDebrisInfo.lastKnownPosition = currentDebrisPosition;
                }
            }
Ejemplo n.º 3
0
 void Start()
 {
     instance = this;
     DontDestroyOnLoad(this);
 }