# Path: Chains/grabandthrow.py
# class THROW_DIRECTION(Enum):
#     UP = 0
#     DOWN = 1
#     FORWARD = 2
#     BACK = 3


import melee
import Chains
import random
from melee.enums import Action, Button
from Tactics.tactic import Tactic
from Chains.grabandthrow import THROW_DIRECTION
        if inshinerange and facingopponent and (self.shinecount < self.shinemax):
            self.pickchain(Chains.Multishine)
            return
        # Here's where things get complicated...
        else:
            # If we're not in range, then we need to get back into range. But how?
            #   Wavedash or SHFFL?
            if not inshinerange:
                if self.waveshine:
                    x = 0.5
                    # If opponent is facing us, do the max distance wavedash to cross them up (avoid grab)
                    if (opponent_state.position.x < smashbot_state.position.x) == opponent_state.facing:
                        x = 1.0
                    self.chain = None
                    self.pickchain(Chains.Waveshine, [x])
                    shinecount = 0
                    return
                if self.shffl:
                    self.chain = None
                    self.pickchain(Chains.Shffl)
                    shinecount = 0
                    return

            # Recalculate facing for the slide end
            facingopponent = smashbot_state.facing == (ourendposition < endposition)
            if smashbot_state.action == Action.TURNING and smashbot_state.action_frame == 1:
                facingopponent = not facingopponent

            # Grab opponent
            if ingrabrange and facingopponent and (self.shinecount >= self.shinemax):

# Path: Chains/grabandthrow.py
# class THROW_DIRECTION(Enum):
#     UP = 0
#     DOWN = 1
#     FORWARD = 2
#     BACK = 3


# Path: Tactics/pressure.py
import melee
import Chains
import random
from melee.enums import Action, Button
from Tactics.tactic import Tactic
from Chains.grabandthrow import THROW_DIRECTION

        if inshinerange and facingopponent and (self.shinecount < self.shinemax):
            self.pickchain(Chains.Multishine)
            return
        # Here's where things get complicated...
        else:
            # If we're not in range, then we need to get back into range. But how?
            #   Wavedash or SHFFL?
            if not inshinerange:
                if self.waveshine:
                    x = 0.5
                    # If opponent is facing us, do the max distance wavedash to cross them up (avoid grab)
                    if (opponent_state.position.x < smashbot_state.position.x) == opponent_state.facing:
                        x = 1.0
                    self.chain = None
                    self.pickchain(Chains.Waveshine, [x])
                    shinecount = 0
                    return
                if self.shffl:
                    self.chain = None
                    self.pickchain(Chains.Shffl)
                    shinecount = 0
                    return

            # Recalculate facing for the slide end
            facingopponent = smashbot_state.facing == (ourendposition < endposition)
            if smashbot_state.action == Action.TURNING and smashbot_state.action_frame == 1:
                facingopponent = not facingopponent

            # Grab opponent
            if ingrabrange and facingopponent and (self.shinecount >= self.shinemax):

                self.pickchain(Chains.GrabAndThrow, [THROW_DIRECTION.DOWN])