public List <IRayCollider> HandleCollision(List <IRayCollider> collidersToSkip) { List <IRayCollider> collidedWith = new List <IRayCollider>(); Vector2 direction = currentPosition - LastFrameCenterPoint; float distanceForRay = direction.magnitude; RaycastHit2D rayHit = rayHits[0]; CollisionSide colSide = CollisionSide.Bottom; if (rayHit.collider.CompareTag(GameTags.Ball)) { //BallBase ballBase = rayHit.collider.GetComponent<BallBase>(); //colSide = CollisionSideDetect.GetCollisionSide(rayHit.centroid, rayHit.point); //OnCollisionWithBall(ballBase, rayHit, colSide, direction, out distanceForRay); } else if (rayHit.collider.CompareTag(GameTags.Ship)) { ShipCollider ship = rayHit.collider.GetComponent <ShipCollider>(); Debug.LogWarningFormat("ray for another ship hit"); //colSide = ship.GetCollisionSideWithBall(this, LastFrameCenterPoint); // OnCollision(this, rayHit, colSide, CollisionType.Ship, PhysicsConstants.BallSpeedAfterShipHit, safe, out distanceForRay); } Debug.LogWarningFormat("Ship collision with {0} on side {1}", rayHit.collider.gameObject.name, colSide); return(collidedWith); }
private void OnCollisionWithShip(ShipCollider shipCollider) { if (shipCollider != null) { Destroy(gameObject); shipCollider.OnCollision(); } }
private void OnTriggerEnter(Collider other) { if (other.CompareTag(GameTags.Ship)) { ShipCollider shipCollider = other.GetComponent <ShipCollider>(); OnCollisionWithShip(shipCollider); } }
private bool RaycastForShipToLastFramePosition() { Debug.DrawLine(transform.position, lastFramePos, Color.red, 0.1f); rayHit = Physics2D.Raycast(transform.position, transform.position - lastFramePos, (transform.position - lastFramePos).magnitude, LayerConstants.Ship); if (rayHit.collider != null) { ShipCollider shipCollider = rayHit.collider.GetComponent <ShipCollider>(); OnCollisionWithShip(shipCollider); return(true); } return(false); }
void IConvertGameObjectToEntity.Convert(Entity entity, EntityManager entityManager, GameObjectConversionSystem gameObjectConversionSystem) { if (transform.parent == null) { Debug.LogError("Parent is not assigned", this); } ShipCollider shipCollider = transform.parent.GetComponent <ShipCollider>(); if (shipCollider == null) { Debug.LogError("Parent ShipCollider is not present", this); } shipCollider.Register(entity, entityManager); }
public List <IRayCollider> HandleCollision(List <IRayCollider> collidersToSkip) { if (skipOneFrameFromCollisionSystem) { return(new List <IRayCollider>()); } List <IRayCollider> collidedWith = new List <IRayCollider>(); Vector2 direction = currentCenterPoint - LastFrameCenterPoint; float distanceForRay = direction.magnitude; float radius = Collider.radius / 2; int safe = 0; while (rayHits.Length > 0 && distanceForRay > 0) { rayHits.SortByLength(); if (rayHits.Length > 1) { for (int i = 0; i < rayHits.Length; i++) { //Debug.LogWarningFormat("[{0}] point: {1} centroid: {2} length: {3}", i, rayHits[i].point, rayHits[i].centroid, rayHits[i].distance); } } RaycastHit2D rayHit = rayHits[0]; CollisionSide colSide = CollisionSide.Bottom; if (rayHit.collider.CompareTag(GameTags.Frame)) { FrameCollider frameCollider = rayHit.collider.GetComponent <FrameCollider>(); IRayCollider col = frameCollider as IRayCollider; if (!collidersToSkip.Contains(col)) { if (frameCollider.DestroyBallAndProjectiles) { GameController.Instance.RemoveBallFromPlay(this); } else { colSide = frameCollider.CollisionSide; OnCollision(this, rayHit, colSide, CollisionType.Frame, defaultToTotalDistance, LastFrameVelocity.magnitude, safe, frameCollider, out distanceForRay); } if (!collidedWith.Contains(col)) { collidedWith.Add(col); } } } else if (rayHit.collider.CompareTag(GameTags.Enemy)) { // Debug.DrawLine(currentCenterPoint, LastFrameCenterPoint, Color.green, 2); EnemyBase enemy = rayHit.collider.GetComponent <EnemyBase>(); IRayCollider col = enemy as IRayCollider; if (!collidersToSkip.Contains(col)) { colSide = CollisionSideDetect.GetCollisionSide(rayHit.centroid, rayHit.point); OnCollision(this, rayHit, colSide, CollisionType.Enemy, defaultToTotalDistance, PhysicsConstants.BallSpeedAfterEnemyHit, safe, enemy, out distanceForRay); enemy.OnCollisionWithBall(this); if (!collidedWith.Contains(col)) { collidedWith.Add(col); } } } else if (rayHit.collider.CompareTag(GameTags.Ship)) { ShipCollider ship = rayHit.collider.GetComponent <ShipCollider>(); IRayCollider col = ship as IRayCollider; if (!collidersToSkip.Contains(col)) { colSide = ship.GetCollisionSideWithBall(this, LastFrameCenterPoint); OnCollision(this, rayHit, colSide, CollisionType.Ship, defaultToTotalDistance, PhysicsConstants.BallSpeedAfterShipHit, safe, ship, out distanceForRay); } if (!collidedWith.Contains(col)) { collidedWith.Add(col); } } else if (rayHit.collider.CompareTag(GameTags.Striker)) { Striker striker = rayHit.collider.GetComponent <Striker>(); IRayCollider col = striker as IRayCollider; if (!collidersToSkip.Contains(col)) { colSide = striker.GetCollisionSideWithBall(LastFrameCenterPoint); OnCollision(this, rayHit, colSide, striker.CollisionType, defaultToTotalDistance, striker.GetForceOnBallHit(this, colSide).magnitude, safe, striker, out distanceForRay); } if (!collidedWith.Contains(col)) { collidedWith.Add(col); } } //Debug.LogFormat("{0} collision with {1} on side {2}", safe, rayHit.collider.gameObject.name, colSide); safe++; } return(collidedWith); }
private void Awake() { rndr = GetComponent <SpriteRenderer>(); scs = GetComponent <ShipCollider>(); }