void getOptimalPointOfSail() { if (posAngle < pointsOfSail.dataArray[5].Rangemin || posAngle > pointsOfSail.dataArray[6].Rangemax) { irons = true; } //assign point of sail for (int i = 0; i < pointsOfSail.dataArray.Length; i++) { if (pointsOfSail.dataArray[i].Rangemin <= posAngle && posAngle <= pointsOfSail.dataArray[i].Rangemax) { irons = false; currentPointOfSail = pointsOfSail.dataArray[i]; optimalSpeed = windSpeed * pointsOfSail.dataArray[i].Optimalspeed; if (0 < i) { adjacentPointsOfSail.Add(pointsOfSail.dataArray[i - 1]); } if (i < pointsOfSail.dataArray.Length - 1) { adjacentPointsOfSail.Add(pointsOfSail.dataArray[i + 1]); } break; } } //check actual point of sail and apply speed float f = CheckActualPOS(currentPointOfSail, adjacentPointsOfSail, posAngle, sailAngle); rb.AddForce(transform.up * f * optimalSpeed); }
float CheckSailAngle(PointsOfSailData optimal, List <PointsOfSailData> adjacent, float sA) { if (optimal.Sailanglemin <= sA && sA <= optimal.Sailanglemax) { return(1.4f); } else { foreach (PointsOfSailData item in adjacent) { if (item.Sailanglemin <= sA && sA <= item.Sailanglemax) { return(0.7F); } } return(0.3F); } }
//return a modifier for the optimal speed float CheckActualPOS(PointsOfSailData optimal, List <PointsOfSailData> adjacent, float h, float sA) { if (optimal.Rangemin <= h && h <= optimal.Rangemax) { hSpeedModifier = optimal.Optimalspeed; finalModifier = hSpeedModifier * CheckSailAngle(optimal, adjacent, sA); return(finalModifier); } else { foreach (PointsOfSailData item in adjacent) { if (item.Rangemin <= h && h <= item.Rangemax) { Debug.Log("Adjacent"); hSpeedModifier = 0.8f; finalModifier = hSpeedModifier * CheckSailAngle(optimal, adjacent, sA); Debug.Log("Adjacent final modifier = " + finalModifier); return(finalModifier); } } return(0); } }