Esempio n. 1
0
        public async Task <IEnumerable <string> > Get()
        {
            try
            {
                var solidAgent = new SolidAgent(AccessToken, WebId, "https://localhost:5001");
                var content    = await solidAgent.GetAccounts();

                RequestHeaders header     = Request.GetTypedHeaders();
                Uri            uriReferer = header.Referer;



                return(new List <string>()
                {
                    "hello", "world", content
                });
            }
            catch (Exception exc)
            {
                throw;
            }
        }
            public void CollideWithSolid(Entity solidAgentEntity,
                                         Entity solidEntity,
                                         ref RigidBody solidAgentRigidBody,
                                         ref RigidBody solidRigidBody)
            {
                Translation solidAgentTranslation = TranslationGroup[solidAgentEntity];
                Rotation    solidAgentRotation    = RotationGroup[solidAgentEntity];


                Translation solidTranslation = TranslationGroup[solidEntity];
                Rotation    solidRotation    = RotationGroup[solidEntity];

                //The solid agent is guaranteed to be a solid agent.
                //We assume anything the solid agent collides with is a solid.
                //Triggers, for example, will not be triggered here - only collisions happen here

                BoxCollider *solidBoxCollider = (BoxCollider *)solidRigidBody.Collider;

                //Flatten out the translation, since the rigid body caster seems bugged?
                //TODO check into this with later updates to UnityPhysics
                BoxCollider *updatedBoxCollider = (BoxCollider *)BoxCollider.Create(
                    new BoxGeometry
                {
                    BevelRadius = solidBoxCollider->BevelRadius,
                    Center      = solidBoxCollider->Center + solidTranslation.Value,
                    Orientation = solidRotation.Value,
                    Size        = solidBoxCollider->Size
                },
                    solidBoxCollider->Filter,
                    solidBoxCollider->Material).GetUnsafePtr();

                RigidBody updatedSolidRigidBody = new RigidBody
                {
                    CustomTags    = solidRigidBody.CustomTags,
                    Collider      = (Collider *)updatedBoxCollider,
                    Entity        = solidRigidBody.Entity,
                    WorldFromBody = new RigidTransform(quaternion.identity, float3.zero)
                };

                //Collision Check
                ColliderCastInput colliderCastInput = new ColliderCastInput
                {
                    Collider    = solidAgentRigidBody.Collider,
                    Start       = solidAgentTranslation.Value,
                    End         = solidAgentTranslation.Value,
                    Orientation = solidAgentRotation.Value
                };


                ColliderCastHit colliderCastHit;
                bool            isSolidAgentCollided = updatedSolidRigidBody.CastCollider(colliderCastInput, out colliderCastHit);

                if (isSolidAgentCollided)
                {
                    bool isGroundCollided    = false;
                    bool isCeilingCollided   = false;
                    bool isLeftWallCollided  = false;
                    bool isRightWallCollided = false;

                    if (colliderCastHit.SurfaceNormal.y >= SurfaceNormalEdgeThreshold)
                    {
                        isGroundCollided = true;
                    }
                    else if (colliderCastHit.SurfaceNormal.y <= -SurfaceNormalEdgeThreshold)
                    {
                        isCeilingCollided = true;
                    }
                    else if (colliderCastHit.SurfaceNormal.x >= SurfaceNormalEdgeThreshold)
                    {
                        isLeftWallCollided = true;
                    }
                    else if (colliderCastHit.SurfaceNormal.x <= -SurfaceNormalEdgeThreshold)
                    {
                        isRightWallCollided = true;
                    }



                    if (isGroundCollided ||
                        isCeilingCollided ||
                        isLeftWallCollided ||
                        isRightWallCollided)
                    {
                        SolidAgent solidAgent = SolidAgentGroup[solidAgentEntity];

                        if (isGroundCollided)
                        {
                            solidAgent.IsGroundCollided    = true;
                            solidAgent.GroundSurfaceNormal = colliderCastHit.SurfaceNormal.y;
                        }

                        if (isCeilingCollided)
                        {
                            solidAgent.IsCeilingCollided    = true;
                            solidAgent.CeilingSurfaceNormal = colliderCastHit.SurfaceNormal.y;
                        }

                        if (isLeftWallCollided)
                        {
                            solidAgent.IsLeftWallCollided    = true;
                            solidAgent.LeftWallSurfaceNormal = colliderCastHit.SurfaceNormal.x;
                        }

                        if (isRightWallCollided)
                        {
                            solidAgent.IsRightWallCollided    = true;
                            solidAgent.RightWallSurfaceNormal = colliderCastHit.SurfaceNormal.x;
                        }

                        SolidAgentGroup[solidAgentEntity] = solidAgent;
                    }
                }
            }