コード例 #1
0
    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;
    }
コード例 #2
0
    /// <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);
    }
コード例 #3
0
    /// <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);
    }
コード例 #4
0
        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);
        }