public bool HeavyDamage(int damage, Vector3 origin) { if (status.Invincible()) { return(false); } if (StateCompare(MarioStates.Knockback) || StateCompare(MarioStates.KnockbackForwards) || StateCompare(MarioStates.TeleportIn) || StateCompare(MarioStates.TeleportOut)) { return(false); } Vector3 direction = Math3d.ProjectVectorOnPlane(controller.up, origin - transform.position).normalized; if (direction == Vector3.zero) { direction = lookDirection; } bool forward = Vector3.Angle(direction, lookDirection) < 90; if (Airborn()) { if (forward) { moveSpeed = -3.0f; currentState = MarioStates.AirKnockback; } else { moveSpeed = 3.0f; currentState = MarioStates.AirKnockbackForwards; } } else { if (forward) { currentState = MarioStates.Knockback; moveSpeed = -3.0f; } else { currentState = MarioStates.KnockbackForwards; moveSpeed = 3.0f; } } lookDirection = forward ? direction : -direction; SmartCamera.Shake(1.6f, 25.0f, 0.5f); sound.PlayTakeDamage(); Instantiate(TakeDamageEffect, transform.position + controller.up * controller.height * 0.6f, Quaternion.identity); status.TakeDamage(damage); return(true); }
public bool GroundDamageLight(int damage, Vector3 origin, float pushbackSpeed, bool canHurtInAir = true) { if (status.Invincible()) { return(false); } if (StateCompare(MarioStates.Stagger) || StateCompare(MarioStates.TeleportIn) || StateCompare(MarioStates.TeleportOut)) { return(false); } if (!canHurtInAir && Airborn()) { return(false); } if (StateCompare(MarioStates.Slide)) { if (Mathf.Abs(moveSpeed) > 3.0f) { return(false); } } status.TakeDamage(damage); Vector3 direction = Math3d.ProjectVectorOnPlane(controller.up, origin - transform.position).normalized; if (direction == Vector3.zero) { direction = lookDirection; } staggerForward = Vector3.Angle(direction, lookDirection) < 90; if (Airborn()) { if (staggerForward) { moveSpeed = -3.0f; currentState = MarioStates.AirKnockback; } else { moveSpeed = 3.0f; currentState = MarioStates.AirKnockbackForwards; } } else { if (status.CurrentHealth == 0) { if (staggerForward) { currentState = MarioStates.Knockback; moveSpeed = -3.0f; } else { currentState = MarioStates.KnockbackForwards; moveSpeed = 3.0f; } } else { currentState = MarioStates.Stagger; moveSpeed = staggerForward ? -pushbackSpeed : pushbackSpeed; } } Instantiate(TakeDamageEffect, transform.position + controller.up * controller.height * 0.6f, Quaternion.identity); sound.PlayTakeDamage(); lookDirection = staggerForward ? direction : -direction; SmartCamera.Shake(0.85f, 15.0f, 0.5f); return(true); }