medical/tools.lua
Elkien3 7797ad5d40 add treatable cut wound
lotta stuff, don't feel like explaining, cheers
2020-06-17 18:42:40 -05:00

174 lines
6.0 KiB
Lua

medical.hud = {}
medical.usedtools[""] = function(self, clicker, wielditem, hitloc, local_hitloc)
local vitalpoints = {}
local playerpos = self.object:get_pos()
vitalpoints.cartoid = {x=0,y=.1,z=-.425}
vitalpoints.radialright = {x=.5,y=.1,z=-.05}
vitalpoints.radialleft = {x=-.5,y=.1,z=-.05}
vitalpoints.pedalright = {x=.20,y=.1,z=.7}
vitalpoints.pedalleft = {x=-.20,y=.1,z=.7}
local distance, hitpart = medical.getclosest(vitalpoints, local_hitloc)
if distance > .15 then return false end
local cname = clicker:get_player_name()
local sname = self.owner
if medical.hud[cname] then clicker:hud_remove(medical.hud[cname]) medical.hud[cname] = nil end
medical.hud[cname] = clicker:hud_add({
hud_elem_type = "image",
position = {x = 0.5, y = 0.55},
offset = {x = 0, y = 0},
text = "nopulse.png",
scale = { x = 10, y = 10},
alignment = { x = 0, y = 0 },
})
clicker:hud_set_flags({wielditem=false})
medical.start_timer(sname.."pulsecheck", 60/medical.data[sname].vitals.pulse, true, sname,
function(arg)
minetest.sound_play("human-heartbeat-daniel_simon", {
pos = hitloc,
to_player = arg,
})
local circle = clicker:hud_add({
hud_elem_type = "image",
position = {x = 0.5, y = 0.55},
offset = {x = 0, y = 0},
text = "foundpulse.png",
scale = { x = 10, y = 10},
alignment = { x = 0, y = 0 },
})
minetest.after(.15, function()
local hitter = minetest.get_player_by_name(cname)
if hitter then
hitter:hud_remove(circle)
end
end)
end,
cname,
function(stoparg)
local player = minetest.get_player_by_name(stoparg)
if medical.hud[stoparg] then
player:hud_remove(medical.hud[stoparg])
medical.hud[stoparg] = nil
player:hud_set_flags({wielditem=true})
end
end, "RMB", cname
)
return true
end
medical.attachedtools[""] = function(self, clicker, wielditem, hitloc, local_hitloc)
--local limb = medical.getlimb(self.object, clicker, nil, nil, hitloc)
local all_objects = minetest.get_objects_inside_radius(hitloc, 10)
local cname = clicker:get_player_name()
for _,obj in ipairs(all_objects) do
local pos = obj:get_pos()
local marker = clicker:hud_add({
hud_elem_type = "waypoint",
name = obj:get_entity_name(),
number = 0xFF0000,
world_pos = obj:get_pos()
})
minetest.after(5, function()
local hitter = minetest.get_player_by_name(cname)
if hitter then
hitter:hud_remove(marker)
end
end)
end
end
minetest.register_tool("medical:bpcuff", {
description = "Blood Pressure Cuff",
inventory_image = "bpcuff.png",
})
minetest.register_tool("medical:bpbladder", {
description = "Blood Pressure Cuff",
inventory_image = "bpcuffbladder.png",
on_use = function(itemstack, player, pointed_thing)
--inflate bp cuff
end
})
minetest.register_entity("medical:bpcuff", {
hp_max = 1,
physical = false,
weight = 5,
collisionbox = {-0.1,-0.1,-0.1, 0.1,0.1,0.1},
visual = "cube",
visual_size = {x=.25, y=.25},--{x=.211, y=.211},
textures = {"default_coal_block.png", "default_coal_block.png", "default_coal_block.png", "default_coal_block.png", "default_coal_block.png", "default_coal_block.png"}, -- number of required textures depends on visual
colors = {}, -- number of required colors depends on visual
spritediv = {x=1, y=1},
initial_sprite_basepos = {x=0, y=0},
is_visible = true,
makes_footstep_sound = false,
automatic_rotate = false,
on_activate = function(self, staticdata, dtime_s)
if not staticdata or staticdata == "" then self.object:remove() end
self.owner = staticdata
end
})
minetest.register_entity("medical:line", {
hp_max = 1,
physical = false,
weight = 5,
collisionbox = {-0.1,-0.1,-0.1, 0.1,0.1,0.1},
visual = "cube",
visual_size = {x=.05, y=.1},
textures = {"blackline.png", "blackline.png", "blackline.png", "blackline.png", "blackline.png", "blackline.png"}, -- number of required textures depends on visual
colors = {}, -- number of required colors depends on visual
spritediv = {x=1, y=1},
initial_sprite_basepos = {x=0, y=0},
is_visible = true,
makes_footstep_sound = false,
automatic_rotate = false,
on_step = function(self, dtime)
if not self.target or not self.owner then self.object:remove() return end
local player = minetest.get_player_by_name(self.owner)
local op = player:get_pos()
op.y = op.y + 1
op = vector.add(op, vector.multiply(player:get_player_velocity(), .1))
if self.lastpos and vector.equals(self.lastpos, op) then return end
local tp = self.target
if vector.distance(op, tp) > 1.5 then
local inv = player:get_inventory()
local list = "main"
return
end
local delta = vector.subtract(op, tp)
local yaw = math.atan2(delta.z, delta.x) - math.pi / 2
local pitch = math.atan2(delta.y, math.sqrt(delta.z*delta.z + delta.x*delta.x))
pitch = pitch + math.pi/2
self.object:move_to({x=(op.x+tp.x)/2, y=(op.y+tp.y)/2, z=(op.z+tp.z)/2, })
self.object:set_rotation({x=pitch, y=yaw, z=0})
self.object:set_properties({visual_size = {x=.05, y=vector.distance(tp, op)}})
self.lastpos = op
end,
on_activate = function(self, staticdata, dtime_s)
if not staticdata or staticdata == "" then self.object:remove() end
self.owner = staticdata
self.target = self.object:get_pos()
end
})
medical.attachedtools["medical:bpcuff"] = function(self, clicker, wielditem, hitloc, local_hitloc)
local limb = medical.getlimb(self.object, clicker, nil, nil, hitloc)
local bone
if limb == "rightarm" then bone = "Arm_Right" elseif limb == "leftarm" then bone = "Arm_Left" else return end
local pos = self.object:get_pos()
local obj = minetest.add_entity(pos, "medical:bpcuff", clicker:get_player_name())
minetest.after(0, function()
local marker = clicker:hud_add({
hud_elem_type = "waypoint",
name = "hit",
number = 0xFF0000,
world_pos = obj:get_pos()
}) end)
obj:set_attach(self.object, bone, {x=0,y=.5,z=0}, {x=0,y=0,z=0})
--local obj = minetest.add_entity(hitloc, "medical:line", clicker:get_player_name())
minetest.after(0, function() clicker:set_wielded_item({name = ""})end)
end