diff --git a/shader/lightmapCircle.frag b/shader/lightmapCircle.frag new file mode 100644 index 000000000..b1a804b5a --- /dev/null +++ b/shader/lightmapCircle.frag @@ -0,0 +1,12 @@ +#version 430 core +in vec2 cenPosT; +in vec2 gParams; +out vec4 fColor; + +void main() +{ + vec2 pos = gl_FragCoord.xy; + float dist = min(1 , 2*distance(pos,cenPosT) / (gParams.x)); + float c = gParams.y * pow(1-dist,2); + fColor = vec4( c,c,c ,c ); +} diff --git a/shader/lightmapCircle.geom b/shader/lightmapCircle.geom new file mode 100644 index 000000000..a4a6cd613 --- /dev/null +++ b/shader/lightmapCircle.geom @@ -0,0 +1,29 @@ +#version 430 core +layout (points) in; +layout (triangle_strip, max_vertices = 4) out; +in vec2 vParams []; +out vec2 gParams; +out vec2 cenPosT; + +uniform vec2 winSize; +uniform float zoom; + +void main() +{ + vec3 cenPos = gl_in[0].gl_Position.xyz; + gParams = vec2( vParams[0].x * zoom * 2, vParams[0].y); + float gRad = gParams.x; + + cenPosT = vec2 ( (cenPos.x + 1) * 0.5 * winSize.x , (cenPos.y + 1) * 0.5 * winSize.y); + + gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y + gRad/winSize.y, 0.9 , 1); + EmitVertex(); + gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y + gRad/winSize.y, 0.9 , 1); + EmitVertex(); + gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y - gRad/winSize.y, 0.9 , 1); + EmitVertex(); + gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y - gRad/winSize.y, 0.9 , 1); + EmitVertex(); + + EndPrimitive(); +} diff --git a/shader/lightmapCircle.vert b/shader/lightmapCircle.vert new file mode 100644 index 000000000..0498314fe --- /dev/null +++ b/shader/lightmapCircle.vert @@ -0,0 +1,15 @@ +#version 430 core +layout (location = 0) in vec4 position; +out vec2 vParams; + +uniform vec2 winSize; +uniform float zoom; +uniform vec2 translation; +uniform float rotation; +uniform mat4 worldMat; + +void main() +{ + gl_Position = vec4(position.xy,0,1); + vParams = position.zw; +} diff --git a/src/Dodge/Critters.hs b/src/Dodge/Critters.hs index efe1036dc..f505eb204 100644 --- a/src/Dodge/Critters.hs +++ b/src/Dodge/Critters.hs @@ -277,8 +277,6 @@ drawEquipment cr = pictures $ map f $ IM.toList (_crInv cr) frontArmouredPict = const $ pictures [ color (greyN 0.8) $ circleSolid 20 , color red $ circLine 20 --- ,color (greyN 0.1) $ thickArc 0 90 20 5 --- ,color (greyN 0.1) $ thickArc 270 360 20 5 ] --packCrits :: (Int -> World -> World) -> [Int] -> [Creature] diff --git a/src/Dodge/Weapons.hs b/src/Dodge/Weapons.hs index e627e3e4f..06f966a45 100644 --- a/src/Dodge/Weapons.hs +++ b/src/Dodge/Weapons.hs @@ -564,7 +564,7 @@ startZoomOutLongGun _ w = w & creatures . ix 0 . crInv . ix (_crInvSel (_creatu poisonSprayer = defaultAutoGun - { _itName = "POISONSPRAYER" + { _itName = "POISONSPRAY" , _itIdentity = PoisonSprayer , _wpMaxAmmo = 500 , _wpLoadedAmmo = 500 @@ -586,7 +586,7 @@ poisonSprayer = defaultAutoGun } flamer = defaultAutoGun - { _itName = "FLAMETHROWER" + { _itName = "FLAMER" , _itIdentity = Flamethrower , _wpMaxAmmo = 250 , _wpLoadedAmmo = 250 @@ -1058,8 +1058,8 @@ moveFlame rotd w pt = rfl wl p = Just $ pt {_btTimer' = time -1, _btPos' = pOut p , _btVel' = reflV wl, _ptPict' = thepic $ pOut p } - glow p' = onLayerL [levLayer UPtLayer,0] $ uncurry translate p' - $ color (withAlpha 0.02 orange) + glow p' = setLayer 2 $ onLayerL [levLayer UPtLayer,0] $ uncurry translate p' + $ color (withAlpha 0.01 orange) $ circleSolid 50 pOut p = p +.+ safeNormalizeV (sp -.- p) --reflV wall = (0.6 *.* reflectIn (_wlLine wall !! 1 -.- _wlLine wall !! 0) diff --git a/src/Dodge/WorldActions.hs b/src/Dodge/WorldActions.hs index 6d8f5334c..4466fbb9a 100644 --- a/src/Dodge/WorldActions.hs +++ b/src/Dodge/WorldActions.hs @@ -475,7 +475,6 @@ crGlareWidth :: Float -> Color -> Float -> Point2 -> Creature -> Particle' crGlareWidth wdth col alphay p cr = Particle' { _ptPict' = onLayerL [levLayer GloomLayer + 2] $ l cp - --{ _ptPict' = [(blank, [levLayer WlLayer + 2])] , _ptUpdate' = \w pt -> (w, Just $ pt {_ptPict' = onLayerL [levLayer GloomLayer + 2] $ upp cid w ,_ptUpdate' = ptTimer' 0 } @@ -489,7 +488,6 @@ crGlareWidth wdth col alphay p cr = cid = _crID cr upp cid' w' = case w' ^? creatures . ix cid . crPos of Just y -> l y - --Just p -> uncurry translate p $ circleSolid 5 _ -> blank muzFlareAt :: Point2 -> World -> World diff --git a/src/Picture/Preload.hs b/src/Picture/Preload.hs index d7d4a7c21..fdb50643b 100644 --- a/src/Picture/Preload.hs +++ b/src/Picture/Preload.hs @@ -23,7 +23,7 @@ data RenderData = RenderData , _textShader :: (Program, [UniformLocation]) , _circShader :: (Program, [UniformLocation]) , _arcShader :: (Program, [UniformLocation]) - , _fadeCircleShader :: (Program, [UniformLocation]) + , _lightmapCircleShader :: (Program, [UniformLocation]) , _backShader :: (Program, [UniformLocation]) , _wallShadowShader :: (Program, [UniformLocation]) , _triVAO :: VAO @@ -100,7 +100,7 @@ preloadRender = do ts <- makeSourcedShader "character" [VertexShader,GeometryShader,FragmentShader] cs <- makeSourcedShader "circle" [VertexShader,GeometryShader,FragmentShader] as <- makeSourcedShader "arc" [VertexShader,GeometryShader,FragmentShader] - fcs <- makeSourcedShader "fadeCircle" [VertexShader,GeometryShader,FragmentShader] + fcs <- makeSourcedShader "lightmapCircle" [VertexShader,GeometryShader,FragmentShader] bgs <- makeSourcedShader "background" [VertexShader,GeometryShader,FragmentShader] wss <- makeSourcedShader "wallShadow" [VertexShader,GeometryShader,FragmentShader] @@ -163,7 +163,7 @@ preloadRender = do , _textShader = ts , _circShader = cs , _arcShader = as - , _fadeCircleShader = fcs + , _lightmapCircleShader = fcs , _backShader = bgs , _wallShadowShader = wss , _triVAO = trivao diff --git a/src/Picture/Render.hs b/src/Picture/Render.hs index 5a3dd40a6..f02c3af51 100644 --- a/src/Picture/Render.hs +++ b/src/Picture/Render.hs @@ -364,7 +364,7 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p ,_textShader pdata ,_circShader pdata ,_arcShader pdata - ,_fadeCircleShader pdata + ,_lightmapCircleShader pdata ,_backShader pdata ,_wallShadowShader pdata ] $ \shad -> do @@ -400,7 +400,7 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p -- glDrawElements GL_POINTS (fromIntegral $ length wallPoints) GL_UNSIGNED_BYTE ptr drawArrays Points (fromIntegral 0) (fromIntegral $ nWalls) cullFace $= Nothing - currentProgram $= Just (fst $ _fadeCircleShader pdata) + currentProgram $= Just (fst $ _lightmapCircleShader pdata) bindVertexArrayObject $= Just (_vao $ _fadeCircVAO pdata) let fadeCircPtr = (\(_,ptr,_) -> ptr) $ head $ _vaoBufferTargets $ _fadeCircVAO pdata pokeFourOff fadeCircPtr 0 (x,y,r,lum) @@ -437,9 +437,6 @@ renderPicture' pdata rot zoom (tranx,trany) (winx,winy) wallPoints lightPoints p ,_textShader pdata ,_circShader pdata ,_arcShader pdata --- ,_fadeCircleShader pdata --- ,_backShader pdata --- ,_wallShadowShader pdata ] $ \shad -> do currentProgram $= Just (fst shad) uniform (snd shad !! 0) $= Vector2 (2::Float) 2 diff --git a/src/Shaders.hs b/src/Shaders.hs index 7d127d140..b8a5a2886 100644 --- a/src/Shaders.hs +++ b/src/Shaders.hs @@ -64,9 +64,9 @@ makeArcShader = do makeFadeShader :: IO Program makeFadeShader = do - vsSource <- BS.readFile "shader/fadeCircle.vert" - gsSource <- BS.readFile "shader/fadeCircle.geom" - fsSource <- BS.readFile "shader/fadeCircle.frag" + vsSource <- BS.readFile "shader/lightmapCircle.vert" + gsSource <- BS.readFile "shader/lightmapCircle.geom" + fsSource <- BS.readFile "shader/lightmapCircle.frag" makeShaderProgram [(VertexShader, vsSource ) ,(GeometryShader, gsSource )