예제 #1
0
    private void OnCollisionEnter(Collision collision)
    {
        GameObject projectile = collision.collider.gameObject;
        Boolean    destroy    = false;

        HapticAttributes      hapticAttributes      = projectile.GetComponent <HapticAttributes>();
        TemperatureAttributes temperatureAttributes = projectile.GetComponent <TemperatureAttributes>();
        EMSAttributes         emsAttributes         = projectile.GetComponent <EMSAttributes>();

        if (hapticAttributes != null)
        {
            HapticFeedback(hapticAttributes, collision);
            destroy = true;
        }

        if (temperatureAttributes != null)
        {
            TemperatureFeedback(temperatureAttributes, collision);
            destroy = true;
        }

        if (emsAttributes != null)
        {
            EMSFeedback(emsAttributes, collision);
            destroy = true;
        }


        if (destroy == true)
        {
            Destroy(projectile);
        }
    }
예제 #2
0
        public List <TemperaturesOrigin> GetTemperatureAttributes()
        {
            List <TemperaturesOrigin> temperaturesOrigins = new List <TemperaturesOrigin>();

            try
            {
                var conn = _dbContext.ConnectToDB();

                var rdr = _dbContext.ExecuteQuery("SELECT ROUND((dewp - 32) * 5.0 / 9 , 3) AS dewpp , ROUND((temp - 32) * 5.0 / 9 ,3) AS tempp, origin, time_hour FROM weather;", conn);

                string origin = "";
                int    j      = 0;
                while (rdr.Read() && j < 3)
                {
                    var temperatureOrigin = new TemperaturesOrigin();
                    temperatureOrigin.Origin = rdr.GetString(2);
                    origin = temperatureOrigin.Origin;
                    var temperatureAtts = new List <TemperatureAttributes>();
                    do
                    {
                        var temperatureAtt = new TemperatureAttributes()
                        {
                            Dewp = rdr.GetDouble(0),
                            Temp = rdr.GetDouble(1),
                            Time = rdr.GetDateTime(3)
                        };
                        temperatureAtts.Add(temperatureAtt);
                        origin = temperatureOrigin.Origin;
                    } while (rdr.Read() && rdr.GetString(2) == origin);

                    temperatureOrigin.TemperatureAtts = temperatureAtts;
                    temperaturesOrigins.Add(temperatureOrigin);
                    j++;
                }

                _dbContext.CloseConnections(rdr, conn);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            return(temperaturesOrigins);
        }
예제 #3
0
    private void TemperatureFeedback(TemperatureAttributes temperatureAttributes, Collision collision)
    {
        Module module = moduleByType[ActuatorType.Temperature];

        double[] currentTemperatures = module.getMeasuredValues();

        if (module == null)
        {
            Debug.Log("ERROR: module not found");
            return;
        }

        int[]     newTemeratures = moduleValues[module];
        Vector3[] actuatorPoints = module.getPositionOfActuators();

        /*
         * float mass_head = this.GetComponent<HapticAttributes>().Mass;
         * float mass_collider = collision.collider.GetComponent<HapticAttributes>().Mass;
         *
         * float c_head = this.GetComponent<TemperatureAttributes>().C;
         * float c_collider = collision.collider.GetComponent<TemperatureAttributes>().C;
         *
         * int t_collider = collision.collider.GetComponent<TemperatureAttributes>().Temperature;
         *
         * for (int actuator = 0; actuator < module.count(); actuator++) {
         *  Vector3 closestPointOnColliderInDirectionActuator = collision.collider.ClosestPoint(actuatorPoints[actuator]);
         *
         *  //Riemansche Mischregel
         *  int t_actuator = currentTemperatures[actuator];
         *
         *  float targetTemperature = (mass_head * c_head * t_actuator + mass_collider * c_collider * t_collider) / (mass_head * c_head + mass_collider * c_collider);
         *
         *  float deltaTemperature = targetTemperature - t_actuator;
         *
         *  float distance = Vector3.Distance(actuatorPoints[actuator], closestPointOnColliderInDirectionActuator);
         *
         *  //temperature linear with distance ????? TODO!!, USE C
         *
         *  newTemeratures[actuator] = (int)(t_actuator + deltaTemperature/distance);
         * }
         */

        for (int actuator = 0; actuator < module.count(); actuator++)
        {
            float distance            = Vector3.Distance(actuatorPoints[actuator], collision.collider.ClosestPoint(actuatorPoints[actuator]));
            float expectedTemperature = collision.collider.GetComponent <TemperatureAttributes>().ExpectedTemperature;
            //newTemeratures[actuator] = (int)(expectedTemperature);

            //Debug.Log("Distance on Surface: " + distance + " Distance Resolution: " + DistanceResolution);

            if (distance < DistanceResolution)
            {
                distance = 1;
            }
            else
            {
                distance = distance / DistanceResolution;
            }

            /*
             * float deltaTemperature = (expectedTemperature - (float)currentTemperatures[actuator]) / (distance);
             *
             * if (Math.Abs(deltaTemperature) > MinFeelableTempDif)
             * {
             *  newTemeratures[actuator] = (int)(currentTemperatures[actuator] + deltaTemperature);
             * }
             * else
             * {
             *  newTemeratures[actuator] = 0;
             * }
             */

            newTemeratures[actuator] = (int)(expectedTemperature / distance);

            //Debug.Log("expected: " + collision.collider.GetComponent<TemperatureAttributes>().ExpectedTemperature + " current: " + currentTemperatures[actuator] + " new: " + newTemeratures[actuator] + " distance: "+distance);
        }

        QueueValues(module.ID, newTemeratures);

        nextTemperatureStep = 0f;
    }