Esempio n. 1
0
    public virtual bool CanBeShrunk(EntityCollisionInfo newCollision)
    {
        if (entityInfo.resizingSettings.canBeShrunk)
        {
            if (transform.localScale.sqrMagnitude > entityInfo.resizingSettings.minSize)
            {
                return(true);
            }
        }

        return(false);
    }
Esempio n. 2
0
        public CollisionManager()
        {
            sqrMan = new SquareManager();
            entsqrs = new RecycleArray<EntitySquares>(EntitySquares.CopyMethod, EntitySquares.CreateCopyMethod);
            entsqrs.SetDataMode(false);
            addedEntSqrTemp = new EntitySquares();
            addedECITemp = new EntityCollisionInfo();

            collideAgainstEnts = new List<Entity>();
            collideAgainstBlocks = new List<Block>();

            collideEntsInfo = new RecycleArray<EntityCollisionInfo>(EntityCollisionInfo.CopyMethod, EntityCollisionInfo.CreateCopyMethod);
            collideEntsInfo.SetDataMode(false);
            collideBlocksInfo = new RecycleArray<EntityCollisionInfo>(EntityCollisionInfo.CopyMethod, EntityCollisionInfo.CreateCopyMethod);
            collideBlocksInfo.SetDataMode(false);

            colliderList = new List<Collider>();
        }
Esempio n. 3
0
    public virtual bool CanBeEnlarged(EntityCollisionInfo newCollision)
    {
        if (entityInfo.resizingSettings.canBeEnlarged)
        {
            if (transform.localScale.sqrMagnitude < entityInfo.resizingSettings.maxSize)
            {
                if (newCollision.isCollidingOnTop)
                {
                    return(false);
                }

                if (newCollision.isCollidingOnLeft && newCollision.isCollidingOnRight)
                {
                    return(false);
                }

                return(true);
            }
        }

        return(false);
    }
Esempio n. 4
0
    public virtual void ManageCollision()
    {
        Bounds newBounds = entityCollider.bounds;

        float topSize    = newBounds.extents.y;
        float bottomSize = -newBounds.extents.y;
        float leftSize   = -newBounds.extents.x;
        float rightSize  = newBounds.extents.x;

        Vector3 currentPosition = transform.position;

        Vector3 groundPoint  = new Vector3(0, bottomSize, 0) + currentPosition - (Vector3.down * entityInfo.collisionSettings.skinWidth);
        Vector3 ceilingPoint = new Vector3(0, topSize, 0) + currentPosition - (Vector3.up * entityInfo.collisionSettings.skinWidth);
        Vector3 leftPoint    = new Vector3(leftSize, 0, 0) + currentPosition - (Vector3.left * entityInfo.collisionSettings.skinWidth);
        Vector3 rightPoint   = new Vector3(rightSize, 0, 0) + currentPosition - (Vector3.right * entityInfo.collisionSettings.skinWidth);

        bool isGrounded       = Physics.Raycast(groundPoint, Vector3.down, entityInfo.collisionSettings.checkRayLength, entityInfo.collisionSettings.collisionMask);
        bool isCollidingOnTop = Physics.Raycast(ceilingPoint, Vector3.up, entityInfo.collisionSettings.checkRayLength, entityInfo.collisionSettings.collisionMask);
        bool isCollidingLeft  = Physics.Raycast(leftPoint, Vector3.left, entityInfo.collisionSettings.checkRayLength, entityInfo.collisionSettings.collisionMask);
        bool isCollidingRight = Physics.Raycast(rightPoint, Vector3.right, entityInfo.collisionSettings.checkRayLength, entityInfo.collisionSettings.collisionMask);

        collisionInfo = new EntityCollisionInfo(newBounds, isGrounded, isCollidingOnTop, isCollidingLeft, isCollidingRight);
    }