public void Roll(object[] variables) { dice1End = rollRotations[(int)variables[0] - 1]; dice2End = rollRotations[(int)variables[1] - 1]; currentTimeVariation1 = (float)variables[2]; currentTimeVariation2 = (float)variables[3]; currentHeightVariation1 = (float)variables[4]; currentHeightVariation2 = (float)variables[5]; currentYAngel1 = (float)variables[6]; rotationDirection1 = (Vector3)variables[7]; currentYAngel2 = (float)variables[8]; rotationDirection2 = (Vector3)variables[9]; startRotation1 = (Vector3)variables[10]; startRotation2 = (Vector3)variables[11]; startPosition1 = (Vector3)variables[12]; startPosition2 = (Vector3)variables[13]; targetPosition1 = (Vector3)variables[14]; targetPosition2 = (Vector3)variables[15]; isRolling = true; startTime = Time.time; }
/// <summary> /// Animuje kostki, by te wylosowały podane wyniki /// </summary> /// <param name="result1">Wynik na pierwszej kostce</param> /// <param name="result2">Wynik na drugiej kostce</param> public void Roll(int result1, int result2, Action onRollEnd = null) { if (isRolling) { return; } this.onRollEnd = onRollEnd; dice1End = rollRotations[result1 - 1]; dice2End = rollRotations[result2 - 1]; currentTimeVariation1 = Random.Range(0f, durationVariation); currentTimeVariation2 = Random.Range(0f, durationVariation); currentHeightVariation1 = Random.Range(0f, heightVariation); currentHeightVariation2 = Random.Range(0f, heightVariation); currentYAngel1 = Random.Range(-maxYAngle, maxYAngle); rotationDirection1 = new Vector3(MathExtension.RandomSign(), MathExtension.RandomSign(), MathExtension.RandomSign()); currentYAngel2 = Random.Range(-maxYAngle, maxYAngle); rotationDirection2 = new Vector3(MathExtension.RandomSign(), MathExtension.RandomSign(), MathExtension.RandomSign()); startRotation1 = dice1Holder.localRotation.eulerAngles; startRotation2 = dice2Holder.localRotation.eulerAngles; startPosition1 = dice1Holder.localPosition; startPosition2 = dice2Holder.localPosition; Vector3 displacement = startDice2Position - startDice1Position; targetPosition1 = new Vector3(Random.Range(-throwRadius, throwRadius), 0f, Random.Range(-throwRadius, throwRadius)); targetPosition2 = targetPosition1 + displacement; float placeDisplacement = displacement.magnitude * positionVariation; targetPosition1 += new Vector3(Random.Range(-placeDisplacement, placeDisplacement), 0f, Random.Range(-placeDisplacement, placeDisplacement)); targetPosition2 += new Vector3(Random.Range(-placeDisplacement, placeDisplacement), 0f, Random.Range(-placeDisplacement, placeDisplacement)); isRolling = true; startTime = Time.time; object[] variables = new object[] { result1, result2, currentTimeVariation1, currentTimeVariation2, currentHeightVariation1, currentHeightVariation2, currentYAngel1, rotationDirection1, currentYAngel2, rotationDirection2, startRotation1, startRotation2, startPosition1, startPosition2, targetPosition1, targetPosition2 }; photonView.RPC("Roll", RpcTarget.Others, variables); }
/// <summary> /// Funkcja animująca obrót kostek /// </summary> /// <param name="timeProgress">Postęp animacji</param> private void RotationInterpolation(float timeProgress, float currentTimeVariation, RollRotation diceEnd, Vector3 startRotation, Vector3 rotationDirection, float currentYAngel, Transform diceHolder) { float diceProgress = GetDiceProgress(timeProgress, currentTimeVariation); //Dodatkowy obrót występuje tylko na osi, na której już nie ma obrotu float rotationX = rotationDirection.x == 1 ? diceEnd.rotation.x : MathExtension.InverseRotation(diceEnd.rotation.x); float rotationY = rotationDirection.y == 1 ? diceEnd.rotation.y : MathExtension.InverseRotation(diceEnd.rotation.y); rotationY += currentYAngel; float rotationZ = rotationDirection.z == 1 ? diceEnd.rotation.z : MathExtension.InverseRotation(diceEnd.rotation.z); Vector3 targetRotation = new Vector3(rotationX, rotationY, rotationZ); Vector3 diceRotation = Vector3.Lerp(startRotation, targetRotation, diceProgress); diceHolder.localRotation = Quaternion.Euler(diceRotation); }
public void UpdateStates(ref Quadcopter.Settings Settings) { // Thrusters thrusters = QuadcopterControls.GetAnalog(Settings._ThrusterControl); if (thrusters < 0.0f) { thrusterState = ThrusterState.DOWNWARDS; } else if (thrusters > 0.0f) { thrusterState = ThrusterState.UPWARDS; } else if (Settings._ThrusterRest) { thrusterState = ThrusterState.STILL; } else { thrusterState = ThrusterState.OFF; } // Pitch float Pitch = QuadcopterControls.GetAnalog(Settings._PitchControl); if (Pitch < 0.0f) { pitchrotation = PitchRotation.CCW; } else if (Pitch > 0.0f) { pitchrotation = PitchRotation.CW; } else { pitchrotation = PitchRotation.NONE; } // Yaw float Yaw = QuadcopterControls.GetAnalog(Settings._YawControl); if (Yaw < 0.0f) { yawrotation = YawRotation.CCW; } else if (Yaw > 0.0f) { yawrotation = YawRotation.CW; } else { yawrotation = YawRotation.NONE; } // Roll float Roll = QuadcopterControls.GetAnalog(Settings._RollControl); if (Roll < 0.0f) { rollrotation = RollRotation.CCW; } else if (Roll > 0.0f) { rollrotation = RollRotation.CW; } else { rollrotation = RollRotation.NONE; } // Return Euler Changes eulerchanges = new Vector3(Pitch, Yaw, Roll); }