From 18e22a38fb2889032f6acf0eb5c2970c13c02d73 Mon Sep 17 00:00:00 2001 From: stujones11 Date: Sun, 17 Mar 2019 16:46:27 +0000 Subject: [PATCH] Allow particle effect overrides in gun spec --- shooter/api.lua | 75 ++++++++++++++++++++++----------------- shooter_crossbow/init.lua | 3 +- shooter_guns/init.lua | 28 ++++++++++++--- 3 files changed, 68 insertions(+), 38 deletions(-) diff --git a/shooter/api.lua b/shooter/api.lua index 6a3a372..6127e54 100644 --- a/shooter/api.lua +++ b/shooter/api.lua @@ -16,6 +16,23 @@ shooter.config = { camera_height = 1.5, } +shooter.default_particles = { + amount = 15, + time = 0.3, + minpos = {x=-0.1, y=-0.1, z=-0.1}, + maxpos = {x=0.1, y=0.1, z=0.1}, + minvel = {x=-1, y=1, z=-1}, + maxvel = {x=1, y=2, z=1}, + minacc = {x=-2, y=-2, z=-2}, + maxacc = {x=2, y=-2, z=2}, + minexptime = 0.1, + maxexptime = 0.75, + minsize = 1, + maxsize = 2, + collisiondetection = false, + texture = "shooter_hit.png", +} + local rounds = {} local shots = {} local shooting = {} @@ -74,29 +91,21 @@ shooter.register_weapon = function(name, def) }) end -shooter.spawn_particles = function(pos, texture) - if config.enable_particle_fx == true then - if type(texture) ~= "string" then - texture = config.explosion_texture - end - local spread = {x=0.1, y=0.1, z=0.1} - minetest.add_particlespawner({ - amount = 15, - time = 0.3, - minpos = vector.subtract(pos, spread), - maxpos = vector.add(pos, spread), - minvel = {x=-1, y=1, z=-1}, - maxvel = {x=1, y=2, z=1}, - minacc = {x=-2, y=-2, z=-2}, - maxacc = {x=2, y=-2, z=2}, - minexptime = 0.1, - maxexptime = 0.75, - minsize = 1, - maxsize = 2, - collisiondetection = false, - texture = texture, - }) +shooter.spawn_particles = function(pos, particles) + particles = particles or {} + if not config.enable_particle_fx == true or particles.amount == 0 then + return end + local copy = function(v) + return type(v) == "table" and table.copy(v) or v + end + local p = {} + for k, v in pairs(shooter.default_particles) do + p[k] = particles[k] and copy(particles[k]) or copy(v) + end + p.minpos = vector.subtract(pos, p.minpos) + p.maxpos = vector.add(pos, p.maxpos) + minetest.add_particlespawner(p) end shooter.play_node_sound = function(node, pos) @@ -134,7 +143,7 @@ shooter.punch_node = function(pos, spec) shooter.play_node_sound(node, pos) if item.tiles then if item.tiles[1] then - shooter.spawn_particles(pos, item.tiles[1]) + shooter.spawn_particles(pos, {texture=item.tiles[1]}) end end break @@ -170,7 +179,7 @@ local function process_hit(pointed_thing, spec, dir) if player then object:punch(player, nil, spec.tool_caps, dir) local pos = pointed_thing.intersection_point or object:get_pos() - shooter.spawn_particles(pos, config.explosion_texture) + shooter.spawn_particles(pos, spec.particles) end end end @@ -208,14 +217,16 @@ local function fire_weapon(player, itemstack, spec, extended) end pos.y = pos.y + config.camera_height minetest.sound_play(spec.sound, {object=player}) - minetest.add_particle({ - pos = pos, - velocity = vector.multiply(dir, 30), - acceleration = {x=0, y=0, z=0}, - expirationtime = 0.5, - size = 0.25, - texture = spec.particle, - }) + if spec.bullet_image then + minetest.add_particle({ + pos = pos, + velocity = vector.multiply(dir, 30), + acceleration = {x=0, y=0, z=0}, + expirationtime = 0.5, + size = 0.25, + texture = spec.bullet_image, + }) + end process_round({ spec = spec, pos = vector.add(pos, dir), diff --git a/shooter_crossbow/init.lua b/shooter_crossbow/init.lua index 7e1de0e..07f54ad 100644 --- a/shooter_crossbow/init.lua +++ b/shooter_crossbow/init.lua @@ -63,8 +63,7 @@ local function strike(arrow, pointed_thing, name) if puncher and puncher ~= target then local groups = target:get_armor_groups() or {} if groups.fleshy then - shooter.spawn_particles(hit_pos, - shooter.config.explosion_texture) + shooter.spawn_particles(hit_pos) end target:punch(object, nil, arrow_tool_caps, dir) if config.arrow_object_attach then diff --git a/shooter_guns/init.lua b/shooter_guns/init.lua index 96af527..f8bf5cc 100644 --- a/shooter_guns/init.lua +++ b/shooter_guns/init.lua @@ -8,7 +8,12 @@ shooter.register_weapon("shooter_guns:pistol", { tool_caps = {full_punch_interval=0.5, damage_groups={fleshy=2}}, groups = {snappy=3, fleshy=3, oddly_breakable_by_hand=3}, sound = "shooter_pistol", - particle = "shooter_cap.png", + bullet_image = "shooter_cap.png", + particles = { + amount = 8, + minsize = 0.25, + maxsize = 0.75, + }, }, }) @@ -22,7 +27,12 @@ shooter.register_weapon("shooter_guns:rifle", { tool_caps = {full_punch_interval=1.0, damage_groups={fleshy=3}}, groups = {snappy=3, crumbly=3, choppy=3, fleshy=2, oddly_breakable_by_hand=2}, sound = "shooter_rifle", - particle = "shooter_bullet.png", + bullet_image = "shooter_bullet.png", + particles = { + amount = 12, + minsize = 0.75, + maxsize = 1.5, + }, }, }) @@ -36,7 +46,12 @@ shooter.register_weapon("shooter_guns:shotgun", { tool_caps = {full_punch_interval=1.5, damage_groups={fleshy=4}}, groups = {cracky=3, snappy=2, crumbly=2, choppy=2, fleshy=1, oddly_breakable_by_hand=1}, sound = "shooter_shotgun", - particle = "smoke_puff.png", + bullet_image = "smoke_puff.png", + particles = { + amount = 16, + minsize = 1, + maxsize = 2, + }, }, }) @@ -51,7 +66,12 @@ shooter.register_weapon("shooter_guns:machine_gun", { tool_caps = {full_punch_interval=0.1, damage_groups={fleshy=2}}, groups = {snappy=3, fleshy=3, oddly_breakable_by_hand=3}, sound = "shooter_pistol", - particle = "shooter_cap.png", + bullet_image = "shooter_cap.png", + particles = { + amount = 4, + minsize = 0.25, + maxsize = 0.75, + }, }, })