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); } }
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); }
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; }