diff --git a/block_values.lua b/block_values.lua index dd2d7d6..13bda22 100644 --- a/block_values.lua +++ b/block_values.lua @@ -61,6 +61,11 @@ minetest.register_on_mods_loaded(function() --random_deviation = .1 behavior_type = "ignore" end + --"rolled homogenous armor" + if behavior_type=="ignore" then + RHA=0 + random_deviation=0 + end Guns4d.node_properties[i] = {mmRHA=RHA*1000, random_deviation=random_deviation, behavior=behavior_type} end end) diff --git a/classes/Gun.lua b/classes/Gun.lua index a696906..3dcd2bd 100644 --- a/classes/Gun.lua +++ b/classes/Gun.lua @@ -1062,12 +1062,10 @@ function gun_default:update_animation_rotation() out = vector.new(self.b3d_model.global_frames.rotation[frame1]:to_euler_angles_unpack())*180/math.pi --print("rawsent") else --to stop nan - local ip_ratio = current_frame-frame1 + local ip_ratio = (current_frame-frame1)/(frame2-frame1) local vec1 = self.b3d_model.global_frames.rotation[frame1] local vec2 = self.b3d_model.global_frames.rotation[frame2] out = vector.new(vec1:slerp(vec2, ip_ratio):to_euler_angles_unpack())*180/math.pi - --out = vec1+((vec1-vec2)*ip_ratio) --they're euler angles... actually I wouldnt think this works, but it's good enough for my purposes. - --print("interpolated") end else out = vector.copy(self.b3d_model.global_frames.rotation[1]) @@ -1083,8 +1081,8 @@ end local out = {arm_left=vector.new(), arm_right=vector.new()} function gun_default:get_arm_aim_pos() local current_frame = self.animation_data.current_frame+1 - local frame1 = (math.floor(current_frame)/self.consts.KEYFRAME_SAMPLE_PRECISION) - local frame2 = (math.floor(current_frame)/self.consts.KEYFRAME_SAMPLE_PRECISION)+1 + local frame1 = math.floor(current_frame/self.consts.KEYFRAME_SAMPLE_PRECISION) + local frame2 = math.floor(current_frame/self.consts.KEYFRAME_SAMPLE_PRECISION)+1 current_frame = current_frame/self.consts.KEYFRAME_SAMPLE_PRECISION for i, v in pairs(out) do @@ -1093,9 +1091,10 @@ function gun_default:get_arm_aim_pos() if (not self.b3d_model.global_frames[i][frame2]) or (current_frame==frame1) then out[i] = vector.copy(self.b3d_model.global_frames[i][frame1]) else --to stop nan - local ip_ratio = current_frame-frame1 + local ip_ratio = (current_frame-frame1)/(frame2-frame1) local vec1 = self.b3d_model.global_frames[i][frame1] local vec2 = self.b3d_model.global_frames[i][frame2] + print(current_frame, frame1, frame2, ip_ratio) out[i] = vec1+((vec1-vec2)*ip_ratio) end else diff --git a/classes/gun_construct.lua b/classes/gun_construct.lua index 1a49076..20541bd 100644 --- a/classes/gun_construct.lua +++ b/classes/gun_construct.lua @@ -110,7 +110,6 @@ function gun_default:construct_instance() }) end if self.custom_construct then self:custom_construct() end - self.properties = mtul.class.proxy_table:new(self.properties) end --[[ @@ -282,6 +281,7 @@ function gun_default:construct_base_class() for _, v in pairs(self.properties.ammo.accepted_magazines) do self.accepted_magazines[v] = true end + self.properties = mtul.class.proxy_table:new(self.properties) Guns4d.gun._registered[self.name] = self --add gun self to the registered table register_visual_entity(self, props) --register the visual entity diff --git a/guide_book.lua b/guide_book.lua new file mode 100644 index 0000000..85ff30a --- /dev/null +++ b/guide_book.lua @@ -0,0 +1,75 @@ +local show_guide +minetest.register_tool("guns4d:guide_book", { + description = "mysterious gun related manual", + inventory_image = "guns4d_guide.png", + on_use = function(itemstack, player, pointed) + show_guide(player,1) + end, + on_place = function(itemstack, player, pointed_thing) + if pointed_thing and (pointed_thing.type == "node") then + local pname = player:get_player_name() + local node = minetest.get_node(pointed_thing.under).name + local props = Guns4d.node_properties[node] + if props.behavior~="ignore" then + minetest.chat_send_player(pname, math.ceil(props.mmRHA).."mm of \"Rolled Homogenous Armor\" per meter") + minetest.chat_send_player(pname, (math.ceil(props.random_deviation*100)/100).."° of deviation per meter") + else + minetest.chat_send_player(pname, "bullets pass through this block like air") + end + end + end +}) +local pages = { + --first page, diagram of m4 and controls + "\ + size[7.5,10.5]\ + image[0,0;7.5,10.5;guns4d_guide_cover.png]\ + ", + "\ + size[15,10.5]\ + image[0,0;15,10.5;m4_diagram_text_en.png]\ + image[0,0;15,10.5;m4_diagram_overlay.png]\ + ", + "\ + size[15,10.5]\ + image[0,0;15,10.5;guns4d_guide_page_2.png]\ + " + -- +} +function show_guide(player, page) + player:hud_set_flags({wielditem=false}) + local form = pages[page] + form = "\ + formspec_version[6]\ + "..form + if page==1 then + form=form.."\ + button[5.5,9.5;.7,.5;page_next;next]" + else + form=form.."\ + image[0,0;15,10.5;page_crinkles.png]\ + button[13.75,9.75;.7,.5;page_next;next]\ + button[.6,9.75;.7,.5;page_back;back]\ + field[5.6,9.8;.7,.5;page_number;page;"..page.."]\ + field_close_on_enter[page_number;false]\ + label[6.25,10.05; /"..#pages.."]" + end + --button[,;,;page_turn;