diff --git a/craft_ingredients/ores.lua b/craft_ingredients/ores.lua index 9aa93d7..c64ed33 100644 --- a/craft_ingredients/ores.lua +++ b/craft_ingredients/ores.lua @@ -5,10 +5,10 @@ minetest.register_node(":multidecor:wolfram_ore", { paramtype = "light", light_source = 2, drop = { - max_items = 4, + max_items = 3, items = { { - rarity = 1000, + rarity = 1, items = {"multidecor:wolfram_lump"} } } @@ -24,10 +24,10 @@ minetest.register_node(":multidecor:desert_wolfram_ore", { paramtype = "light", light_source = 2, drop = { - max_items = 4, + max_items = 3, items = { { - rarity = 1000, + rarity = 1, items = {"multidecor:wolfram_lump"} } } @@ -40,7 +40,7 @@ minetest.register_ore({ ore_type = "scatter", ore = "multidecor:wolfram_ore", wherein = "default:stone", - clust_scarcity = 800, + clust_scarcity = 1500, clust_num_ores = 4, clust_size = 2, height_min = -31000, @@ -51,7 +51,7 @@ minetest.register_ore({ ore_type = "scatter", ore = "multidecor:desert_wolfram_ore", wherein = "default:desert_stone", - clust_scarcity = 800, + clust_scarcity = 1500, clust_num_ores = 4, clust_size = 2, height_min = -31000, @@ -87,7 +87,7 @@ minetest.register_node(":multidecor:zinc_ore", { max_items = 5, items = { { - rarity = 1000, + rarity = 1, items = {"multidecor:zinc_fragment"} } } @@ -106,7 +106,7 @@ minetest.register_node(":multidecor:desert_zinc_ore", { max_items = 5, items = { { - rarity = 1000, + rarity = 1, items = {"multidecor:zinc_fragment"} } } @@ -119,7 +119,7 @@ minetest.register_ore({ ore_type = "scatter", ore = "multidecor:zinc_ore", wherein = "default:stone", - clust_scarcity = 400, + clust_scarcity = 900, clust_num_ores = 5, clust_size = 3, height_min = -31000, @@ -129,8 +129,8 @@ minetest.register_ore({ minetest.register_ore({ ore_type = "scatter", ore = "multidecor:desert_zinc_ore", - wherein = "default:stone", - clust_scarcity = 400, + wherein = "default:desert_stone", + clust_scarcity = 900, clust_num_ores = 5, clust_size = 3, height_min = -31000, diff --git a/decor_api/register.lua b/decor_api/register.lua index 043e6ad..1bbed98 100644 --- a/decor_api/register.lua +++ b/decor_api/register.lua @@ -173,15 +173,14 @@ function register.register_furniture_unit(name, def, craft_def) end end - if def.type ~= "decoration" then - f_def.callbacks = def.callbacks or {} - for cb_name, f in pairs(f_def.callbacks) do - f_def[cb_name] = f - end - f_def.add_properties = def.add_properties or {} + f_def.callbacks = def.callbacks or {} + for cb_name, f in pairs(f_def.callbacks) do + f_def[cb_name] = f end + f_def.add_properties = def.add_properties or {} + local f_name = "multidecor:" .. name minetest.register_node(":" .. f_name, f_def) diff --git a/decor_api/sitting.lua b/decor_api/sitting.lua index 08fedd1..6660d40 100644 --- a/decor_api/sitting.lua +++ b/decor_api/sitting.lua @@ -22,6 +22,7 @@ function sitting.attach_player_to_node(attacher, seat_data) if seat_data.model then attacher:set_properties({mesh = seat_data.model.mesh}) attacher:set_animation(seat_data.model.anim.range, seat_data.model.anim.speed, seat_data.model.anim.blend, seat_data.model.anim.loop) + minetest.debug("anim: " .. dump({attacher:get_animation()})) end end @@ -71,7 +72,7 @@ function sitting.sit_player(player, node_pos) physics = {speed = physics.speed, jump = physics.jump} } local node = minetest.get_node(node_pos) - local seat_data = minetest.registered_nodes[node.name].add_properties.seat_data + local seat_data = table.copy(minetest.registered_nodes[node.name].add_properties.seat_data) local rand_model if seat_data.models then @@ -80,6 +81,21 @@ function sitting.sit_player(player, node_pos) prev_pdata.mesh = player:get_properties().mesh prev_pdata.anim = {range = range, speed = speed, blend = blend, loop = loop} + local node_dir = vector.multiply(minetest.facedir_to_dir(minetest.get_node(node_pos).param2), -1) + local near_node = minetest.get_node(vector.add(node_pos, node_dir)) + + if minetest.get_item_group(near_node.name, "table") ~= 1 then + local models2 = {} + for i=1, #seat_data.models do + if not seat_data.models[i].is_near_block_required then + table.insert(models2, seat_data.models[i]) + end + end + + seat_data.models = models2 + end + + rand_model = seat_data.models[math.random(1, #seat_data.models)] end diff --git a/modern/chairs.lua b/modern/chairs.lua index f8b851c..d2e5b8d 100644 --- a/modern/chairs.lua +++ b/modern/chairs.lua @@ -1,3 +1,19 @@ +local models = { + { + mesh = "multidecor_character_sitting.b3d", + anim = {range = {x=1, y=80}, speed = 1} + }, + { + mesh = "multidecor_character_sitting.b3d", + anim = {range = {x=81, y=82}, speed = 1} + }, + { + mesh = "multidecor_character_sitting.b3d", + anim = {range = {x=83, y=84}, speed = 1}, + is_near_block_required = true + } +} + register.register_seat("kitchen_modern_wooden_chair", { style = "modern", material = "wood", @@ -13,12 +29,7 @@ register.register_seat("kitchen_modern_wooden_chair", { seat_data = { pos = {x=0.0, y=0.35, z=0.0}, rot = {x=0, y=0, z=0}, - models = { - { - mesh = "multidecor_character_sitting.b3d", - anim = {range = {x=1, y=80}, speed = 15} - } - } + models = models } }, { @@ -44,12 +55,7 @@ register.register_seat("soft_kitchen_modern_wooden_chair", { seat_data = { pos = {x=0.0, y=0.4, z=0.0}, rot = {x=0, y=0, z=0}, - models = { - { - mesh = "multidecor_character_sitting.b3d", - anim = {range = {x=1, y=80}, speed = 15} - } - } + models = models } }, { @@ -75,12 +81,7 @@ register.register_seat("soft_modern_jungle_chair", { seat_data = { pos = {x=0.0, y=0.3, z=0.0}, rot = {x=0, y=0, z=0}, - models = { - { - mesh = "multidecor_character_sitting.b3d", - anim = {range = {x=1, y=80}, speed = 15} - } - } + models = models } }, { @@ -106,12 +107,7 @@ register.register_seat("soft_round_modern_metallic_chair", { seat_data = { pos = {x=0.0, y=0.3, z=0.0}, rot = {x=0, y=0, z=0}, - models = { - { - mesh = "multidecor_character_sitting.b3d", - anim = {range = {x=1, y=80}, speed = 15} - } - } + models = models } }, { @@ -136,12 +132,7 @@ register.register_seat("round_modern_metallic_stool", { seat_data = { pos = {x=0.0, y=0.4, z=0.0}, rot = {x=0, y=0, z=0}, - models = { - { - mesh = "multidecor_character_sitting.b3d", - anim = {range = {x=1, y=80}, speed = 15} - } - } + models = models } }, { @@ -171,12 +162,7 @@ register.register_seat("armchair_with_wooden_legs", { seat_data = { pos = {x=0.0, y=0.2, z=0.0}, rot = {x=0, y=0, z=0}, - models = { - { - mesh = "multidecor_character_sitting.b3d", - anim = {range = {x=1, y=80}, speed = 15} - } - } + models = models } }, { @@ -220,12 +206,7 @@ register.register_seat("sofa", { seat_data = { pos = {x=0.0, y=0.1, z=0.0}, rot = {x=0, y=0, z=0}, - models = { - { - mesh = "multidecor_character_sitting.b3d", - anim = {range = {x=1, y=80}, speed = 15} - } - } + models = models } }, { diff --git a/modern/living_room.lua b/modern/living_room.lua index 728e4a1..7acb6c9 100644 --- a/modern/living_room.lua +++ b/modern/living_room.lua @@ -1,9 +1,29 @@ -minetest.register_node(":multidecor:modern_floor_clock", { +local function get_current_time() + --[[local time = minetest.get_timeofday() + local total_seconds = math.floor(time * 1440) + local total_minutes = total_seconds % 60 + local total_hours = total_minutes % 60 + + local seconds = total_seconds - (total_minutes*60) + local minutes = total_minutes - (total_hours*60)]] + local timeofday = minetest.get_timeofday() + local time = math.floor(timeofday * 1440) + local minute = time % 60 + local hour = (time - minute) / 60 + + return hour, minute +end + +local function get_formatted_time_str(hours, minutes, seconds) + return ("Current time: %d:%d"):format(hours, minutes) +end + +register.register_furniture_unit("modern_floor_clock", { + type = "decoration", + style = "modern", + material = "wood", visual_scale = 0.5, - drawtype = "mesh", description = "Floor Clock", - paramtype = "light", - paramtype2 = "facedir", inventory_image = "multidecor_floor_clock_inv.png", use_texture_alpha = "blend", mesh = "multidecor_floor_clock.b3d", @@ -13,81 +33,82 @@ minetest.register_node(":multidecor:modern_floor_clock", { "multidecor_dial.png", "multidecor_glass_material.png" }, - groups = {choppy=1.5}, - collision_box = { - type = "fixed", - fixed = {-0.4, -0.5, -0.3, 0.4, 2, 0.4} - }, - selection_box = { - type = "fixed", - fixed = {-0.4, -0.5, -0.3, 0.4, 2, 0.4} - }, - on_construct = function(pos) - local wheel = minetest.add_entity(pos, "modern:floor_clock_balance_wheel") + bounding_boxes = {{-0.4, -0.5, -0.3, 0.4, 2, 0.4}}, + callbacks = { + on_construct = function(pos) + local wheel = minetest.add_entity(pos, "modern:floor_clock_balance_wheel") - local dir = vector.multiply(minetest.facedir_to_dir(minetest.get_node(pos).param2), -1) - local y_rot = vector.dir_to_rotation(dir).y + local dir = vector.multiply(minetest.facedir_to_dir(minetest.get_node(pos).param2), -1) + local y_rot = vector.dir_to_rotation(dir).y - wheel:set_rotation({x=0, y=y_rot, z=0}) + wheel:set_rotation({x=0, y=y_rot, z=0}) - minetest.get_meta(pos):set_string("is_activated", "false") - end, - on_rightclick = function(pos, node, clicker) - local wheel = minetest.get_objects_inside_radius(pos, 0.3) + minetest.get_meta(pos):set_string("is_activated", "false") + end, + on_rightclick = function(pos, node, clicker) + local wheel = minetest.get_objects_inside_radius(pos, 0.3) - -- Not found the balance wheel - if #wheel == 0 then - return + -- Not found the balance wheel + if #wheel == 0 then + return + end + + wheel = wheel[1] + + if wheel:get_luaentity().name ~= "modern:floor_clock_balance_wheel" then + return + end + + local meta = minetest.get_meta(pos) + + if meta:get_string("is_activated") == "false" then + wheel:set_animation({x=1, y=40}, 40.0, 0.0, true) + meta:set_string("is_activated", "true") + + local handle = minetest.sound_play("multidecor_clock_chime", {object=wheel, fade=1.0, max_hear_distance=10, loop=true}) + meta:set_string("sound_handle", minetest.serialize(handle)) + + minetest.get_node_timer(pos):start(1) + else + wheel:set_animation({x=1, y=1}, 0.0) + meta:set_string("is_activated", "false") + + local handle = minetest.deserialize(meta:get_string("sound_handle")) + minetest.sound_stop(handle) + + minetest.get_node_timer(pos):stop() + end + end, + after_dig_node = function(pos, oldnode, oldmeta) + local wheel = minetest.get_objects_inside_radius(pos, 0.3) + + -- Not found the balance wheel + if #wheel == 0 then + return + end + + wheel = wheel[1] + + if wheel:get_luaentity().name ~= "modern:floor_clock_balance_wheel" then + return + end + + local handle = minetest.deserialize(oldmeta.fields.sound_handle) + + if handle then + minetest.sound_stop(handle) + end + wheel:remove() + end, + on_timer = function(pos, elapsed) + local hours, minutes, seconds = get_current_time() + minetest.get_meta(pos):set_string("infotext", get_formatted_time_str(hours, minutes, seconds)) + + return true end - - wheel = wheel[1] - - if wheel:get_luaentity().name ~= "modern:floor_clock_balance_wheel" then - return - end - - local meta = minetest.get_meta(pos) - - if meta:get_string("is_activated") == "false" then - wheel:set_animation({x=1, y=40}, 40.0, 0.0, true) - meta:set_string("is_activated", "true") - - local handle = minetest.sound_play("multidecor_clock_chime", {object=wheel, fade=1.0, max_hear_distance=10, loop=true}) - meta:set_string("sound_handle", minetest.serialize(handle)) - else - wheel:set_animation({x=1, y=1}, 0.0) - meta:set_string("is_activated", "false") - - local handle = minetest.deserialize(meta:get_string("sound_handle")) - minetest.sound_stop(handle) - end - end, - after_dig_node = function(pos, oldnode, oldmeta) - local wheel = minetest.get_objects_inside_radius(pos, 0.3) - - -- Not found the balance wheel - if #wheel == 0 then - return - end - - wheel = wheel[1] - - if wheel:get_luaentity().name ~= "modern:floor_clock_balance_wheel" then - return - end - - local handle = minetest.deserialize(oldmeta.fields.sound_handle) - - if handle then - minetest.sound_stop(handle) - end - wheel:remove() - end -}) - -minetest.register_craft( + } +}, { - output = "multidecor:modern_floor_clock", recipe = { {"multidecor:jungleboard", "multidecor:jungleboard", "multidecor:jungleboard"}, {"doors:door_glass", "multidecor:digital_dial", "multidecor:jungleboard"}, @@ -95,6 +116,7 @@ minetest.register_craft( } }) + minetest.register_entity("modern:floor_clock_balance_wheel", { visual = "mesh", visual_size = {x=5, y=5, z=5}, @@ -164,7 +186,56 @@ register.register_furniture_unit("alarm_clock", { "multidecor_glass_material.png" }, use_texture_alpha = "blend", - bounding_boxes = {{-0.25, -0.5, -0.175, 0.25, 0.1, 0.175}} + bounding_boxes = {{-0.25, -0.5, -0.175, 0.25, 0.1, 0.175}}, + callbacks = { + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("is_activated", "false") + meta:set_int("nodetime_elapsed", -1) + end, + on_rightclick = function(pos) + local meta = minetest.get_meta(pos) + + if meta:get_string("is_activated") == "false" then + meta:set_string("is_activated", "true") + minetest.get_node_timer(pos):start(1) + else + meta:set_string("is_activated", "false") + meta:set_int("nodetime_elapsed", -1) + minetest.get_node_timer(pos):stop() + + local handle = minetest.deserialize(meta:get_string("sound_handle")) + + if handle then + minetest.sound_stop(handle) + end + end + end, + on_timer = function(pos) + local meta = minetest.get_meta(pos) + + local elapsed = meta:get_int("nodetime_elapsed") + elapsed = elapsed + 1 + meta:set_int("nodetime_elapsed", elapsed) + + local hours, minutes, seconds = get_current_time() + meta:set_string("infotext", get_formatted_time_str(hours, minutes, seconds)) + + if elapsed % 8 == 0 then + local handle = minetest.sound_play("multidecor_clock_ticking", {pos=pos, fade=1.0, max_hear_distance=10}) + meta:set_string("sound_handle", minetest.serialize(handle)) + end + + return true + end, + after_dig_node = function(pos, oldnode, oldmeta) + local handle = minetest.deserialize(oldmeta.fields.sound_handle) + + if handle then + minetest.sound_stop(handle) + end + end + } }, { recipe = { diff --git a/modern/models/character.blend1 b/modern/models/character.blend1 new file mode 100644 index 0000000..f7acf5d Binary files /dev/null and b/modern/models/character.blend1 differ diff --git a/modern/models/multidecor_character_sitting.b3d b/modern/models/multidecor_character_sitting.b3d index ad26a55..6072412 100644 Binary files a/modern/models/multidecor_character_sitting.b3d and b/modern/models/multidecor_character_sitting.b3d differ diff --git a/modern/models/multidecor_character_sitting.blend b/modern/models/multidecor_character_sitting.blend new file mode 100644 index 0000000..cf53201 Binary files /dev/null and b/modern/models/multidecor_character_sitting.blend differ diff --git a/modern/models/multidecor_character_sitting.blend1 b/modern/models/multidecor_character_sitting.blend1 new file mode 100644 index 0000000..d825d1e Binary files /dev/null and b/modern/models/multidecor_character_sitting.blend1 differ diff --git a/modern/sounds/multidecor_clock_ticking.ogg b/modern/sounds/multidecor_clock_ticking.ogg new file mode 100644 index 0000000..bea76f6 Binary files /dev/null and b/modern/sounds/multidecor_clock_ticking.ogg differ