diff options
Diffstat (limited to 'bin/main.lua')
-rw-r--r-- | bin/main.lua | 207 |
1 files changed, 51 insertions, 156 deletions
diff --git a/bin/main.lua b/bin/main.lua index c0b0ce3..4ef3d14 100644 --- a/bin/main.lua +++ b/bin/main.lua @@ -1,162 +1,57 @@ -local shader = [[ -extern Image diffuse; -extern vec2 mouse; -extern number i ; - -vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) -{ - vec3 light_vec = vec3(mouse,1); - vec3 light_direction = light_vec - vec3(pixel_coords, 0); - float distance = length(light_direction); - light_direction = normalize(light_direction); - - vec3 normal = Texel(texture, texture_coords).xyz; - normal.y = 1 - normal.y; - normal = normalize(mix(vec3(-1), vec3(1), normal)); - - //float attenuation = 1/(7e-5*pow(distance, 2)); - float attenuation = 5000/pow(distance, 2); - //float attenuation = 1; - - float diffuse_term = clamp(attenuation * dot(normal, light_direction), 0.0, 1.0); - - vec3 dark_color = vec3(0.0, 0.0, 1); - //vec3 light_color = vec3(0.6, 0.6, 0.0); - vec3 light_color = vec3(0.8, 0.8, 0.0); - vec3 ambient = mix(dark_color, light_color, diffuse_term) * 0.20; - - // the shaded cel has a light value of 0.5, the light cel has a light value of 1 - float cel_diffuse_term = smoothstep(0.49, 0.52, diffuse_term)/2 + 0.5; - //float cel_diffuse_term = step(0.5, diffuse_term)/2 + 0.5; - - return vec4((cel_diffuse_term * Texel(diffuse, texture_coords).rgb) + ambient, Texel(texture, texture_coords).a); - //return vec4(ambient+Texel(diffuse, texture_coords).rgb/100, Texel(texture, texture_coords).a); - -} -]] - -local shader2 = [[ -extern Image diffuse; -vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords) -{ - return Texel(diffuse, texture_coords); -} -]] - -local lighningShader = [[ -extern vec2 iResolution; // 分辨率, pixels -extern number iTime; // 秒数, seconds -// Lightning shader -// rand,noise,fmb functions from https://www.shadertoy.com/view/Xsl3zN -// jerome - -float rand(vec2 n) { - return fract(sin(dot(n, vec2(12.9898, 4.1414))) * 43758.5453); -} - -float noise(vec2 n) { - const vec2 d = vec2(0.0, 1.0); - vec2 b = floor(n), f = smoothstep(vec2(0.0), vec2(1.0), fract(n)); - return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y); -} - -float fbm(vec2 n) { - float total = 0.0, amplitude = 1.0; - for (int i = 0; i < 7; i++) { - total += noise(n) * amplitude; - n += n; - amplitude *= 0.5; - } - return total; -} +local loghelper = require("loghelper") +loghelper.strict(loghelper.LEVEL.INFO) +local EventMsgCenter = require("EventMsgCenter.EventMsgCenter") +local Events = require("EventMsgCenter.Events") +local timer = require("timer.timer") +_G["frame"] = 0 + +local thread = nil + +jin.core.onLoad = function() + thread = jin.thread.Thread("Test", [[ + local t = jin.thread.getThread() + local str = t:demand(2) + print(str) + t:send(3, "back data") + while true do + jin.time.sleep(1) + end + ]]) + thread:start() + EventMsgCenter.registerMsg(Events.Player_Move, function(msg) + print(msg) + end) + timer.every(1.0, function() + loghelper.log(loghelper.LEVEL.INFO, _G["frame"] .. "fps") + EventMsgCenter.sendMsg(Events.Player_Move, _G["frame"]) + _G["frame"] = 0 + if thread:receive(3) then + print(thread:fetch(3)) + end + end) + timer.after(4.0, function() + thread:send(2, "test thread data") + EventMsgCenter.unregisterAllMsgByEvent(Events.Player_Move) + end) +end -vec4 effect(vec4 outcolor, Image img, vec2 texture_coords, vec2 pixel_coords) -//void mainImage( out vec4 fragColor, in vec2 fragCoord ) -{ - vec4 col = vec4(0,0,0,1); - vec2 uv = pixel_coords.xy * 1.0 / iResolution.xy; - - - // draw a line, left side is fixed - vec2 t = uv * vec2(2.0,1.0) - iTime*3.0; - vec2 t2 = (vec2(1,-1) + uv) * vec2(2.0,1.0) - iTime*3.0; // a second strand - - // draw the lines, -// this make the left side fixed, can be useful -// float ycenter = mix( 0.5, 0.25 + 0.25*fbm( t ), uv.x*4.0); -// float ycenter2 = mix( 0.5, 0.25 + 0.25*fbm( t2 ), uv.x*4.0); - float ycenter = fbm(t)*0.5; - float ycenter2= fbm(t2)*0.5; +jin.core.onEvent = function(e) + if e.type == "quit" then + jin.core.stop() + elseif e.type == "keydown" then + if e.key == "Escape" then + jin.core.stop() + end + end +end - // falloff - float diff = abs(uv.y - ycenter); - float c1 = 1.0 - mix(0.0,1.0,diff*20.0); - - float diff2 = abs(uv.y - ycenter2); - float c2 = 1.0 - mix(0.0,1.0,diff2*20.0); - - float c = max(c1,c2); - col = vec4(c*0.6,0.2*c2,c,1.0); // purple color - //fragColor = col; - return col; -} -]] +jin.core.onUpdate = function(dt) + _G["frame"] = _G["frame"] + 1 + timer.update(dt) -local jg = jin.graphics -local effect = jg.Shader(shader) -local effect2 = jg.Shader(shader2) -local lightning = jg.Shader(lighningShader) -local diffuse = jg.Image("treestump_diffuse.png") -local img = jg.Image("treestump.png") -local img2 = jg.Image("lightning.png") -local ww, wh = jg.size() -src = jin.audio.Source("a.ogg") -local scale = 2 -ww = ww / scale -wh = wh / scale -src:play() -src:setLoop(true) -src:setVolume(0.5) -jin.audio.setVolume(0.1) -jin.core.onLoad = function() - jg.use(lightning) - lightning:send("vec2", "iResolution", ww, wh) - jg.unuse() + -- loghelper.log(loghelper.LEVEL.WARN, "版本" .. jin.revision()) end -jin.core.onEvent = function(e) - if e.type == "quit" then - jin.core.stop() - end -end -local mx, my -local c = 0 -local t = 0 -jin.core.onUpdate = function(dt) - t = t + dt - mx, my = jin.mouse.position() - mx = mx / 2 - my = my / 2 - my = wh - my - c = c + 1 - if c == 50 then - print(1/dt) - c = 0 - end -end -img:setAnchor(16, 16) -local cvs = jg.Canvas(320, 240) -local i = 0 jin.core.onDraw = function() --- if true then return end - i = i + 0.001 - jg.bind(cvs) - jg.draw(img, 10, 10) - -- jg.use(lightning) - -- lightning:send("number", "iTime", t) - -- lightning:send("Image", "img", img2) - -- jg.draw(img2, 20, 20) - -- jg.unuse() - jg.unbind() - jg.draw(cvs, 0, 0, 2, 2) -end + +end
\ No newline at end of file |