diff --git a/Groups.hs b/Groups.hs index edabc9c..132f53f 100644 --- a/Groups.hs +++ b/Groups.hs @@ -40,18 +40,20 @@ otherGroups x nt = filter (\g -> not $ x `elem` g) nt getAdj :: MainCharacter -> NeoTokyo -> [MainCharacter] getAdj x nt = curFrens x nt ++ (foldr (++) [] (adjGroups x nt)) --- Hurt character x -hurt :: MainCharacter -> BoardState -> BoardState -hurt x (nt,d) - | x `elem` d = if (curFrens x nt == []) +-- X hurts Y (only if adjacent) +hurt :: MainCharacter -> MainCharacter -> BoardState -> BoardState +hurt x y (nt,d) + | not $ y `elem` (getAdj x nt) = (nt,d) + | y `elem` d = if (curFrens y nt == []) then (nt, d) - else ([x] : (groupMinusChar x) : (otherGroups x nt), d) - | otherwise = (nt, x:d) + else ([y] : (groupMinusChar y) : (otherGroups y nt), d) + | otherwise = (nt, y:d) where - groupMinusChar x = (filter (/= x) $ charsGroup x nt) + groupMinusChar y = (filter (/= y) $ charsGroup y nt) --- Attract X and Y +-- Attract X and Y (only if adjacent) attract :: MainCharacter -> MainCharacter -> BoardState -> BoardState attract x y (nt,d) - | x `elem` d = (nt, (filter (/= x) d)) - | otherwise = ((uniq (charsGroup x nt ++ charsGroup y nt)) : (otherGroups y (otherGroups x nt)), d) + | not $ y `elem` (getAdj x nt) = (nt,d) + | x `elem` d = (nt, (filter (/= x) d)) + | otherwise = ((uniq (charsGroup x nt ++ charsGroup y nt)) : (otherGroups y (otherGroups x nt)), d)