end
-local capes = {} --capes class
-capes.pos = nil
-capes.object = nil
-capes.old_pos = nil
-capes.current_animation = nil
-capes.deg = nil
-capes.body_yaw = nil
-capes.cape_yaw = nil
-capes.cape_pitch = nil
-capes.goal = nil
-capes.owner = nil
-
-capes.pi = math.pi
-
-capes.dir_to_yaw = minetest.dir_to_yaw
-capes.new_vector = vector.new
-capes.distance = vector.distance
-capes.direction = vector.direction
-capes.floor = math.floor
-capes.abs = math.abs
-capes.pairs = pairs
-capes.is_player = minetest.is_player
+
+
+
+
+local pi = math.pi
-- simple degrees calculation
-capes.degrees = function(yaw)
- return(yaw*180.0/capes.pi)
+local degrees = function(yaw)
+ return(yaw*180.0/pi)
end
-- built in engine trigonometry
-capes.pitch = function(pos,pos2)
+local pitch = function(pos,pos2)
return(
- capes.floor(
- capes.degrees(
- capes.dir_to_yaw(
- capes.new_vector(
- capes.distance(
- capes.new_vector(
+ math.floor(
+ degrees(
+ minetest.dir_to_yaw(
+ vector.new(
+ vector.distance(
+ vector.new(
pos.x,
0,
pos.z
),
- capes.new_vector(
+ vector.new(
pos2.x,
0,
pos2.z
pos.y - pos2.y
)
)
- + capes.pi
+ + pi
)
)
)
end
-- calculation to calculate the yaw of the old position
-capes.cape_yaw_calculation = function(pos,pos2)
+local cape_yaw_calculation = function(pos,pos2)
return(
- capes.dir_to_yaw(
- capes.direction(
- capes.new_vector(
+ minetest.dir_to_yaw(
+ vector.direction(
+ vector.new(
pos2.x,
0 ,
pos2.z
),
- capes.new_vector(
+ vector.new(
pos.x,
0 ,
pos.z
end
-- corrects degrees
-capes.yaw_correction = function(yaw)
+yaw_correction = function(yaw)
if yaw < -180 then
yaw = yaw + 360
elseif yaw > 180 then
end
-- returns if the cape can be "blown"
-capes.move_cape = function(yaw,yaw2)
- capes.cape_yaw = capes.yaw_correction(capes.degrees(yaw-yaw2))
- return(capes.cape_yaw >= -90 and capes.cape_yaw <= 90)
+local cape_yaw
+local move_cape = function(yaw,yaw2)
+ cape_yaw = yaw_correction(degrees(yaw-yaw2))
+ return(cape_yaw >= -90 and cape_yaw <= 90)
end
-- applies movement to the cape
-capes.cape_smoothing = function(object,current,cape_goal)
+local cape_smoothing = function(object,current,cape_goal)
if current ~= cape_goal then
- if capes.abs(current-cape_goal) <= 3 then --this stops jittering
+ if math.abs(current-cape_goal) <= 3 then --this stops jittering
object:set_animation({x=cape_goal,y=cape_goal}, 0, 0, false)
elseif current < cape_goal then
object:set_animation({x=current+3,y=current+3}, 0, 0, false)
pointable = false,
collisionbox = {0, 0, 0, 0, 0, 0}
}
-
cape_object.texture_set = false
-
cape_object.on_activate = function(self)
minetest.after(0,function()
--don't waste any cpu
end)
end
+local object
+local pos
+local current_animation
+local current_animation
+local cape_yaw
+local body_yaw
+local goal
cape_object.on_step = function(self,dtime)
- capes.object = self.object
- capes.pos = capes.object:get_pos()
- capes.old_pos = self.old_pos
- capes.current_animation = capes.object:get_animation() -- if fails assign other values to nil
- capes.current_animation = capes.current_animation.x
- capes.owner = self.owner
-
- if capes.is_player(capes.owner) and capes.old_pos then
+ object = self.object
+ pos = object:get_pos()
+ current_animation = object:get_animation() -- if fails assign other values to nil
+ current_animation = current_animation.x
+ goal = nil
+ if minetest.is_player(self.owner) and self.old_pos then
--do not allow cape to flutter if player is moving backwards
- capes.cape_yaw = capes.cape_yaw_calculation(capes.pos,capes.old_pos)
- capes.body_yaw = self.owner:get_look_horizontal()
+ cape_yaw = cape_yaw_calculation(pos,self.old_pos)
+ body_yaw = self.owner:get_look_horizontal()
- if capes.move_cape(capes.cape_yaw,capes.body_yaw) then
- capes.goal = capes.pitch(capes.pos,capes.old_pos)
+ if move_cape(cape_yaw,body_yaw) then
+ goal = pitch(pos,self.old_pos)
else
- capes.goal = 160
+ goal = 160
end
- capes.cape_smoothing(capes.object,capes.current_animation,capes.goal)
- elseif not capes.is_player(capes.owner) then
- self.object:remove()
+ cape_smoothing(object,current_animation,goal)
+ elseif not minetest.is_player(self.owner) then
+ object:remove()
end
- self.old_pos = capes.pos
+ self.old_pos = pos
end
minetest.register_entity("skins:cape",cape_object)
-local cape_handler = {}
-local cape_table = {} -- holds all cape objects
-cape_handler.object = nil
-cape_handler.lua_entity = nil
-cape_handler.name = nil
-cape_handler.temp_cape = nil
-cape_handler.pairs = pairs
+local pool2 = {}
-cape_handler.custom = {
+local custom = {
sfan5 = true,
appguru = true,
tacotexmex = true,
oilboi = true,
wuzzy = true,
}
-cape_handler.core_devs = {
+local core_devs = {
celeron55 = true,
nore = true,
nerzhul = true,
thetermos = true,
krock = true,
}
-cape_handler.patrons = {
+local patrons = {
tacotexmex = true,
ufa = true,
monte48 = true,
-- simple check if has cape
-cape_handler.get_texture = function(player)
- cape_handler.name = player:get_player_name()
-
- --cape handling
- cape_handler.name = string.lower(player:get_player_name())
-
- cape_handler.temp_cape = nil
-
- if cape_handler.custom[cape_handler.name] then
- cape_handler.temp_cape = "cape_"..cape_handler.name..".png"
- elseif cape_handler.core_devs[cape_handler.name] then
- cape_handler.cape_handler.temp_cape = "cape_core.png"
- elseif cape_handler.patrons[cape_handler.name] then
- cape_handler.cape_handler.temp_cape = "cape_patron.png"
+local name
+local temp_cape
+local get_texture = function(player)
+ name = string.lower(player:get_player_name())
+
+ temp_cape = nil
+
+ if custom[name] then
+ temp_cape = "cape_"..name..".png"
+ elseif core_devs[name] then
+ temp_cape = "cape_core.png"
+ elseif patrons[name] then
+ temp_cape = "cape_patron.png"
end
- return(cape_handler.temp_cape)
+ return(temp_cape)
end
-- adds cape to player
-cape_handler.add_cape = function(player)
- if cape_handler.get_texture(player) then
- cape_handler.object = minetest.add_entity(player:get_pos(),"skins:cape")
- cape_handler.lua_entity = cape_handler.object:get_luaentity()
- cape_handler.lua_entity.owner = player
- cape_handler.lua_entity.texture_type = cape_handler.temp_cape
- cape_handler.object:set_attach(player, "Cape_bone", vector.new(0,0,0), vector.new(0,0,0))
- cape_table[player:get_player_name()] = cape_handler.object
+local name
+local temp_pool
+local texture
+local object
+local lua_entity
+local add_cape = function(player)
+ if get_texture(player) then
+ texture = get_texture(player)
+ if texture then
+ name = player:get_player_name()
+ temp_pool = pool2[name]
+
+ object = minetest.add_entity(player:get_pos(),"skins:cape")
+
+ lua_entity = object:get_luaentity()
+
+ lua_entity.owner = player
+ lua_entity.texture_type = texture
+ object:set_attach(player, "Cape_bone", vector.new(0,0,0), vector.new(0,0,0))
+ pool2[name] = object
+ end
end
end
-- looping check to see if cape deleted
-cape_handler.readd_capes = function()
- for name,def in cape_handler.pairs(cape_table) do
- cape_handler.player = minetest.get_player_by_name(name)
- if cape_handler.player and cape_table[name] and not cape_table[name]:get_luaentity() then
- cape_handler.add_cape(cape_handler.player)
- elseif not cape_handler.player then
- cape_table[name] = nil
+local player
+local function readd_capes()
+ for name,def in pairs(pool2) do
+ player = minetest.get_player_by_name(name)
+ if pool2[name] and not pool2[name]:get_luaentity() then
+ add_cape(player)
+ elseif not minetest.is_player(name) then
+ pool2[name] = nil
end
end
minetest.after(3,function()
- cape_handler.readd_capes()
+ readd_capes()
end)
end
minetest.register_on_mods_loaded(function()
minetest.after(3,function()
- cape_handler.readd_capes()
+ readd_capes()
end)
end)
-local name
minetest.register_on_joinplayer(function(player)
- cape_handler.add_cape(player)
+ add_cape(player)
minetest.after(0,function()
fetch_function(player:get_player_name())