fix c# game function issue
Budget: $30 – $250 USD
i have logic function that dont work as i expect i m missing something and cant figure out what looking for a programmer with knowledge in mathematics trigonometry and know concept of x y z heading and c# to resolve my issue
public bool IsTargetInView(float mainPlayerHeadingAngle, int mainPlayerX, int mainPlayerY, float enemyHeadingAngle, int enemyX, int enemyY)
{
// Calculate relative angle difference between main player and enemy
float relativeAngle = GetAngleDifference(mainPlayerHeadingAngle, enemyHeadingAngle);
// Check if target is in view (within a 180-degree angle)
if (relativeAngle > 90 && relativeAngle < 270)
{
return false; // target is behind the player
}
// Check relative position to determine if enemy is in front
int deltaX = enemyX - mainPlayerX;
int deltaY = enemyY - mainPlayerY;
// Calculate angle based on relative position
float angleFromPosition = (float)(Math.Atan2(deltaY, deltaX) * (180.0 / Math.PI));
float angleDifference = GetAngleDifference(mainPlayerHeadingAngle, angleFromPosition);
// If the angle difference based on position is greater than 90, then enemy is behind the player
if (angleDifference > 90)
{
return false;
}
return true;
}
public bool CanAttackTarget(float mainPlayerHeadingAngle, float enemyHeadingAngle)
{
float relativeAngle = GetAngleDifference(mainPlayerHeadingAngle, enemyHeadingAngle);
// Check if target can be attacked (within a 120-degree angle)
if (relativeAngle <= 60 || relativeAngle >= 300)
{
return true;
}
return false;
}
public float GetAngleDifference(float angle1, float angle2)
{
float difference = angle2 - angle1;
if (difference < 0)
{
difference += 360.0f; // Add 360 to bring it to positive
}
return difference;
}
public bool IsTargetInView(float mainPlayerHeadingAngle, int mainPlayerX, int mainPlayerY, float enemyHeadingAngle, int enemyX, int enemyY)
{
// Calculate relative angle difference between main player and enemy
float relativeAngle = GetAngleDifference(mainPlayerHeadingAngle, enemyHeadingAngle);
// Check if target is in view (within a 180-degree angle)
if (relativeAngle > 90 && relativeAngle < 270)
{
return false; // target is behind the player
}
// Check relative position to determine if enemy is in front
int deltaX = enemyX - mainPlayerX;
int deltaY = enemyY - mainPlayerY;
// Calculate angle based on relative position
float angleFromPosition = (float)(Math.Atan2(deltaY, deltaX) * (180.0 / Math.PI));
float angleDifference = GetAngleDifference(mainPlayerHeadingAngle, angleFromPosition);
// If the angle difference based on position is greater than 90, then enemy is behind the player
if (angleDifference > 90)
{
return false;
}
return true;
}
public bool CanAttackTarget(float mainPlayerHeadingAngle, float enemyHeadingAngle)
{
float relativeAngle = GetAngleDifference(mainPlayerHeadingAngle, enemyHeadingAngle);
// Check if target can be attacked (within a 120-degree angle)
if (relativeAngle <= 60 || relativeAngle >= 300)
{
return true;
}
return false;
}
public float GetAngleDifference(float angle1, float angle2)
{
float difference = angle2 - angle1;
if (difference < 0)
{
difference += 360.0f; // Add 360 to bring it to positive
}
return difference;
}