/// <summary> /// Called to determine if collision should be ignored. Use for one way platforms or z-ordered platforms /// like those found in loops. /// </summary> /// <returns><c>true</c>, if Collision should be ignored, <c>false</c> otherwise.</returns> /// <param name="character">Character.</param> /// <param name="collider">Collider.</param> public override bool IgnoreCollision(Character character, BasicRaycast collider) { if (character.ZLayer != zLayer) return true; return false; }
/// <summary> /// Initialise the movement with the given movement data. /// </summary> /// <param name="character">Character.</param> /// <param name="movementData">Movement data.</param> public override Movement Init(Character character, MovementVariable[] movementData) { this.character = character; if (movementData != null && movementData.Length == MovementVariableCount) { RequiredColliders = movementData[RequiredCollidersIndex].IntValue; clingGravity = movementData[ClingGravityIndex].FloatValue; gravityDelay = movementData[GravityDelayIndex].FloatValue; jumpHeight = movementData[JumpHeightIndex].FloatValue; ignoreClingAfterJumpTime = movementData[IgnoreClingAfterJumpTimeIndex].FloatValue; mustHoldToMaintainCling = movementData[MustHoldToMaintainClingIndex].BoolValue; ignoreJumpTime = movementData[IgnoreJumpTimeIndex].FloatValue; } else { Debug.LogError("Invalid movement data, not enough values."); } highestRightCollider = character.Colliders.Where (c=>c.RaycastType == RaycastType.SIDE_RIGHT ).OrderByDescending(c=>c.WorldPosition.y).FirstOrDefault(); highestLeftCollider = character.Colliders.Where (c=>c.RaycastType == RaycastType.SIDE_LEFT ).OrderByDescending(c=>c.WorldPosition.y).FirstOrDefault(); return this; }