// effects

@import './../mixins/makeanim.scss';

$effects-duration: 1s;

@mixin swap-anim($className, $keyframeName) {
  @include make-anim($className, $keyframeName, $effects-duration);
}

// make keyframes
@mixin make-tintin-kf($names: tint, $tf-start: scale(1, 1), $tf-odd: scale(1.1, 1.1), $tf-even: scale(1, 1)) {
  @keyframes #{$names} {
    0% {
      opacity: 0;
      transform: $tf-start;
    }

    50%,
    70%,
    90% {
      opacity: 1;
      transform: $tf-odd;
    }

    60%,
    80%,
    100% {
      opacity: 1;
      transform: $tf-even;
    }
  }
}

@mixin make-tintout-kf($names: tint, $tf-1: scale(1, 1), $tf-2: scale(1.1, 1.1), $tf-end: scale(1, 1)) {
  @keyframes #{$names} {
    0%,
    20%,
    40%,
    50% {
      opacity: 1;
      transform: $tf-1;
    }

    10%,
    30% {
      opacity: 1;
      transform: $tf-2;
    }

    100% {
      opacity: 0;
      transform: $tf-end;
    }
  }
}

// --- keyframes
// --- tint
// in
@include make-tintin-kf(amosTintDownIn, scale(1, 1) translateY(900%), scale(1.1, 1.1) translateY(0), scale(1, 1) translateY(0));
@include make-tintin-kf(amosTintLeftIn, scale(1, 1) translateX(-900%), scale(1.1, 1.1) translateX(0), scale(1, 1) translateX(0));
@include make-tintin-kf(amosTintRightIn, scale(1, 1) translateY(900%), scale(1.1, 1.1) translateX(0), scale(1, 1) translateX(0));
@include make-tintin-kf(amosTintUpIn, scale(1, 1) translateY(-900%), scale(1.1, 1.1) translateY(0), scale(1, 1) translateY(0));
// out
@include make-tintout-kf(amosTintDownOut, scale(1, 1) translateY(0), scale(1.1, 1.1) translateY(0), scale(1, 1) translateY(900%));
@include make-tintout-kf(amosTintLeftOut, scale(1, 1) translateX(0), scale(1.1, 1.1) translateX(0), scale(1, 1) translateX(-900%));
@include make-tintout-kf(amosTintRightOut, scale(1, 1) translateX(0), scale(1.1, 1.1) translateX(0), scale(1, 1) translateX(900%));
@include make-tintout-kf(amosTintUpOut, scale(1, 1) translateY(0), scale(1.1, 1.1) translateY(0), scale(1, 1) translateY(-900%));

// anims
@include swap-anim(e-foolish, amosFoolish);
@include swap-anim(e-hole, amosHole);
@include swap-anim(e-swash, amosSwash);
@include swap-anim(e-bomb-left, amosBombLeft);
@include swap-anim(e-bomb-right, amosBombRight);
@include swap-anim(e-tint-down, amosTintDown);
@include swap-anim(e-tint-left, amosTintLeft);
@include swap-anim(e-tint-right, amosTintRight);
@include swap-anim(e-tint-up, amosTintUp);

@keyframes amosFoolishIn {
  0% {
    opacity: 0;
    transform-origin: 50% 50%;
    transform: scale(0, 0) rotate(360deg);
  }

  20% {
    opacity: 1;
    transform-origin: 0% 100%;
    transform: scale(0.5, 0.5) rotate(0deg);
  }

  40% {
    opacity: 1;
    transform-origin: 100% 100%;
    transform: scale(0.5, 0.5) rotate(0deg);
  }

  60% {
    opacity: 1;
    transform-origin: 0%;
    transform: scale(0.5, 0.5) rotate(0deg);
  }

  80% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scale(0.5, 0.5) rotate(0deg);
  }

  100% {
    opacity: 1;
    transform-origin: 50% 50%;
    transform: scale(1, 1) rotate(0deg);
  }
}

@keyframes amosFoolishOut {
  0% {
    opacity: 1;
    transform-origin: 50% 50%;
    transform: scale(1, 1) rotate(360deg);
  }

  20% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scale(0.5, 0.5) rotate(0deg);
  }

  40% {
    opacity: 1;
    transform-origin: 100% 0%;
    transform: scale(0.5, 0.5) rotate(0deg);
  }

  60% {
    opacity: 1;
    transform-origin: 0%;
    transform: scale(0.5, 0.5) rotate(0deg);
  }

  80% {
    opacity: 1;
    transform-origin: 0% 100%;
    transform: scale(0.5, 0.5) rotate(0deg);
  }

  100% {
    opacity: 0;
    transform-origin: 50% 50%;
    transform: scale(0, 0) rotate(0deg);
  }
}

@keyframes amosHoleOut {
  0% {
    opacity: 1;
    transform-origin: 50% 50%;
    transform: scale(1, 1) rotateY(0deg);
  }

  100% {
    opacity: 0;
    transform-origin: 50% 50%;
    transform: scale(0, 0) rotateY(180deg);
  }
}

@keyframes amosSwashIn {
  0% {
    opacity: 0;
    transform-origin: 50% 50%;
    transform: scale(0, 0);
  }

  90% {
    opacity: 1;
    transform-origin: 50% 50%;
    transform: scale(0.9, 0.9);
  }

  100% {
    opacity: 1;
    transform-origin: 50% 50%;
    transform: scale(1, 1);
  }
}

@keyframes amosSwashOut {
  0% {
    opacity: 1;
    transform-origin: 50% 50%;
    transform: scale(1, 1);
  }

  80% {
    opacity: 1;
    transform-origin: 50% 50%;
    transform: scale(0.9, 0.9);
  }

  100% {
    opacity: 0;
    transform-origin: 50% 50%;
    transform: scale(0, 0);
  }
}

// bomb

@keyframes amosBombLeftOut {
  0% {
    opacity: 1;
    transform-origin: 50% 50%;
    filter: blur(0);
    transform: rotate(0deg);
  }

  50% {
    opacity: 1;
    transform-origin: -100% 50%;
    filter: blur(0);
    transform: rotate(-160deg);
  }

  100% {
    opacity: 0;
    transform-origin: -100% 50%;
    filter: blur(20px);
    transform: rotate(-160deg);
  }
}

@keyframes amosBombRightOut {
  0% {
    opacity: 1;
    transform-origin: 50% 50%;
    filter: blur(0);
    transform: rotate(0deg);
  }

  50% {
    opacity: 1;
    transform-origin: 200% 50%;
    filter: blur(0);
    transform: rotate(160deg);
  }

  100% {
    opacity: 0;
    transform-origin: 200% 50%;
    filter: blur(20px);
    transform: rotate(160deg);
  }
}
