public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            IActionResult output;
            var           trasnformed = default(string);
            var           mapper      = new SummaryDataMapper();

            log.LogInformation("Starting PID Summary Data ETL Job");
            log.LogInformation($"Request Size is {req.ContentLength}");

            try
            {
                string payload = Utiliy.ExtractRequestPayload(req);
                trasnformed = Utiliy.TransformPayload <SummaryRecord>(payload, mapper, log);
            }
            catch (ArgumentNullException exception)
            {
                log.LogError(exception.Message);
            }
            catch (ArgumentException exception)
            {
                log.LogError(exception.Message);
            }
            finally
            {
                output = trasnformed != string.Empty ?
                         (ActionResult) new OkObjectResult($"{trasnformed}")
                    : new BadRequestObjectResult("Transforming PID data failed.");
            }
            return(output);
        }
Ejemplo n.º 2
0
    //
    // UPDATE (main refresh routine)
    //

    //sets the eyes to look at the target
    // target_point is the absolute point in space that we want to wantch at.
    public void UpdateEyesRotation(Vector3 leftEyePosition, Vector3 rightEyePosition,
                                   Quaternion leftEyeRotation, Quaternion rightEyeRotation,
                                   ref float[] outBlendShapeWeights,
                                   ref Quaternion inOutNeckRotation,
                                   float dt)
    {
        //
        // If the target is null, we reset all target angles to 0.
        float newEyesPitch = 0.0f;
        float newEyesYaw   = 0.0f;

        if (this.eyeGazeTargetPoint.HasValue)
        {
            Vector3 abs_target_point = this.eyeGazeTargetPoint.Value;

            //
            // Calculate the target in "eye-apose" space, i.e., relatively to the eye (or their midpoint) when the character stands in A-Pose.
            // It means that the target_point must be transformed as if it positioned relatively to the character standing in the default A-Pose.

            //
            // Decomposing the eye rotation matrix
            // The current rotation C can be decomposed in initial rotation I and an additional delta D in global space.
            //   C = D * I
            // (That is different from decomposing in initial plus local transform C = I * D_loc)
            // Hence,
            //   D = C * Iinv
            // In order to transform the absolute target in the original global space before rotation, we need the inverse of D.
            // In general (AB)inv = Binv * Ainv
            // Hence:
            //  Dinv = I * Cinv
            //


            //
            // This will be splitted in two when the two eyes will be driven independently.

            Vector3 eyeMidPoint = new Vector3(
                (leftEyePosition.x + rightEyePosition.x) / 2.0f,
                (leftEyePosition.y + rightEyePosition.y) / 2.0f,
                (leftEyePosition.z + rightEyePosition.z) / 2.0f
                );

#if DEBUG_GEOM
            Debug.DrawLine(leftEyePosition, rightEyePosition, Color.blue, 0.1f, false);
#endif

            Vector3 targetPointInvDelta = this.aPoseLeftEyeRotation * Quaternion.Inverse(leftEyeRotation) * abs_target_point;

            Vector3 eyeMidPointInvDelta = this.aPoseLeftEyeRotation * Quaternion.Inverse(leftEyeRotation) * eyeMidPoint;
            Vector3 targetPointEyeSpace = targetPointInvDelta - eyeMidPointInvDelta;


            // Calculate the targetPoint projected on the horizontal plane which passes through the eyesMidPoint
            float hproj_dist = targetPointEyeSpace.x * HORIZ_PLANE_NORMAL.x
                               + targetPointEyeSpace.y * HORIZ_PLANE_NORMAL.y
                               + targetPointEyeSpace.z * HORIZ_PLANE_NORMAL.z;
            Vector3 targetHplaneProjection = targetPointEyeSpace - (HORIZ_PLANE_NORMAL * hproj_dist);

#if DEBUG_GEOM
            Debug.DrawLine(Vector3.zero, targetPointEyeSpace, Color.red);
            Debug.DrawLine(Vector3.zero, targetHplaneProjection, Utiliy.darker(Color.red));
#endif


            //
            // Calculate the pitch: the vertical orientation of the eyes.

            // Calc the angle (in degrees) between the vector pointing to the target and its projection on the vertical plane
            float vertAngleBetween = Vector3.Angle(targetPointEyeSpace, targetHplaneProjection);
            newEyesPitch = Vector3.Dot(targetPointEyeSpace, HORIZ_PLANE_NORMAL) >= 0 ? vertAngleBetween : -vertAngleBetween;

            //
            // Calculate the yaw: the horizontal orientation of the eyes

            // Calc the angle (in degrees) between the forward vector the the target in eye-space.
            float horizAngleBetween = Vector3.Angle(this.aPoseFwdDirection, targetHplaneProjection);
            newEyesYaw = Vector3.Dot(targetHplaneProjection, this.aPoseRightDirection) <= 0 ? horizAngleBetween : -horizAngleBetween;
        }

        //
        // Increment the current eyes yaw/pitch according to eyes movement speed
        float deltaEyesPitch = newEyesPitch - this.eyesPitch;
        this.eyesPitch += LinearInc(deltaEyesPitch, this.eyesRotSpeed, dt);

        float deltaEyesYaw = newEyesYaw - this.eyesYaw;
        this.eyesYaw += LinearInc(deltaEyesYaw, this.eyesRotSpeed, dt);

#if DEBUG_GEOM
        {
            // Test, reproject the line of sight direction using the calculated angles
            // Vector3 rebuiltTarget = Quaternion.AngleAxis(-newEyesYaw, HORIZ_PLANE_NORMAL) * FORWARD;
            // WRONG!!! Vector3 rebuiltTarget = Quaternion.AngleAxis(-newEyesPitch, RIGHT) * Quaternion.AngleAxis(-newEyesYaw, HORIZ_PLANE_NORMAL) * FORWARD;
            //Vector3 rebuiltTarget = Quaternion.AngleAxis(-newEyesYaw, HORIZ_PLANE_NORMAL) * Quaternion.AngleAxis(-newEyesPitch, RIGHT) * FORWARD;
            Vector3 rebuiltTarget = Quaternion.AngleAxis(-newEyesYaw, HORIZ_PLANE_NORMAL) * Quaternion.AngleAxis(-newEyesPitch, this.aPoseRightDirection) * this.aPoseFwdDirection;
            Debug.DrawRay(Vector3.zero, rebuiltTarget, Color.green);
        }
#endif
        //
        // Activate the yaw/pitch rotations for the neck.
        if (enableNeckRotation)
        {
            float deltaPitch = 0.0f;
            if (this.eyesPitch > EYES_MAX_PITCH)
            {
                deltaPitch     = this.eyesPitch - EYES_MAX_PITCH;
                this.eyesPitch = EYES_MAX_PITCH;
            }
            else if (this.eyesPitch < -EYES_MAX_PITCH)
            {
                deltaPitch     = this.eyesPitch + EYES_MAX_PITCH;
                this.eyesPitch = -EYES_MAX_PITCH;
            }

            this.neckPitch += SmoothtInc(deltaPitch, neckRotTime, neckRotMaxSpeed, dt);
            this.neckPitch += SmoothtInc(-this.neckPitch, neckRotTime / neckRestTendencyStrenght, neckRotMaxSpeed * neckRestTendencyStrenght, dt);

            if (this.neckPitch > NECK_MAX_PITCH)
            {
                this.neckPitch = NECK_MAX_PITCH;
            }
            else if (neckPitch < NECK_MIN_PITCH)
            {
                this.neckPitch = NECK_MIN_PITCH;
            }

            // Debug.Log("Delta pitch/Neck pitch: "+deltaPitch+"\t"+neckPitch) ;


            float deltaYaw = 0.0f;
            if (this.eyesYaw >= EYES_MAX_YAW)
            {
                deltaYaw     = this.eyesYaw - EYES_MAX_YAW;
                this.eyesYaw = EYES_MAX_YAW;
            }
            else if (this.eyesYaw <= -EYES_MAX_YAW)
            {
                deltaYaw     = this.eyesYaw + EYES_MAX_YAW;
                this.eyesYaw = -EYES_MAX_YAW;
            }

            this.neckYaw += SmoothtInc(deltaYaw, neckRotTime, neckRotMaxSpeed, dt);
            this.neckYaw += SmoothtInc(-this.neckYaw, neckRotTime / neckRestTendencyStrenght, neckRotMaxSpeed * neckRestTendencyStrenght, dt);

            if (neckYaw > NECK_MAX_YAW)
            {
                this.neckYaw = NECK_MAX_YAW;
            }
            else if (neckYaw < NECK_MIN_YAW)
            {
                this.neckYaw = NECK_MIN_YAW;
            }

            // Debug.Log("Delta yaw/Neck yaw: "+deltaYaw+"\t"+neckYaw) ;

#if DEBUG_GEOM
            {
                float totalYaw   = this.neckYaw + this.eyesYaw;
                float totalPitch = this.neckPitch + this.eyesPitch;
                // Test, reproject the line of sight direction using the calculated angles
                Vector3 rebuiltTarget = Quaternion.AngleAxis(-totalYaw, HORIZ_PLANE_NORMAL) * Quaternion.AngleAxis(-totalPitch, this.aPoseRightDirection) * this.aPoseFwdDirection;
                Debug.DrawRay(Vector3.zero, rebuiltTarget, Color.white);
            }
#endif

            //
            // Computer the new quaternion for the Neck.

            // G = P * L --> P = G * L^-1
            Quaternion neckAPoseParentRotation = this.aPoseNeckRotation * Quaternion.Inverse(this.aPoseNeckLocalRotation);

            // I have to compute the quaternion representing the rotation of the two angles.
            // yaw * pitch * oroginal pose
            Quaternion neckRotQuat = Quaternion.AngleAxis(-this.neckYaw, HORIZ_PLANE_NORMAL) * Quaternion.AngleAxis(-this.neckPitch, this.aPoseRightDirection);
            // this rotation must be applied to a rotation describing the neck straight in the current charactr orientation.

            // Test left/right
            // Quaternion neckLocalRotQuat = Quaternion.Inverse(neckAPoseParentRotation) * Quaternion.AngleAxis(45, HORIZ_PLANE_NORMAL) * neckAPoseParentRotation;
            // Test up/down
            // Quaternion neckLocalRotQuat = Quaternion.Inverse(neckAPoseParentRotation) * Quaternion.AngleAxis(45, this.aPoseRightDirection) * neckAPoseParentRotation;

            Quaternion neckLocalRotQuat = Quaternion.Inverse(neckAPoseParentRotation) * neckRotQuat * neckAPoseParentRotation;

            //Debug.Log("aposenecklocalrot=" + this.aPoseNeckLocalRotation);
            inOutNeckRotation = neckLocalRotQuat * this.aPoseNeckLocalRotation;
        }


        //
        // Calculate the proportion from the pitch angle to BlendShape percentage
        // weightEyesPitch : 50% = pitch : 45deg
        float weightEyesPitch = 0.5f * this.eyesPitch / 45.0f;

        // Calculate the proportion from the yaw angle to the BlendShape percentage
        // weightEyesYaw : 50% = yaw : 52deg
        float weightEyesYaw = 0.5f * this.eyesYaw / 52.0f;

        //Debug.Log("weightEyesDown: " + weightEyesPitch + " weightEyesLeft: " + weightEyesYaw);

        //Blendshapes are registered int the DefaultExecutionOrder: EYES_RIGHT, EYES_LEFT, EYES_DOWN, EYES_UP
        if (weightEyesPitch >= 0.0f)
        {
            outBlendShapeWeights[3] = weightEyesPitch;
            outBlendShapeWeights[2] = 0.0f;
        }
        else
        {
            outBlendShapeWeights[2] = -weightEyesPitch;
            outBlendShapeWeights[3] = 0.0f;
        }

        if (weightEyesYaw >= 0.0f)
        {
            outBlendShapeWeights[0] = weightEyesYaw;
            outBlendShapeWeights[1] = 0.0f;
        }
        else
        {
            outBlendShapeWeights[1] = -weightEyesYaw;
            outBlendShapeWeights[0] = 0.0f;
        }
    }     // end update
Ejemplo n.º 3
0
        public bool UpdateGame()
        {
            if (this.GameId != 0)
            {
                string queryString = "UPDATE [dbo].[Game] "
                                     + "SET [GameStatusTypeId] = @GameStatusTypeId "
                                     + " ,[HomeTeamScore] = @HomeTeamScore"
                                     + " ,[AwayTeamScore] = @AwayTeamScore"
                                     + " ,[WinningTeamId] = @WinningTeamId"
                                     + " WHERE GameId = @GameId";

                using (SqlConnection connection = new SqlConnection(Base.conn))
                {
                    // Create the Command and Parameter objects.
                    SqlCommand command = new SqlCommand(queryString, connection);
                    command.Parameters.AddWithValue("@GameId", this.GameId);
                    //command.Parameters.AddWithValue("@GameDate", this.GameDate);
                    command.Parameters.AddWithValue("@GameStatusTypeId", this.GameStatusTypeId);
                    command.Parameters.AddWithValue("@HomeTeamScore", this.HomeTeamScore);
                    command.Parameters.AddWithValue("@AwayTeamScore", this.AwayTeamScore);
                    command.Parameters.AddWithValue("@WinningTeamId", this.WinningTeamId);

                    try
                    {
                        connection.Open();
                        command.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        SportsError sError = new SportsError(ex, this.GameId);
                    }
                }


                Utiliy u   = new Utiliy();
                Bet    bet = u.CheckGameBet(this.GameId);
                if (bet.BetId != 0)
                {
                    //This is a own bet
                    if (bet.WinningBetTeamId == this.WinningTeamId)
                    {
                        if (this.GameDate == bet.BetADate)
                        {
                            bet.WinningBet = "A";
                        }
                        if (this.GameDate == bet.BetBDate)
                        {
                            bet.WinningBet = "B";
                        }
                        if (this.GameDate == bet.BetCDate)
                        {
                            bet.WinningBet = "C";
                        }
                        if (this.GameDate == bet.BetDDate)
                        {
                            bet.WinningBet = "D";
                        }

                        bet.TempUpdateBet();
                    }
                }
            }
            return(true);
        }