diff --git a/src/Display/Curses.hs b/src/Display/Curses.hs index ad9a1e70c..c9549445d 100644 --- a/src/Display/Curses.hs +++ b/src/Display/Curses.hs @@ -1,7 +1,8 @@ module Display.Curses (displayId, startup, shutdown, display, nextEvent, setBG, setFG, setBold, Session, - white, black, yellow, blue, magenta, red, green, attr, Display.Curses.Attr) where + white, black, yellow, blue, magenta, red, green, attr, + Display.Curses.Attr, AttrColor) where import UI.HSCurses.Curses as C hiding (setBold) import qualified UI.HSCurses.CursesHelper as C diff --git a/src/Display/Gtk.hs b/src/Display/Gtk.hs index 37b2c861a..1520ba8c2 100644 --- a/src/Display/Gtk.hs +++ b/src/Display/Gtk.hs @@ -1,7 +1,7 @@ module Display.Gtk (displayId, startup, shutdown, display, nextEvent, setBG, setFG, setBold, Session, - white, black, yellow, blue, magenta, red, green, attr, Attr) where + white, black, yellow, blue, magenta, red, green, attr, Attr, AttrColor) where import Control.Monad import Control.Concurrent diff --git a/src/Display/Vty.hs b/src/Display/Vty.hs index ae68132ed..1a9dd6afc 100644 --- a/src/Display/Vty.hs +++ b/src/Display/Vty.hs @@ -1,7 +1,7 @@ module Display.Vty (displayId, startup, shutdown, display, nextEvent, setBold, setBG, setFG, Session, - white, black, yellow, blue, magenta, red, green, attr, Attr) where + white, black, yellow, blue, magenta, red, green, attr, Attr, AttrColor) where import Graphics.Vty as V import Data.List as L diff --git a/src/Display2.hs b/src/Display2.hs index 430048c01..191ac4b96 100644 --- a/src/Display2.hs +++ b/src/Display2.hs @@ -149,7 +149,7 @@ displayLevel session per slevel = lvl@(Level nm hs sz@(sy,sx) ms smap nlmap lmeta) })) msg moverlay = let Movable { mhpmax = phpmax, mhp = php, mdir = pdir, - mloc = ploc, mitems = pitems, mtype = ptype } = + mloc = ploc, mitems = pitems } = getPlayerBody state overlay = maybe "" id moverlay reachable = preachable per @@ -169,6 +169,10 @@ displayLevel session per gold = maybe 0 (icount . fst) $ findItem (\ i -> iletter i == Just '$') pitems hs = levelHeroList state ms = levelMonsterList state + setFg color = setFG color + setInv color = if color == white + then setBG white . setFG black + else setBG white . setFG color disp n msg = display ((0,0),sz) session (\ loc -> let tile = nlmap `lAt` loc @@ -177,7 +181,7 @@ displayLevel session per rea = S.member loc reachable (rv,ra) = case L.find (\ m -> loc == mloc m) (hs ++ ms) of _ | sTer > 0 -> viewTerrain sTer False (tterrain tile) - Just m | sOmn || vis -> viewMovable (mtype m) (mtype m == ptype) + Just m | sOmn || vis -> let (sym, color) = viewMovable (mtype m) in (sym, (if mloc m == ploc then setInv else setFg) color) _ | sSml && sml >= 0 -> viewSmell sml | otherwise -> viewTile vis tile assocs vision = diff --git a/src/Monster.hs b/src/Monster.hs index 9441e26a3..591256a63 100644 --- a/src/Monster.hs +++ b/src/Monster.hs @@ -142,11 +142,9 @@ newMonster loc ftp = speed FastEye = 4 speed Nose = 11 -viewMovable :: MovableType -> Bool -> (Char, Attr -> Attr) -viewMovable (Hero symbol name) r = (symbol, - if r - then setBG white . setFG black - else setBG black . setFG white) -viewMovable Eye _ = ('e', setFG red) -viewMovable FastEye _ = ('e', setFG blue) -viewMovable Nose _ = ('n', setFG green) +-- Heroes are white, monsters are colorful. +viewMovable :: MovableType -> (Char, AttrColor) +viewMovable (Hero sym _) = (sym, white) +viewMovable Eye = ('e', red) +viewMovable FastEye = ('e', blue) +viewMovable Nose = ('n', green) diff --git a/src/Perception.hs b/src/Perception.hs index 8d55b26df..307ea022c 100644 --- a/src/Perception.hs +++ b/src/Perception.hs @@ -39,6 +39,7 @@ perception_ state@(State { slevel = Level { lmap = lmap }, reachable = S.unions (L.map preachable pers) visible = S.unions (L.map pvisible pers) -- TODO: update individual hero perceptions here; see https://github.com/Mikolaj/LambdaHack/issues/issue/31 + -- TODO: do perception also for a monster under player control in Perception reachable visible perception :: FovMode -> Loc -> LMap -> Perception