guns4d-cd2025/classes/Reflector_sight.lua

77 lines
2.5 KiB
Lua

local Reflector_sight = {
texture = "holographic_reflection.png",
scale = 1,
offset = 1,
deviation_tolerance = {
min = .01,
max = .05,
depth = .1
},
}
local blank = "blank.png"
core.register_entity("guns4d:reflector_sight", {
initial_properties = {
textures = {
blank,
blank,
blank,
blank,
blank,
Reflector_sight.texture,
},
glow = 14,
visual = "cube",
visual_size = {x=.1, y=.1, z=.1},
physical = false,
shaded = false
}
})
Reflector_sight.on_construct = function(self)
self:initialize_entity()
end
local m4 = leef.math.mat4.new()
function Reflector_sight:initialize_entity()
local obj = minetest.add_entity(self.gun.player:get_pos(), "guns4d:reflector_sight")
obj:set_properties({
textures = {
blank,
blank,
blank,
blank,
blank,
self.texture
},
visual_size = {x=self.scale/10, y=self.scale/10, z=self.scale/10},
use_texture_alpha = true
})
self.entity = obj
obj:set_attach(self.gun.player, self.gun.handler.player_model_handler.bone_aliases.reflector, nil, nil, true)
end
function Reflector_sight:update(dt)
if self.entity then
self.entity:set_attach(self.gun.player, self.gun.handler.player_model_handler.bone_aliases.reflector, {x=0,y=0,z=self.offset*10}, nil, true)
local v1 = leef.math.mat4.mul_vec4({}, self.gun:get_rotation_transform(m4, nil, nil, nil, nil, nil, nil, nil, nil,nil,nil), {0,0,self.offset,0})
local v2 = leef.math.mat4.mul_vec4({}, self.gun:get_rotation_transform(m4, 0, 0, 0, nil, nil, nil, nil, 0,0,0), {0,0,self.offset,0})
--[[local dist = vector.distance({x=v1[1], y=v1[2], z=v1[3]}, {x=v2[1], y=v2[2], z=v2[3]})
minetest.chat_send_all(dist)
self.entity:set_properties({
textures = {
blank,
blank,
blank,
blank,
blank,
self.texture .. "^[opacity:"..255-math.ceil(255*((dist-self.deviation_tolerance.min)/self.deviation_tolerance.max))
},
})]]
else
self:initialize_entity()
end
end
function Reflector_sight:prepare_deletion()
if self.entity then
self.entity:remove()
end
end
Guns4d.Reflector_sight = leef.class.new_class:inherit(Reflector_sight)