/// <summary> /// Tries to attach and obj to the platform if it's not already attached /// </summary> /// <param name="other">The other Collider2D involved in this collision</param> private void AttachObject(Collider2D other) { if (crumbled) { return; } ObjectController2D obj = other.GetComponent <ObjectController2D>(); if (obj && !objs.Contains(obj)) { // doesn't attach to the obj if it's a 1 way platform and the obj is below it if (pConfig.owPlatformMask == (pConfig.owPlatformMask | (1 << gameObject.layer)) && (obj.transform.position.y < transform.position.y || obj.TotalSpeed.y > 0)) { return; } else { objs.Add(obj); if (crumbleTime > 0 && currentCrumbleTime <= 0) { if (!onlyPlayerCrumble || obj.GetComponent <PlayerController>()) { currentCrumbleTime = crumbleTime; animator.SetTrigger(ANIMATION_CRUMBLING); } } } } }
/// <summary> /// Tries to move any objects that are above this one /// </summary> /// <param name="deltaMove">How much to move each object</param> protected void MoveObjectsAbove(Vector2 deltaMove) { List <ObjectController2D> objsToMove = new List <ObjectController2D>(); float rayLength = skinWidth * 2; float directionX = Mathf.Sign(deltaMove.x); for (int i = 0; i < verticalRayCount; i++) { Vector2 rayOrigin = directionX == 1 ? raycastOrigins.topRight : raycastOrigins.topLeft; rayOrigin += Vector2.right * (verticalRaySpacing * i) * -directionX; RaycastHit2D[] hits = Physics2D.RaycastAll(rayOrigin, Vector2.up, rayLength, pConfig.standOnCollisionMask); Debug.DrawRay(rayOrigin, Vector2.up * rayLength, Color.cyan); foreach (RaycastHit2D hit in hits) { ObjectController2D obj = hit.transform.GetComponent <ObjectController2D>(); if (obj && !objsToMove.Contains(obj) && hit.distance > 0) { objsToMove.Add(obj); } } } foreach (ObjectController2D obj in objsToMove) { obj.Move(deltaMove); } }
/// <summary> /// Sent when another object leaves a trigger collider attached to /// this object (2D physics only). /// </summary> /// <param name="other">The other Collider2D involved in this collision.</param> void OnTriggerExit2D(Collider2D other) { ObjectController2D obj = other.GetComponent <ObjectController2D>(); if (obj && objs.Contains(obj)) { objs.Remove(obj); obj.ApplyForce(speed); } }
/// <summary> /// Sent when another object enters a trigger collider attached to this /// object (2D physics only). /// </summary> /// <param name="other">The other Collider2D involved in this collision.</param> void OnTriggerEnter2D(Collider2D other) { ObjectController2D obj = other.GetComponent <ObjectController2D>(); if (obj) { obj.SetForce(force); obj.IgnoreFriction = true; CharacterController2D character = obj.GetComponent <CharacterController2D>(); if (character) { character.ResetJumpsAndDashes(); } animator.SetTrigger(jumpAnimation); if (audioSource) { audioSource.Play(); } } }
// Use this for initialization void Start() { controller = GetComponent <ObjectController2D>(); //origMoveSpeed = moveSpeed; }
void Start() { objectController = GetComponent <ObjectController2D>(); sprite = GetComponent <SpriteRenderer>(); }