private void SpawnOmeter(AngleOmeterSpawnData data) { if (SpawnedOmeter == null) { SpawnedOmeter = InstantiateOmeter(); } UpdateOmeter(SpawnedOmeter, data); SpawnedOmeter.SetActive(true); }
private static void UpdateOmeter(GameObject ometer, AngleOmeterSpawnData data) { AngleOmeterData ometerData = ometer.GetComponent <AngleOmeterData>(); ISettings settings = Bootstrap.Settings; ometerData.FacingRight = data.Position.x < 0; ometerData.StartAngle = ometerData.FacingRight ? settings.MinAngle : 180 - settings.MinAngle; Quaternion rotation = Quaternion.AngleAxis(ometerData.StartAngle, Vector3.forward); ometer.transform.rotation = rotation; ometer.transform.position = data.Position; //rotation speed ometerData.RotationSpeed *= data.RateOfChangeMultiplier; ometerData.RotationSpeed = Mathf.Clamp(ometerData.RotationSpeed, ometerData.RotationSpeed, settings.MaxRotationSpeed); //flip end angle if needed if (!Mathf.Approximately(settings.MaxAngle, 90f)) { float diff = Mathf.Abs(settings.MaxAngle - 90); ometerData.EndAngle = ometerData.FacingRight ? 90 - diff : 90 + diff; } }