public virtual bool CanBeShrunk(EntityCollisionInfo newCollision) { if (entityInfo.resizingSettings.canBeShrunk) { if (transform.localScale.sqrMagnitude > entityInfo.resizingSettings.minSize) { return(true); } } return(false); }
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>(); }
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); }
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); }