Reset values to 0 when no inputs + stupid question about ELSE statement
So I have these autonomous GameObjects that take a bunch of inputs depending on what they see in their field of view. Thing is, I want their input values to reset to 0 when they are not receiving any of the defined input types. "if (hit == null)" does not do this, because the FOV always collides with its parent GameObject as well as the background and maybe other FOVs. So I though putting an "else" statement at the bottom would fix this, but it doesn't, apparently. Even when none of the 'if' and 'else if' statements are true, the values are not set to 0. Right now I have the current setup:
void OnTriggerStay2D(Collider2D hit)
{
if (hit == null) {
//No hit. Adding this removes an error.
core.aSensor = 0;
core.bSensor = 0;
core.cSensor = 0;
core.gSensor = 0;
core.hSensor = 0;
core.iSensor = 0;
} else if (hit.tag.Equals("Core") && hit.GetComponent<IndividualCore>() != core) {
//Hit on Fauna.
Sensors(hit);
//Get type of target:
core.iSensor = 0.25f;
} else if (hit.tag.Equals("Egg")) {
//Hit on Egg.
Sensors(hit);
//Get type of target:
core.iSensor = 0.5f;
} else if (hit.tag.Equals("Plant")) {
//Hit on Plant.
Sensors(hit);
//Get type of target:
core.iSensor = -0.25f;
} else if (hit.tag.Equals("Food")) {
//Hit on Food.
Sensors(hit);
//Get type of target:
core.iSensor = -0.1f;
} else {
core.aSensor = 0;
core.bSensor = 0;
core.cSensor = 0;
core.gSensor = 0;
core.hSensor = 0;
core.iSensor = 0;
}
}
private void Sensors(Collider2D hit)
{
//Get color of target:
core.aSensor = hit.GetComponent<IndividualCore>().hue.r;
core.bSensor = hit.GetComponent<IndividualCore>().hue.g;
core.cSensor = hit.GetComponent<IndividualCore>().hue.b;
//Get distance to target:
core.gSensor = (float)Math.Tanh(Vector3.Distance(transform.position, hit.transform.position));
//Get angle to target:
if (core != null) { //This fixes a bug where the code would be called for some reason.
float angleToTarget = Vector2.Angle(core.transform.up, (Vector2)(hit.GetComponent<IndividualCore>().transform.position - core.transform.position));
var cross = Vector3.Cross(core.transform.up, (Vector2)(hit.GetComponent<IndividualCore>().transform.position - core.transform.position));
if (cross.z < 0)
{
angleToTarget = -angleToTarget;
}
core.hSensor = (float)Math.Tanh(angleToTarget / (fov/2));
}
}
if the values are not getting set to 0 is because one if is getting triggered atleast
Your answer
Follow this Question
Related Questions
Add sprint Key 2 Answers
Else and If activated at the same time? 1 Answer
Flipping Switches 1 Answer
Cursor Lock Code w/ if, else if, and else Statement Errors 1 Answer