1
0
mirror of https://github.com/pandorabox-io/banners.git synced 2025-06-30 23:30:41 +02:00

1 Commits

Author SHA1 Message Date
13e686e827 Ajout message de chargement du mod dans le journal "action" 2018-12-24 03:02:25 +01:00
19 changed files with 2611 additions and 1902 deletions

View File

@ -1,10 +0,0 @@
name: luacheck
on: [push, pull_request]
jobs:
luacheck:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Luacheck
uses: lunarmodules/luacheck@master

View File

@ -1,14 +0,0 @@
globals = {
"banners",
"smartfs",
}
read_globals = {
"core",
"dump",
"factions",
"inventory_plus",
["table"] = { fields = { "insert_all" } },
"unified_inventory",
"vector",
}

View File

@ -1,4 +1,4 @@
###Banners mod for Luanti (formerly Minetest) ###Banners mod for Minetest
This is a banner mod for Luanti. This is the banner mod for minetest.
The source code is licensed under GPLv3, and the game assets are licensed under Creative Commons 0 (CC0, [https://wiki.creativecommons.org/wiki/CC0](see here)). The source code is licensed under GPLv3, and the game assets are licensed under Creative Commons 0 (CC0, [https://wiki.creativecommons.org/wiki/CC0](see here)).

View File

@ -1,53 +0,0 @@
-- Due to some engine troubles there are sometimes stray
-- banner entities and more rarely there are banner nodes without entities.
-- Calling this command fixes both situations.
core.register_chatcommand("banners_fix", {
description = "recreates the banner-visuals in your area",
func = function(name)
local player = core.get_player_by_name(name)
if not player then
return
end
local pos = player:get_pos()
local t1 = core.get_us_time()
local radius = 10
local entity_count = 0
local objects = core.get_objects_inside_radius(pos, radius)
for _, v in ipairs(objects) do
local e = v:get_luaentity()
if e and e.name == "banners:banner_ent" then
entity_count = entity_count + 1
v:remove()
end
end
local pos1 = vector.subtract(pos, radius)
local pos2 = vector.add(pos, radius)
local nodes = {
"banners:wooden_banner",
"banners:steel_banner",
}
if core.get_modpath("factions") then
table.insert_all(nodes, {
"banners:power_banner",
"banners:death_banner",
})
end
local pos_list = core.find_nodes_in_area(pos1, pos2, nodes)
for _, node_pos in ipairs(pos_list) do
core.add_entity(node_pos, "banners:banner_ent")
end
local t2 = core.get_us_time()
local diff = t2 - t1
local millis = diff / 1000
return true, "Removed " .. entity_count .. " banner entities and restored "
.. #pos_list .. " banners in " .. millis .. " ms"
end
})

View File

@ -1,73 +1,78 @@
-- craft recipes -- craft recipes
minetest.register_craft( -- wooden flag pole
-- wooden flag pole {
core.register_craft({
output = "banners:wooden_pole 1", output = "banners:wooden_pole 1",
recipe = { recipe = {
{ "", "", "default:stick" }, {"", "", "default:stick"},
{ "", "default:stick", "" }, {"", "default:stick", ""},
{ "default:stick", "", "" } {"default:stick", "", ""}
} }
}) }
)
-- steel flag pole minetest.register_craft( -- steel flag pole
core.register_craft({ {
output = "banners:steel_pole 1", output = "banners:steel_pole 1",
recipe = { recipe = {
{ "", "", "default:steel_ingot" }, {"", "", "default:steel_ingot"},
{ "default:stick", "default:steel_ingot", "default:stick" }, {"", "default:steel_ingot", ""},
{ "default:steel_ingot", "", "" } {"default:steel_ingot", "", ""}
} }
}) }
)
-- wooden flag support base minetest.register_craft( -- wooden flag support base
core.register_craft({ {
output = "banners:wooden_base 1", output = "banners:wooden_base 1",
recipe = { recipe = {
{ "", "default:stick", "" }, {"", "default:stick", ""},
{ "default:stick", "", "default:stick" }, {"default:stick", "", "default:stick"},
{ "group:wood", "group:wood", "group:wood" } {"group:wood", "group:wood", "group:wood"}
} }
}) }
)
-- steel support minetest.register_craft( -- steel support
core.register_craft({ {
output = "banners:steel_base", output = "banners:steel_base",
recipe = { recipe = {
{ "", "default:steel_ingot", "" }, {"", "default:steel_ingot", ""},
{ "default:steel_ingot", "", "default:steel_ingot" }, {"default:steel_ingot", "", "default:steel_ingot"},
{ "", "default:steelblock", "" } {"", "default:steelblock", ""}
} }
}) }
)
-- banner sheet minetest.register_craft( -- banner sheet
core.register_craft({ {
output = "banners:banner_sheet 1", output = "banners:banner_sheet 1",
recipe = { recipe = {
{ "", "", "" }, {"", "", ""},
{ "farming:cotton", "farming:cotton", "farming:cotton" }, {"farming:cotton", "farming:cotton", "farming:cotton"},
{ "farming:cotton", "farming:cotton", "farming:cotton" } {"farming:cotton", "farming:cotton", "farming:cotton"}
} }
}) }
)
-- wooden support minetest.register_craft( -- wooden support
core.register_craft({ {
output = "banners:wooden_banner 1", output = "banners:wooden_banner 1",
recipe = { recipe = {
{ "", "banners:banner_sheet", "" }, {"", "banners:banner_sheet", ""},
{ "", "banners:wooden_pole", "" }, {"", "banners:wooden_pole", ""},
{ "", "banners:wooden_base", "" } {"", "banners:wooden_base", ""}
} }
}) }
)
-- steel support minetest.register_craft( -- steel support
core.register_craft({ {
output = "banners:steel_banner 1", output = "banners:steel_banner 1",
recipe = { recipe = {
{ "", "banners:banner_sheet", "" }, {"", "banners:banner_sheet", ""},
{ "", "banners:steel_pole", "" }, {"", "banners:steel_pole", ""},
{ "", "banners:steel_base", "" } {"", "banners:steel_base", ""}
} }
}) }
)

2
depends.txt Normal file
View File

@ -0,0 +1,2 @@
default
farming

1
description.txt Normal file
View File

@ -0,0 +1 @@
Adds customisable banners.

Binary file not shown.

View File

@ -1,43 +1,43 @@
banners.power_per_banner = 10. banners.power_per_banner = 10.
-- items -- items
core.register_craftitem("banners:golden_finial", { minetest.register_craftitem("banners:golden_finial", {
groups = {}, groups = {},
description = "Golden finial", description = "Golden finial",
inventory_image = "gold_finial.png", inventory_image = "gold_finial.png",
}) })
core.register_craftitem("banners:silver_pole", { minetest.register_craftitem("banners:silver_pole", {
groups = {}, groups = {},
description = "Silver pole", description = "Silver pole",
inventory_image = "silver_pole.png" inventory_image = "silver_pole.png"
}) })
core.register_craftitem("banners:power_pole", { minetest.register_craftitem("banners:power_pole", {
groups = {}, groups = {},
description = "Power pole", description = "Power pole",
inventory_image = "power_pole.png" inventory_image = "power_pole.png"
}) })
core.register_craftitem("banners:golden_sheet", { minetest.register_craftitem("banners:golden_sheet", {
groups = {}, groups = {},
description = "Golden sheet", description = "Golden sheet",
inventory_image = "golden_sheet.png" inventory_image = "golden_sheet.png"
}) })
core.register_craftitem("banners:death_pole", { minetest.register_craftitem("banners:death_pole", {
groups = {}, groups = {},
description = "Death pole", description = "Death pole",
inventory_image = "death_pole.png" inventory_image = "death_pole.png"
}) })
core.register_craftitem("banners:death_sheet", { minetest.register_craftitem("banners:death_sheet", {
groups = {}, groups = {},
description = "Death sheet", description = "Death sheet",
inventory_image = "death_sheet.png" inventory_image = "death_sheet.png"
}) })
core.register_craftitem("banners:death_base", { minetest.register_craftitem("banners:death_base", {
groups = {}, groups = {},
description = "Death base", description = "Death base",
inventory_image = "death_base.png" inventory_image = "death_base.png"
@ -46,110 +46,122 @@ core.register_craftitem("banners:death_base", {
-- crafts -- crafts
-- silver flag pole minetest.register_craft( -- silver flag pole
core.register_craft({ {
output = "banners:silver_pole 1", output = "banners:silver_pole 1",
recipe = { recipe = {
{ "", "", "moreores:silver_ingot" }, {"", "", "moreores:silver_ingot"},
{ "", "moreores:silver_ingot", "" }, {"", "moreores:silver_ingot", ""},
{ "moreores:silver_ingot", "", "" } {"moreores:silver_ingot", "", ""}
} }
}) }
)
-- death flag pole minetest.register_craft( -- death flag pole
core.register_craft({ {
output = "banners:death_pole 1", output = "banners:death_pole 1",
recipe = { recipe = {
{ "", "", "default:diamond" }, {"", "", "default:diamond"},
{ "", "default:obsidian", "" }, {"", "default:obsidian", ""},
{ "default:obsidian", "", "" } {"default:obsidian", "", ""}
} }
}) }
)
-- golden finial minetest.register_craft( -- golden finial
core.register_craft({ {
output = "banners:golden_finial", output = "banners:golden_finial",
recipe = { recipe = {
{ "", "default:gold_ingot", "default:gold_ingot" }, {"", "default:gold_ingot", "default:gold_ingot"},
{ "", "default:gold_ingot", "default:gold_ingot" }, {"", "default:gold_ingot", "default:gold_ingot"},
{ "default:gold_ingot", "", "" } {"default:gold_ingot", "", ""}
} }
}) }
)
-- power flag pole minetest.register_craft( -- power flag pole
core.register_craft({ {
output = "banners:power_pole 1", output = "banners:power_pole 1",
recipe = { recipe = {
{ "", "", "" }, {"", "", ""},
{ "", "banners:golden_finial", "" }, {"", "banners:golden_finial", ""},
{ "banners:silver_pole", "", "" } {"banners:silver_pole", "", ""}
} }
}) }
)
-- golden sheet minetest.register_craft( -- golden sheet
core.register_craft({ {
output = "banners:golden_sheet 1", output = "banners:golden_sheet 1",
type = "shapeless", type = "shapeless",
recipe = { "default:gold_ingot", "banners:banner_sheet" } recipe = { "default:gold_ingot", "banners:banner_sheet"}
}) }
)
-- death sheet minetest.register_craft( -- death sheet
core.register_craft({ {
output = "banners:death_sheet 1", output = "banners:death_sheet 1",
type = "shapeless", type = "shapeless",
recipe = { "default:obsidian", "banners:banner_sheet" } recipe = { "default:obsidian", "banners:banner_sheet"}
}) }
)
-- death sheet minetest.register_craft( -- death sheet
core.register_craft({ {
output = "banners:death_base 1", output = "banners:death_base 1",
recipe = { recipe = {
{ "", "", "" }, {"", "", ""},
{ "", "banners:steel_base", "" }, {"", "banners:steel_base", ""},
{ "default:obsidian", "default:obsidian", "default:obsidian" } {"default:obsidian", "default:obsidian", "default:obsidian"}
} }
}) }
)
-- power banner minetest.register_craft( -- power banner
core.register_craft({ {
output = "banners:power_banner", output = "banners:power_banner",
recipe = { recipe = {
{ "", "banners:golden_sheet", "" }, {"", "banners:golden_sheet", ""},
{ "", "banners:power_pole", "" }, {"", "banners:power_pole", ""},
{ "", "banners:steel_base", "" } {"", "banners:steel_base", ""}
} }
}) }
)
-- death banner minetest.register_craft( -- death banner
core.register_craft({ {
output = "banners:death_banner", output = "banners:death_banner",
recipe = { recipe = {
{ "", "banners:death_sheet", "" }, {"", "banners:death_sheet", ""},
{ "", "banners:death_pole", "" }, {"", "banners:death_pole", ""},
{ "", "banners:death_base", "" } {"", "banners:death_base", ""}
} }
}) }
)
-- nodes -- nodes
core.register_node("banners:power_banner", { minetest.register_node("banners:power_banner", {
drawtype = "mesh", drawtype = "mesh",
mesh = "banner_support.obj", mesh = "banner_support.x",
tiles = { "gold_support.png" }, tiles = {"gold_support.png"},
description = "Power Banner", description = "Power Banner",
groups = { cracky = 3 }, groups = {cracky=3},
is_ground_content = false,
diggable = true, diggable = true,
stack_max = 1, stack_max = 1,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
after_place_node = banners.after_powerbanner_placed, after_place_node = function (pos, player, itemstack, pointed_thing)
on_destruct = banners.banner_on_destruct, banners.after_powerbanner_placed(pos, player, itemstack, pointed_thing)
end,
on_destruct = function(pos)
banners.banner_on_destruct(pos)
end,
on_dig = function(pos, n, p) on_dig = function(pos, n, p)
if core.is_protected(pos, p:get_player_name()) then if minetest.is_protected(pos, p:get_player_name()) then
return return
end end
local meta = core.get_meta(pos) local meta = minetest.get_meta(pos)
local facname = meta:get_string("faction") local facname = meta:get_string("faction")
if facname then if facname then
local faction = factions.factions[facname] local faction = factions.factions[facname]
@ -159,28 +171,29 @@ core.register_node("banners:power_banner", {
end end
banners.banner_on_dig(pos, n, p) banners.banner_on_dig(pos, n, p)
end, end,
on_movenode = banners.banner_on_movenode,
}) })
core.register_node("banners:death_banner", { minetest.register_node("banners:death_banner", {
drawtype = "mesh", drawtype = "mesh",
mesh = "banner_support.obj", mesh = "banner_support.x",
tiles = { "death_uv.png" }, tiles = {"death_uv.png"},
description = "Death Banner", description = "Death Banner",
groups = { cracky = 3 }, groups = {cracky=3},
is_ground_content = false,
diggable = true, diggable = true,
stack_max = 1, stack_max = 1,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
after_place_node = banners.after_deathbanner_placed, after_place_node = function (pos, player, itemstack, pointed_thing)
on_destruct = banners.banner_on_destruct, banners.after_deathbanner_placed(pos, player, itemstack, pointed_thing)
-- (pos, node, player) end,
on_dig = function(pos, _, player) on_destruct = function(pos)
if core.is_protected(pos, player:get_player_name()) then banners.banner_on_destruct(pos)
end,
on_dig = function(pos, n, p)
if minetest.is_protected(pos, p:get_player_name()) then
return return
end end
local meta = core.get_meta(pos) local meta = minetest.get_meta(pos)
local defending_facname = meta:get_string("faction") local defending_facname = meta:get_string("faction")
local parcelpos = factions.get_parcel_pos(pos) local parcelpos = factions.get_parcel_pos(pos)
if defending_facname then if defending_facname then
@ -189,37 +202,34 @@ core.register_node("banners:death_banner", {
faction:stop_attack(parcelpos) faction:stop_attack(parcelpos)
end end
end end
core.remove_node(pos) minetest.remove_node(pos)
end, end,
on_movenode = banners.banner_on_movenode,
}) })
-- (pos, player, itemstack, pointed_thing) banners.after_powerbanner_placed = function(pos, player, itemstack, pointed_thing)
banners.after_powerbanner_placed = function(pos, player, _, pointed_thing) minetest.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
core.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
local faction = factions.players[player:get_player_name()] local faction = factions.players[player:get_player_name()]
if not faction then if not faction then
core.get_meta(pos):set_string("banner", "bg_white.png") minetest.get_meta(pos):set_string("banner", "bg_white.png")
else else
local banner_string = factions.factions[faction].banner local banner_string = factions.factions[faction].banner
core.get_meta(pos):set_string("banner", banner_string) minetest.get_meta(pos):set_string("banner", banner_string)
core.get_meta(pos):set_string("faction", faction) minetest.get_meta(pos):set_string("faction", faction)
factions.factions[faction]:increase_maxpower(banners.power_per_banner) factions.factions[faction]:increase_maxpower(banners.power_per_banner)
end end
core.add_entity(pos, "banners:banner_ent") minetest.add_entity(pos, "banners:banner_ent")
end end
-- (pos, player, itemstack, pointed_thing) banners.after_deathbanner_placed = function(pos, player, itemstack, pointed_thing)
banners.after_deathbanner_placed = function(pos, player, _, pointed_thing) minetest.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
core.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
local attacking_faction = factions.players[player:get_player_name()] local attacking_faction = factions.players[player:get_player_name()]
if attacking_faction then if attacking_faction then
local parcelpos = factions.get_parcel_pos(pos) local parcelpos = factions.get_parcel_pos(pos)
attacking_faction = factions.factions[attacking_faction] attacking_faction = factions.factions[attacking_faction]
attacking_faction:attack_parcel(parcelpos) attacking_faction:attack_parcel(parcelpos)
core.get_meta(pos):set_string("faction", attacking_faction.name) minetest.get_meta(pos):set_string("faction", attacking_faction.name)
end end
core.get_meta(pos):set_string("banner", "death_uv.png") minetest.get_meta(pos):set_string("banner", "death_uv.png")
core.add_entity(pos, "banners:banner_ent") minetest.add_entity(pos, "banners:banner_ent")
end end

333
init.lua
View File

@ -1,9 +1,6 @@
local MP = core.get_modpath("banners") .. "/" dofile(minetest.get_modpath("banners").."/smartfs.lua")
dofile(MP .. "smartfs.lua")
banners = { banners = {}
version = 20241130.1920
}
banners.masks = { banners.masks = {
"bend_left", "bend_left_outline", "bend_left", "bend_left_outline",
@ -31,15 +28,6 @@ banners.masks = {
"star_chevron", "checkered_8_4", "checkered_16_8" "star_chevron", "checkered_8_4", "checkered_16_8"
} }
-- It is now unlikely for the server to crash from too long
-- history since we now trim out garbage when converting to
-- metadata. This limit is now just to avoid run-time
-- memory bloat.
banners.max_undo_levels = 256
-- cache of player histories
local histories = {}
banners.colors = { banners.colors = {
"black", "cyan", "green", "white", "black", "cyan", "green", "white",
"blue", "darkblue", "red", "yellow", "blue", "darkblue", "red", "yellow",
@ -47,91 +35,58 @@ banners.colors = {
"brown", "darkbrown" "brown", "darkbrown"
} }
local valid_masks = {} banners.base_transform = ({texture = "bg_white.png",
local valid_colors = {} mask="mask_background.png"})
do
local i, s
i = #banners.masks
repeat
s = banners.masks[i]
valid_masks[s .. ".png"] = true
i = i - 1
until i == 0
i = #banners.colors banners.creation_form_func = function(state)
repeat
s = banners.colors[i]
valid_colors["bg_" .. s .. ".png"] = true
i = i - 1
until i == 0
end
banners.base_transform = {
texture = "bg_white.png",
mask = "mask_background.png"
}
function banners.creation_form_func(state)
-- helper functions -- helper functions
function state:update_player_inv(transform_string) state.update_player_inv = function(self)
local player = core.get_player_by_name(self.player) local player = minetest.get_player_by_name(self.player)
local newbanner = player:get_wielded_item() local newbanner = player:get_wielded_item()
newbanner:get_meta():set_string("", transform_string) newbanner:set_metadata(state.banner:get_transform_string())
player:set_wielded_item(newbanner) player:set_wielded_item(newbanner)
end end
function state:update_preview(transform_string) state.update_preview = function(self)
self:get("banner_preview"):setImage(transform_string) self:get("banner_preview"):setImage(self.banner:get_transform_string())
self:get("color_indicator"):setImage(self.current_color) self:get("color_indicator"):setImage(self.current_color)
end end
function state:update_preview_inv() state.update_all = function(self)
local transform_string = self.banner:get_transform_string() self:update_preview()
self:update_preview(transform_string) self:update_player_inv()
self:update_player_inv(transform_string)
end end
if histories[state.player] then
-- initialize with saved history
state.banner = histories[state.player]
else
-- initialize with empty banner -- initialize with empty banner
state.banner = banners.Banner:new(nil) state.banner = banners.Banner:new(nil)
state.banner:push_transform(banners.base_transform) state.banner:push_transform(banners.base_transform)
histories[state.player] = state.banner state.current_color = "bg_white.png"
end state:size(20,10)
state.banner:read_item(state.player) state:image(3, 0.4, 4, 2, "banner_preview", nil)
state.current_color = state.banner.color state:image(2.4, 0.8, 0.7, 0.7, "color_indicator", state.current_color)
state:size(20, 10) state:update_all()
state:image(3.4, 0.4, 4, 2, "banner_preview", nil)
state:image(2.55, 0.95, 0.7, 0.7, "color_indicator", state.current_color)
state:update_preview_inv()
-- color indicator -- color indicator
-- undo button -- undo button
state:button(0.5, 0.3, 2, 1, "undo", "Undo"):click(function(_, state2) state:button(0.5, 0.3, 2, 1, "undo", "Undo"):click(function(self, state)
if #state2.banner.transforms > 1 then if #state.banner.transforms > 1 then
state2.banner:pop_transform() state.banner:pop_transform()
state2:update_preview_inv() state:update_all()
end end
end) end)
-- delete button -- delete button
state:button(0.5, 1.3, 2, 1, "delete", "Delete"):click(function(_, state2) state:button(0.5, 1.3, 2, 1, "delete", "Delete"):click(function(self, state)
state2.banner.transforms = { banners.base_transform } state.banner.transforms = {banners.base_transform}
state2:update_preview_inv() state:update_all()
end) end)
-- add banners colors -- add banners colors
local x = 7 local x = 7
local y = .3 local y = .3
for _, color in ipairs(banners.colors) do for i in ipairs(banners.colors) do
local b = state:button(x, y, 1, 1, color, "") local b = state:button(x, y, 1, 1, banners.colors[i], "")
b:setImage("bg_" .. color .. ".png") b:setImage("bg_"..banners.colors[i]..".png")
b:click(function(self, state2) b:click(function(self, state)
state2.current_color = "bg_" .. self.name .. ".png" state.current_color = "bg_"..self.name..".png"
state2:get("color_indicator"):setImage(state2.current_color) state:update_preview()
state2.banner.color = state2.current_color -- todo: update masks or something
-- update masks
for _, mask in ipairs(banners.masks) do
state2:get(mask):setImage("(" .. state2.current_color
.. "^[mask:" .. mask .. ".png^[makealpha:0,0,0)")
end end
end) )
x = x + 1 x = x + 1
if x > 19 then if x > 19 then
y = y + 1 y = y + 1
@ -139,19 +94,16 @@ function banners.creation_form_func(state)
end end
end end
-- add banners buttons -- add banners buttons
x = 1 local x = 1
y = 3 local y = 3
for _, mask in ipairs(banners.masks) do for i in ipairs(banners.masks) do
local b = state:button(x, y, 2, 1, mask, "") local b = state:button(x, y, 2, 1, banners.masks[i], "")
b:setImage("(" .. state.current_color b:setImage(banners.masks[i]..".png")
.. "^[mask:" .. mask .. ".png^[makealpha:0,0,0)") b:click(function(self, state)
b:click(function(self, state2) state.banner:push_transform({texture=state.current_color, mask=self.name..".png"})
state2.banner:push_transform({ state:update_all()
texture = state2.current_color, end
mask = self.name .. ".png" )
})
state2:update_preview_inv()
end)
x = x + 2 x = x + 2
if x > 17.5 then if x > 17.5 then
y = y + 1 y = y + 1
@ -162,133 +114,62 @@ function banners.creation_form_func(state)
end end
banners.creation_form = smartfs.create("banners:banner_creation", banners.creation_form = smartfs.create("banners:banner_creation",
banners.creation_form_func) banners.creation_form_func);
function banners.transform_string_to_table(transform_string)
local mask, parts, texture
local transforms = {}
for part in transform_string:gmatch("%(([^%)]+)%)") do
parts = part:split("^[")
if 3 == #parts then
texture = parts[1]
mask = parts[2]:sub(6)
if valid_masks[mask] and valid_colors[texture] then
table.insert(transforms, {
texture = texture,
mask = mask
})
end
end
end
return transforms
end
function banners.transform_table_to_string(transforms)
local i = #transforms
if 0 == i then return "" end
local final = {}
local used = {}
local transform
-- work backwards to keep resulting data small
repeat
transform = transforms[i]
-- duplicate mask can be trimmed out only use most recent
if not used[transform.mask] then
used[transform.mask] = true
table.insert(final, 1, "(" .. transform.texture
.. "^[mask:" .. transform.mask .. "^[makealpha:0,0,0)")
-- anything before a background is fully covered
if "mask_background.png" == transform.mask then
break
end
end
i = i - 1
until i == 0
return table.concat(final, "^")
end
-- banner definition -- banner definition
banners.Banner = {} banners.Banner = {
transforms = {}
}
function banners.Banner:new(banner) function banners.Banner:new(banner)
banner = banner or { color = "bg_black.png", transforms = {} } banner = banner or {}
setmetatable(banner, self) setmetatable(banner, self)
self.__index = self self.__index = self
return banner return banner
end end
function banners.Banner.push_transform(self, transform)
function banners.Banner:push_transform(transform)
table.insert(self.transforms, transform) table.insert(self.transforms, transform)
if #self.transforms > banners.max_undo_levels then
table.remove(self.transforms, 1)
end
end end
function banners.Banner.pop_transform(self)
function banners.Banner:pop_transform()
table.remove(self.transforms) table.remove(self.transforms)
end end
function banners.Banner.get_transform_string(self)
function banners.Banner:get_transform_string() local final = {}
return banners.transform_table_to_string(self.transforms) for i in ipairs(self.transforms) do
end table.insert(final, "("..self.transforms[i].texture.."^[mask:"..self.transforms[i].mask.."^[makealpha:0,0,0)")
end
function banners.Banner:read_item(player_name) local ret = table.concat(final, "^")
local player = core.get_player_by_name(player_name) return ret
local item = player:get_wielded_item()
if "banners:" ~= item:get_name():sub(1, 8) then return end
local transforms = banners.transform_string_to_table(
item:get_meta():get_string(""))
local total = #transforms
if 0 == total then return end
local i = 1
repeat
self:push_transform(transforms[i])
i = i + 1
until i > total
end end
-- helper function for determining the flag's direction -- helper function for determining the flag's direction
-- (pos, pointed_thing) banners.determine_flag_direction = function(pos, pointed_thing)
function banners.determine_flag_direction(_, pointed_thing)
local above = pointed_thing.above local above = pointed_thing.above
local under = pointed_thing.under local under = pointed_thing.under
local dir = { local dir = {x = under.x - above.x,
x = under.x - above.x,
y = under.y - above.y, y = under.y - above.y,
z = under.z - above.z z = under.z - above.z}
} return minetest.dir_to_wallmounted(dir)
return core.dir_to_wallmounted(dir)
end end
-- (itemstack, player, pointed_thing) banners.banner_on_use = function(itemstack, player, pointed_thing)
function banners.banner_on_use(_, player)
if player.is_player then if player.is_player then
banners.creation_form:show(player:get_player_name()) banners.creation_form:show(player:get_player_name())
end end
end end
function banners.banner_on_dig(pos, node, player) banners.banner_on_dig = function(pos, node, player)
if not player or core.is_protected(pos, player:get_player_name()) then local meta = minetest.get_meta(pos)
return if player then
end
local meta = core.get_meta(pos)
local inventory = player:get_inventory() local inventory = player:get_inventory()
inventory:add_item("main", { inventory:add_item("main", {name=node.name, count=1, wear=0, metadata=meta:get_string("banner")})
name = node.name, end
count = 1, minetest.remove_node(pos)
wear = 0,
metadata = meta:get_string("banner")
})
core.remove_node(pos)
end end
-- (pos, node, player) banners.banner_on_destruct = function(pos, node, player)
function banners.banner_on_destruct(pos) local objects = minetest.get_objects_inside_radius(pos, 0.5)
local objects = core.get_objects_inside_radius(pos, 0.5) for _,v in ipairs(objects) do
for _, v in ipairs(objects) do
local e = v:get_luaentity() local e = v:get_luaentity()
if e and e.name == "banners:banner_ent" then if e and e.name == "banners:banner_ent" then
v:remove() v:remove()
@ -296,35 +177,23 @@ function banners.banner_on_destruct(pos)
end end
end end
-- (pos, player, itemstack, pointed_thing) banners.banner_after_place = function (pos, player, itemstack, pointed_thing)
function banners.banner_after_place(pos, _, itemstack, pointed_thing) minetest.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing)
core.get_node(pos).param2 = banners.determine_flag_direction(pos, pointed_thing) minetest.get_meta(pos):set_string("banner", itemstack:get_metadata())
local meta = core.get_meta(pos) minetest.add_entity(pos, "banners:banner_ent")
meta:set_string("banner", itemstack:get_meta():get_string(""))
meta:set_float("version", banners.version)
core.add_entity(pos, "banners:banner_ent")
end
-- [jumpdrive] compat
-- (from_pos, to_pos, additional_info)
function banners.banner_on_movenode(_, to_pos)
core.add_entity(to_pos, "banners:banner_ent")
end end
-- banner entity -- banner entity
local set_banner_texture
set_banner_texture = function (obj, texture)
obj:set_properties({textures={"banner_uv_text.png^"..texture}})
end
function banners:banner_on_activate()
local pos = self.object:get_pos() banners.banner_on_activate = function(self)
local meta = core.get_meta(pos) local pos = self.object:getpos()
local banner = meta:get_string("banner") local banner = minetest.get_meta(pos):get_string("banner")
-- cleanup meta of old banners local banner_face = minetest.get_node(pos).param2
if meta:get_float("version") < 20241122 then
meta:set_float("version", banners.version)
banner = banners.transform_table_to_string(
banners.transform_string_to_table(banner))
meta:set_string("banner", banner)
end
local banner_face = core.get_node(pos).param2
local yaw = 0. local yaw = 0.
if banner_face == 2 then if banner_face == 2 then
yaw = 0. yaw = 0.
@ -335,28 +204,28 @@ function banners:banner_on_activate()
elseif banner_face == 3 then elseif banner_face == 3 then
yaw = 4.71238898038469 -- 3 * pi / 2 yaw = 4.71238898038469 -- 3 * pi / 2
end end
self.object:set_yaw(yaw) self.object:setyaw(yaw)
self.object:set_properties({ if banner then
textures = { "banner_uv_text.png^" .. banner } set_banner_texture(self.object, banner)
}) end
end end
core.register_entity("banners:banner_ent", { minetest.register_entity("banners:banner_ent",
initial_properties = { {
collisionbox = { 0, 0, 0, 0, 0, 0 }, collisionbox = {0,0,0,0,0,0},
visual = "mesh", visual = "mesh",
textures = { "banner_uv_text" }, textures = {"banner_uv_text"},
mesh = "banner_pole.obj", mesh = "banner_pole.x",
},
on_activate = banners.banner_on_activate, on_activate = banners.banner_on_activate,
}) }
)
if core.get_modpath("factions") then if minetest.get_modpath("factions") then
dofile(MP .. "factions.lua") dofile(minetest.get_modpath("banners").."/factions.lua")
end end
dofile(MP .. "items.lua") dofile(minetest.get_modpath("banners").."/items.lua")
dofile(MP .. "nodes.lua") dofile(minetest.get_modpath("banners").."/nodes.lua")
dofile(MP .. "crafts.lua") dofile(minetest.get_modpath("banners").."/crafts.lua")
dofile(MP .. "chatcommands.lua")
minetest.log("action", "[banners] loaded.")

View File

@ -2,35 +2,44 @@
-- items -- items
core.register_craftitem("banners:banner_sheet", { minetest.register_craftitem("banners:banner_sheet",
{
groups = {}, groups = {},
description = "Banner sheet", description = "Banner sheet",
inventory_image = "banner_sheet.png", inventory_image = "banner_sheet.png",
stack_max = 1, stack_max = 1,
metadata = "", metadata = "",
}) }
)
core.register_craftitem("banners:wooden_pole", { minetest.register_craftitem("banners:wooden_pole",
{
groups = {}, groups = {},
description = "Wooden pole", description = "Wooden pole",
inventory_image = "wooden_pole.png" inventory_image = "wooden_pole.png"
}) }
)
core.register_craftitem("banners:wooden_base", { minetest.register_craftitem("banners:wooden_base",
{
groups = {}, groups = {},
description = "Wooden base", description = "Wooden base",
inventory_image = "wooden_base.png" inventory_image = "wooden_base.png"
}) }
)
core.register_craftitem("banners:steel_pole", { minetest.register_craftitem("banners:steel_pole",
{
groups = {}, groups = {},
description = "Steel pole", description = "Steel pole",
inventory_image = "steel_pole.png" inventory_image = "steel_pole.png"
}) }
)
core.register_craftitem("banners:steel_base", { minetest.register_craftitem("banners:steel_base",
{
groups = {}, groups = {},
description = "Steel base", description = "Steel base",
inventory_image = "steel_base.png" inventory_image = "steel_base.png"
}) }
)

View File

@ -1,4 +0,0 @@
name = banners
description = Adds customisable banners.
depends = default, farming
optional_depends = factions, inventory_plus, unified_inventory

View File

@ -1,425 +0,0 @@
# Blender 4.4.3
# www.blender.org
mtllib banner.mtl
o flag
v -0.543572 -5.241243 -0.533402
v -0.543572 44.039852 -0.533402
v -0.543572 -5.241243 0.535398
v -0.543572 44.039852 0.535398
v 0.458428 -5.241243 -0.533402
v 0.458428 44.039852 -0.533402
v 0.458428 -5.241243 0.535398
v 0.458428 44.039852 0.535398
v -19.753599 31.074223 -0.462508
v -19.753599 41.649487 -0.462508
v -18.855709 31.074223 -0.975180
v -18.855709 41.649487 -0.975179
v -18.229603 31.074223 -1.332998
v -18.229603 41.649487 -1.332998
v -17.550665 31.074223 -1.601055
v -17.550665 41.649483 -1.601056
v -16.821354 31.074223 -1.796366
v -16.821354 41.649483 -1.796365
v -16.005564 31.074223 -1.856682
v -16.005564 41.649483 -1.856682
v -15.163716 31.074223 -1.887776
v -15.163716 41.649483 -1.887777
v -14.255428 31.074223 -1.796628
v -14.255428 41.649487 -1.796628
v -13.328875 31.074223 -1.675647
v -13.328875 41.649483 -1.675646
v -12.373619 31.074223 -1.496117
v -12.373619 41.649483 -1.496117
v -11.394333 31.074223 -1.277657
v -11.394333 41.649487 -1.277656
v -10.402903 31.074223 -1.038762
v -10.402903 41.649483 -1.038762
v -9.378026 31.074223 -0.778455
v -9.378026 41.649483 -0.778455
v -8.341211 31.074223 -0.518895
v -8.341211 41.649483 -0.518895
v -7.269663 31.074223 -0.267102
v -7.269663 41.649483 -0.267102
v -6.166732 31.074223 -0.039093
v -6.166732 41.649487 -0.039093
v -5.032305 31.074223 0.162840
v -5.032305 41.649483 0.162840
v -3.830252 31.074223 0.282162
v -3.830252 41.649487 0.282162
v -2.602708 31.074223 0.356084
v -2.602708 41.649483 0.356084
v -1.284628 31.074223 0.236404
v -1.284628 41.649487 0.236403
v 0.038545 31.074223 -0.015804
v 0.038545 41.649483 -0.015804
v -19.754112 31.074223 -0.375066
v -19.754112 41.649487 -0.375066
v -18.856224 31.074223 -0.887738
v -18.856224 41.649487 -0.887738
v -18.230114 31.074223 -1.245556
v -18.230114 41.649487 -1.245556
v -17.551180 31.074223 -1.513614
v -17.551180 41.649483 -1.513615
v -16.821869 31.074223 -1.708924
v -16.821869 41.649483 -1.708924
v -16.006077 31.074223 -1.769240
v -16.006077 41.649483 -1.769240
v -15.164232 31.074223 -1.800334
v -15.164232 41.649483 -1.800334
v -14.255943 31.074223 -1.709186
v -14.255943 41.649487 -1.709186
v -13.329390 31.074223 -1.588204
v -13.329390 41.649483 -1.588204
v -12.374133 31.074223 -1.408675
v -12.374133 41.649483 -1.408675
v -11.394847 31.074223 -1.190215
v -11.394847 41.649487 -1.190214
v -10.403419 31.074223 -0.951321
v -10.403419 41.649483 -0.951321
v -9.378540 31.074223 -0.691013
v -9.378540 41.649483 -0.691014
v -8.341725 31.074223 -0.431453
v -8.341725 41.649483 -0.431453
v -7.270178 31.074223 -0.179660
v -7.270178 41.649483 -0.179660
v -6.167245 31.074223 0.048348
v -6.167245 41.649487 0.048349
v -5.032819 31.074223 0.250282
v -5.032819 41.649483 0.250282
v -3.830766 31.074223 0.369604
v -3.830766 41.649487 0.369604
v -2.603222 31.074223 0.443526
v -2.603222 41.649483 0.443526
v -1.285142 31.074223 0.323846
v -1.285142 41.649487 0.323846
v 0.038031 31.074223 0.071638
v 0.038031 41.649483 0.071638
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 -1.0000
vn -1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
vn -0.0000 1.0000 -0.0000
vn -0.0000 -1.0000 -0.0000
vn -0.4962 -0.0000 -0.8682
vn -0.4958 -0.0000 -0.8684
vn -0.3672 -0.0000 -0.9301
vn -0.0737 -0.0000 -0.9973
vn -0.2587 -0.0000 -0.9660
vn -0.0369 -0.0000 -0.9993
vn 0.1295 -0.0000 -0.9916
vn 0.0998 -0.0000 -0.9950
vn 0.1847 -0.0000 -0.9828
vn 0.2343 -0.0000 -0.9722
vn 0.2177 -0.0000 -0.9760
vn 0.2428 -0.0000 -0.9701
vn 0.2462 -0.0000 -0.9692
vn 0.2288 -0.0000 -0.9735
vn 0.1752 -0.0000 -0.9845
vn 0.2024 -0.0000 -0.9793
vn 0.0988 -0.0000 -0.9951
vn -0.0904 -0.0000 -0.9959
vn 0.0601 -0.0000 -0.9982
vn -0.1872 -0.0000 -0.9823
vn 0.4962 -0.0000 0.8682
vn 0.4958 -0.0000 0.8684
vn 0.3672 -0.0000 0.9301
vn 0.0737 -0.0000 0.9973
vn 0.2587 -0.0000 0.9660
vn 0.0369 -0.0000 0.9993
vn -0.1295 -0.0000 0.9916
vn -0.0998 -0.0000 0.9950
vn -0.1847 -0.0000 0.9828
vn -0.2343 -0.0000 0.9722
vn -0.2177 -0.0000 0.9760
vn -0.2428 -0.0000 0.9701
vn -0.2462 -0.0000 0.9692
vn -0.2288 -0.0000 0.9735
vn -0.1752 -0.0000 0.9845
vn -0.2024 -0.0000 0.9793
vn -0.0988 -0.0000 0.9951
vn 0.0904 -0.0000 0.9959
vn -0.0601 -0.0000 0.9982
vn 0.1872 -0.0000 0.9823
vn -1.0000 -0.0000 -0.0059
vn 1.0000 -0.0000 0.0059
vt 0.502372 0.344045
vt 0.502372 0.325948
vt 0.993251 0.325948
vt 0.993251 0.344045
vt 0.997751 0.312205
vt 0.997751 0.325777
vt 0.506885 0.325779
vt 0.506885 0.312205
vt 0.488799 0.325948
vt 0.488799 0.344045
vt -0.002080 0.344045
vt -0.002080 0.325948
vt -0.002080 0.325779
vt -0.002080 0.312207
vt 0.488786 0.312205
vt 0.488786 0.325779
vt 0.943902 0.997273
vt 0.908697 0.997273
vt 0.908696 0.497389
vt 0.943901 0.497389
vt 0.994376 0.497389
vt 0.994377 0.997273
vt 0.873062 0.997273
vt 0.873062 0.497389
vt 0.836204 0.997273
vt 0.796270 0.997273
vt 0.796270 0.497389
vt 0.836203 0.497389
vt 0.755145 0.997273
vt 0.755144 0.497389
vt 0.710581 0.997273
vt 0.664964 0.997273
vt 0.664964 0.497389
vt 0.710580 0.497389
vt 0.617514 0.997273
vt 0.617513 0.497389
vt 0.568531 0.997273
vt 0.518746 0.997273
vt 0.518746 0.497389
vt 0.568531 0.497389
vt 0.467125 0.997273
vt 0.414948 0.997273
vt 0.414948 0.497389
vt 0.467125 0.497389
vt 0.361211 0.997273
vt 0.361212 0.497389
vt 0.306230 0.997273
vt 0.249978 0.997273
vt 0.249979 0.497389
vt 0.306230 0.497389
vt 0.191008 0.997273
vt 0.191008 0.497389
vt 0.130973 0.997273
vt 0.066362 0.997273
vt 0.066362 0.497389
vt 0.130973 0.497389
vt 0.000604 0.997273
vt 0.000604 0.497389
vt 0.941264 0.998578
vt 0.941265 0.492496
vt 0.906167 0.492496
vt 0.906167 0.998578
vt 0.991585 0.998578
vt 0.991585 0.492496
vt 0.870642 0.492496
vt 0.870642 0.998578
vt 0.833896 0.998578
vt 0.833896 0.492496
vt 0.794084 0.492496
vt 0.794084 0.998578
vt 0.753084 0.492496
vt 0.753085 0.998578
vt 0.708657 0.998578
vt 0.708657 0.492496
vt 0.663180 0.492496
vt 0.663180 0.998578
vt 0.615874 0.492496
vt 0.615874 0.998578
vt 0.567042 0.998578
vt 0.567042 0.492496
vt 0.517409 0.492496
vt 0.517409 0.998578
vt 0.465946 0.998578
vt 0.465945 0.492496
vt 0.413927 0.492496
vt 0.413928 0.998578
vt 0.360356 0.492496
vt 0.360356 0.998578
vt 0.305542 0.998578
vt 0.305542 0.492496
vt 0.249463 0.492496
vt 0.249463 0.998578
vt 0.190673 0.492496
vt 0.190673 0.998578
vt 0.130821 0.998578
vt 0.130821 0.492496
vt 0.066407 0.492496
vt 0.066407 0.998578
vt 0.000850 0.492496
vt 0.000850 0.998578
vt 0.819613 0.067723
vt 0.721014 0.067723
vt 0.721002 0.066003
vt 0.819602 0.066002
vt 0.594108 0.172586
vt 0.581155 0.174942
vt 0.581155 0.173757
vt 0.594108 0.171402
vt 0.726607 0.148275
vt 0.709973 0.149179
vt 0.709973 0.147994
vt 0.726607 0.147091
vt 0.533037 0.180145
vt 0.544035 0.178802
vt 0.544085 0.179986
vt 0.533086 0.181329
vt 0.648599 0.191953
vt 0.663260 0.194668
vt 0.663310 0.195852
vt 0.648648 0.193137
vt 0.544883 0.177181
vt 0.533838 0.176299
vt 0.533838 0.175114
vt 0.544883 0.175996
vt 0.663341 0.156345
vt 0.648807 0.159670
vt 0.648807 0.158486
vt 0.663341 0.155161
vt 0.506347 0.165013
vt 0.494225 0.157997
vt 0.494225 0.156813
vt 0.506347 0.163829
vt 0.607391 0.169705
vt 0.607391 0.168521
vt 0.726809 0.200087
vt 0.744566 0.197616
vt 0.744616 0.198800
vt 0.726858 0.201270
vt 0.494225 0.200086
vt 0.506043 0.192570
vt 0.506092 0.193753
vt 0.494274 0.201269
vt 0.593408 0.181335
vt 0.606799 0.183659
vt 0.606849 0.184842
vt 0.593458 0.182519
vt 0.744451 0.150001
vt 0.744451 0.148817
vt 0.555405 0.177838
vt 0.555455 0.179021
vt 0.678331 0.197041
vt 0.678380 0.198225
vt 0.721002 0.067892
vt 0.819602 0.067892
vt 0.819613 0.069613
vt 0.721014 0.069613
vt 0.556284 0.177669
vt 0.556284 0.176485
vt 0.678299 0.153344
vt 0.678299 0.152160
vt 0.514283 0.187324
vt 0.514332 0.188507
vt 0.620368 0.186251
vt 0.620417 0.187434
vt 0.762307 0.193349
vt 0.762356 0.194533
vt 0.514799 0.169910
vt 0.514799 0.168725
vt 0.620839 0.166548
vt 0.620839 0.165364
vt 0.762354 0.153523
vt 0.762354 0.152338
vt 0.567753 0.178485
vt 0.567803 0.179668
vt 0.693811 0.199041
vt 0.693860 0.200224
vt 0.568595 0.176507
vt 0.568595 0.175322
vt 0.693681 0.150699
vt 0.693681 0.149515
vt 0.523295 0.183259
vt 0.523345 0.184442
vt 0.634403 0.189111
vt 0.634452 0.190295
vt 0.523974 0.173595
vt 0.523974 0.172411
vt 0.634742 0.163104
vt 0.634742 0.161919
vt 0.580368 0.179523
vt 0.580417 0.180707
vt 0.710152 0.199879
vt 0.710202 0.201063
s 0
f 2/1/1 4/2/1 3/3/1 1/4/1
f 4/5/2 8/6/2 7/7/2 3/8/2
f 8/9/3 6/10/3 5/11/3 7/12/3
f 6/13/4 2/14/4 1/15/4 5/16/4
f 1/15/5 3/8/5 7/7/5 5/16/5
f 6/10/6 8/9/6 4/2/6 2/1/6
f 12/17/7 14/18/7 13/19/7 11/20/7
f 12/17/8 11/20/8 9/21/8 10/22/8
f 14/18/9 16/23/9 15/24/9 13/19/9
f 18/25/10 20/26/10 19/27/10 17/28/10
f 16/23/11 18/25/11 17/28/11 15/24/11
f 20/26/12 22/29/12 21/30/12 19/27/12
f 24/31/13 26/32/13 25/33/13 23/34/13
f 22/29/14 24/31/14 23/34/14 21/30/14
f 26/32/15 28/35/15 27/36/15 25/33/15
f 30/37/16 32/38/16 31/39/16 29/40/16
f 28/35/17 30/37/17 29/40/17 27/36/17
f 34/41/18 36/42/18 35/43/18 33/44/18
f 32/38/19 34/41/19 33/44/19 31/39/19
f 36/42/20 38/45/20 37/46/20 35/43/20
f 40/47/21 42/48/21 41/49/21 39/50/21
f 38/45/22 40/47/22 39/50/22 37/46/22
f 42/48/23 44/51/23 43/52/23 41/49/23
f 46/53/24 48/54/24 47/55/24 45/56/24
f 44/51/25 46/53/25 45/56/25 43/52/25
f 48/54/26 50/57/26 49/58/26 47/55/26
f 54/59/27 53/60/27 55/61/27 56/62/27
f 54/59/28 52/63/28 51/64/28 53/60/28
f 56/62/29 55/61/29 57/65/29 58/66/29
f 60/67/30 59/68/30 61/69/30 62/70/30
f 58/66/31 57/65/31 59/68/31 60/67/31
f 62/70/32 61/69/32 63/71/32 64/72/32
f 66/73/33 65/74/33 67/75/33 68/76/33
f 64/72/34 63/71/34 65/74/34 66/73/34
f 68/76/35 67/75/35 69/77/35 70/78/35
f 72/79/36 71/80/36 73/81/36 74/82/36
f 70/78/37 69/77/37 71/80/37 72/79/37
f 76/83/38 75/84/38 77/85/38 78/86/38
f 74/82/39 73/81/39 75/84/39 76/83/39
f 78/86/40 77/85/40 79/87/40 80/88/40
f 82/89/41 81/90/41 83/91/41 84/92/41
f 80/88/42 79/87/42 81/90/42 82/89/42
f 84/92/43 83/91/43 85/93/43 86/94/43
f 88/95/44 87/96/44 89/97/44 90/98/44
f 86/94/45 85/93/45 87/96/45 88/95/45
f 90/98/46 89/97/46 91/99/46 92/100/46
f 10/101/47 9/102/47 51/103/47 52/104/47
f 28/105/5 26/106/5 68/107/5 70/108/5
f 46/109/5 44/110/5 86/111/5 88/112/5
f 17/113/6 19/114/6 61/115/6 59/116/6
f 35/117/6 37/118/6 79/119/6 77/120/6
f 20/121/5 18/122/5 60/123/5 62/124/5
f 38/125/5 36/126/5 78/127/5 80/128/5
f 12/129/5 10/130/5 52/131/5 54/132/5
f 30/133/5 28/105/5 70/108/5 72/134/5
f 45/135/6 47/136/6 89/137/6 87/138/6
f 9/139/6 11/140/6 53/141/6 51/142/6
f 27/143/6 29/144/6 71/145/6 69/146/6
f 48/147/5 46/109/5 88/112/5 90/148/5
f 19/114/6 21/149/6 63/150/6 61/115/6
f 37/118/6 39/151/6 81/152/6 79/119/6
f 49/153/48 50/154/48 92/155/48 91/156/48
f 22/157/5 20/121/5 62/124/5 64/158/5
f 40/159/5 38/125/5 80/128/5 82/160/5
f 11/140/6 13/161/6 55/162/6 53/141/6
f 29/144/6 31/163/6 73/164/6 71/145/6
f 47/136/6 49/165/6 91/166/6 89/137/6
f 14/167/5 12/129/5 54/132/5 56/168/5
f 32/169/5 30/133/5 72/134/5 74/170/5
f 50/171/5 48/147/5 90/148/5 92/172/5
f 21/149/6 23/173/6 65/174/6 63/150/6
f 39/151/6 41/175/6 83/176/6 81/152/6
f 24/177/5 22/157/5 64/158/5 66/178/5
f 42/179/5 40/159/5 82/160/5 84/180/5
f 13/161/6 15/181/6 57/182/6 55/162/6
f 31/163/6 33/183/6 75/184/6 73/164/6
f 16/185/5 14/167/5 56/168/5 58/186/5
f 34/187/5 32/169/5 74/170/5 76/188/5
f 23/173/6 25/189/6 67/190/6 65/174/6
f 41/175/6 43/191/6 85/192/6 83/176/6
f 26/106/5 24/177/5 66/178/5 68/107/5
f 44/110/5 42/179/5 84/180/5 86/111/5
f 15/181/6 17/113/6 59/116/6 57/182/6
f 33/183/6 35/117/6 77/120/6 75/184/6
f 18/122/5 16/185/5 58/186/5 60/123/5
f 36/126/5 34/187/5 76/188/5 78/127/5
f 25/189/6 27/143/6 69/146/6 67/190/6
f 43/191/6 45/135/6 87/138/6 85/192/6

997
models/banner_pole.x Normal file
View File

@ -0,0 +1,997 @@
xof 0303txt 0032
Frame Root {
FrameTransformMatrix {
1.000000, 0.000000, 0.000000, 0.000000,
0.000000,-0.000000, 1.000000, 0.000000,
0.000000, 1.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.000000, 1.000000;;
}
Frame flag {
FrameTransformMatrix {
16.700001, 0.000000, 0.000000, 0.000000,
0.000000,16.700001, 0.000000, 0.000000,
0.000000, 0.000000,16.700001, 0.000000,
-9.000000, 0.000000,12.000000, 1.000000;;
}
Mesh { // flag mesh
352;
0.506373; 0.031940; 1.261682;,
0.506373;-0.032060; 1.261682;,
0.506373;-0.032060;-1.689282;,
0.506373; 0.031940;-1.689282;,
0.506373;-0.032060; 1.261682;,
0.566373;-0.032060; 1.261682;,
0.566373;-0.032060;-1.689282;,
0.506373;-0.032060;-1.689282;,
0.566373;-0.032060; 1.261682;,
0.566373; 0.031940; 1.261682;,
0.566373; 0.031940;-1.689282;,
0.566373;-0.032060;-1.689282;,
0.566373; 0.031940; 1.261682;,
0.506373; 0.031940; 1.261682;,
0.506373; 0.031940;-1.689282;,
0.566373; 0.031940;-1.689282;,
0.506373; 0.031940;-1.689282;,
0.506373;-0.032060;-1.689282;,
0.566373;-0.032060;-1.689282;,
0.566373; 0.031940;-1.689282;,
0.566373; 0.031940; 1.261682;,
0.566373;-0.032060; 1.261682;,
0.506373;-0.032060; 1.261682;,
0.506373; 0.031940; 1.261682;,
-0.590162; 0.058394; 1.118546;,
-0.552671; 0.079820; 1.118546;,
-0.552671; 0.079820; 0.485297;,
-0.590162; 0.058394; 0.485297;,
-0.590162; 0.058394; 1.118546;,
-0.590162; 0.058394; 0.485297;,
-0.643928; 0.027695; 0.485297;,
-0.643928; 0.027695; 1.118546;,
-0.552671; 0.079820; 1.118546;,
-0.512016; 0.095872; 1.118546;,
-0.512016; 0.095872; 0.485297;,
-0.552671; 0.079820; 0.485297;,
-0.468345; 0.107567; 1.118546;,
-0.419495; 0.111179; 1.118546;,
-0.419495; 0.111179; 0.485297;,
-0.468345; 0.107567; 0.485297;,
-0.512016; 0.095872; 1.118546;,
-0.468345; 0.107567; 1.118546;,
-0.468345; 0.107567; 0.485297;,
-0.512016; 0.095872; 0.485297;,
-0.419495; 0.111179; 1.118546;,
-0.369085; 0.113041; 1.118546;,
-0.369085; 0.113040; 0.485297;,
-0.419495; 0.111179; 0.485297;,
-0.314696; 0.107583; 1.118546;,
-0.259214; 0.100338; 1.118546;,
-0.259214; 0.100338; 0.485297;,
-0.314696; 0.107583; 0.485297;,
-0.369085; 0.113041; 1.118546;,
-0.314696; 0.107583; 1.118546;,
-0.314696; 0.107583; 0.485297;,
-0.369085; 0.113040; 0.485297;,
-0.259214; 0.100338; 1.118546;,
-0.202013; 0.089588; 1.118546;,
-0.202013; 0.089588; 0.485297;,
-0.259214; 0.100338; 0.485297;,
-0.143373; 0.076506; 1.118546;,
-0.084006; 0.062201; 1.118546;,
-0.084006; 0.062201; 0.485297;,
-0.143373; 0.076506; 0.485297;,
-0.202013; 0.089588; 1.118546;,
-0.143373; 0.076506; 1.118546;,
-0.143373; 0.076506; 0.485297;,
-0.202013; 0.089588; 0.485297;,
-0.022636; 0.046614; 1.118546;,
0.039448; 0.031072; 1.118546;,
0.039448; 0.031072; 0.485297;,
-0.022636; 0.046614; 0.485297;,
-0.084006; 0.062201; 1.118546;,
-0.022636; 0.046614; 1.118546;,
-0.022636; 0.046614; 0.485297;,
-0.084006; 0.062201; 0.485297;,
0.039448; 0.031072; 1.118546;,
0.103613; 0.015994; 1.118546;,
0.103613; 0.015994; 0.485297;,
0.039448; 0.031072; 0.485297;,
0.169657; 0.002341; 1.118546;,
0.237587;-0.009751; 1.118546;,
0.237587;-0.009751; 0.485297;,
0.169657; 0.002341; 0.485297;,
0.103613; 0.015994; 1.118546;,
0.169657; 0.002341; 1.118546;,
0.169657; 0.002341; 0.485297;,
0.103613; 0.015994; 0.485297;,
0.237587;-0.009751; 1.118546;,
0.309566;-0.016896; 1.118546;,
0.309566;-0.016896; 0.485297;,
0.237587;-0.009751; 0.485297;,
0.383071;-0.021322; 1.118546;,
0.461998;-0.014156; 1.118546;,
0.461998;-0.014156; 0.485297;,
0.383071;-0.021322; 0.485297;,
0.309566;-0.016896; 1.118546;,
0.383071;-0.021322; 1.118546;,
0.383071;-0.021322; 0.485297;,
0.309566;-0.016896; 0.485297;,
0.461998;-0.014156; 1.118546;,
0.541230; 0.000946; 1.118546;,
0.541230; 0.000946; 0.485297;,
0.461998;-0.014156; 0.485297;,
-0.590193; 0.053158; 1.118546;,
-0.590193; 0.053158; 0.485297;,
-0.552701; 0.074584; 0.485297;,
-0.552701; 0.074584; 1.118546;,
-0.590193; 0.053158; 1.118546;,
-0.643959; 0.022459; 1.118546;,
-0.643959; 0.022459; 0.485297;,
-0.590193; 0.053158; 0.485297;,
-0.552701; 0.074584; 1.118546;,
-0.552701; 0.074584; 0.485297;,
-0.512047; 0.090636; 0.485297;,
-0.512047; 0.090636; 1.118546;,
-0.468375; 0.102331; 1.118546;,
-0.468375; 0.102331; 0.485297;,
-0.419526; 0.105943; 0.485297;,
-0.419526; 0.105943; 1.118546;,
-0.512047; 0.090636; 1.118546;,
-0.512047; 0.090636; 0.485297;,
-0.468375; 0.102331; 0.485297;,
-0.468375; 0.102331; 1.118546;,
-0.419526; 0.105943; 1.118546;,
-0.419526; 0.105943; 0.485297;,
-0.369116; 0.107804; 0.485297;,
-0.369116; 0.107804; 1.118546;,
-0.314727; 0.102346; 1.118546;,
-0.314727; 0.102346; 0.485297;,
-0.259245; 0.095102; 0.485297;,
-0.259245; 0.095102; 1.118546;,
-0.369116; 0.107804; 1.118546;,
-0.369116; 0.107804; 0.485297;,
-0.314727; 0.102346; 0.485297;,
-0.314727; 0.102346; 1.118546;,
-0.259245; 0.095102; 1.118546;,
-0.259245; 0.095102; 0.485297;,
-0.202044; 0.084352; 0.485297;,
-0.202044; 0.084352; 1.118546;,
-0.143404; 0.071270; 1.118546;,
-0.143404; 0.071270; 0.485297;,
-0.084037; 0.056965; 0.485297;,
-0.084037; 0.056965; 1.118546;,
-0.202044; 0.084352; 1.118546;,
-0.202044; 0.084352; 0.485297;,
-0.143404; 0.071270; 0.485297;,
-0.143404; 0.071270; 1.118546;,
-0.022667; 0.041378; 1.118546;,
-0.022667; 0.041378; 0.485297;,
0.039418; 0.025836; 0.485297;,
0.039418; 0.025836; 1.118546;,
-0.084037; 0.056965; 1.118546;,
-0.084037; 0.056965; 0.485297;,
-0.022667; 0.041378; 0.485297;,
-0.022667; 0.041378; 1.118546;,
0.039418; 0.025836; 1.118546;,
0.039418; 0.025836; 0.485297;,
0.103582; 0.010758; 0.485297;,
0.103582; 0.010758; 1.118546;,
0.169626;-0.002895; 1.118546;,
0.169626;-0.002895; 0.485297;,
0.237556;-0.014987; 0.485297;,
0.237556;-0.014987; 1.118546;,
0.103582; 0.010758; 1.118546;,
0.103582; 0.010758; 0.485297;,
0.169626;-0.002895; 0.485297;,
0.169626;-0.002895; 1.118546;,
0.237556;-0.014987; 1.118546;,
0.237556;-0.014987; 0.485297;,
0.309535;-0.022132; 0.485297;,
0.309535;-0.022132; 1.118546;,
0.383041;-0.026558; 1.118546;,
0.383041;-0.026558; 0.485297;,
0.461967;-0.019392; 0.485297;,
0.461967;-0.019392; 1.118546;,
0.309535;-0.022132; 1.118546;,
0.309535;-0.022132; 0.485297;,
0.383041;-0.026558; 0.485297;,
0.383041;-0.026558; 1.118546;,
0.461967;-0.019392; 1.118546;,
0.461967;-0.019392; 0.485297;,
0.541199;-0.004290; 0.485297;,
0.541199;-0.004290; 1.118546;,
-0.643928; 0.027695; 1.118546;,
-0.643928; 0.027695; 0.485297;,
-0.643959; 0.022459; 0.485297;,
-0.643959; 0.022459; 1.118546;,
-0.202013; 0.089588; 1.118546;,
-0.259214; 0.100338; 1.118546;,
-0.259245; 0.095102; 1.118546;,
-0.202044; 0.084352; 1.118546;,
0.383071;-0.021322; 1.118546;,
0.309566;-0.016896; 1.118546;,
0.309535;-0.022132; 1.118546;,
0.383041;-0.026558; 1.118546;,
-0.468345; 0.107567; 0.485297;,
-0.419495; 0.111179; 0.485297;,
-0.419526; 0.105943; 0.485297;,
-0.468375; 0.102331; 0.485297;,
0.039448; 0.031072; 0.485297;,
0.103613; 0.015994; 0.485297;,
0.103582; 0.010758; 0.485297;,
0.039418; 0.025836; 0.485297;,
-0.419495; 0.111179; 1.118546;,
-0.468345; 0.107567; 1.118546;,
-0.468375; 0.102331; 1.118546;,
-0.419526; 0.105943; 1.118546;,
0.103613; 0.015994; 1.118546;,
0.039448; 0.031072; 1.118546;,
0.039418; 0.025836; 1.118546;,
0.103582; 0.010758; 1.118546;,
-0.590162; 0.058394; 1.118546;,
-0.643928; 0.027695; 1.118546;,
-0.643959; 0.022459; 1.118546;,
-0.590193; 0.053158; 1.118546;,
-0.143373; 0.076506; 1.118546;,
-0.202013; 0.089588; 1.118546;,
-0.202044; 0.084352; 1.118546;,
-0.143404; 0.071270; 1.118546;,
0.383071;-0.021322; 0.485297;,
0.461998;-0.014156; 0.485297;,
0.461967;-0.019392; 0.485297;,
0.383041;-0.026558; 0.485297;,
-0.643928; 0.027695; 0.485297;,
-0.590162; 0.058394; 0.485297;,
-0.590193; 0.053158; 0.485297;,
-0.643959; 0.022459; 0.485297;,
-0.202013; 0.089588; 0.485297;,
-0.143373; 0.076506; 0.485297;,
-0.143404; 0.071270; 0.485297;,
-0.202044; 0.084352; 0.485297;,
0.461998;-0.014156; 1.118546;,
0.383071;-0.021322; 1.118546;,
0.383041;-0.026558; 1.118546;,
0.461967;-0.019392; 1.118546;,
-0.419495; 0.111179; 0.485297;,
-0.369085; 0.113040; 0.485297;,
-0.369116; 0.107804; 0.485297;,
-0.419526; 0.105943; 0.485297;,
0.103613; 0.015994; 0.485297;,
0.169657; 0.002341; 0.485297;,
0.169626;-0.002895; 0.485297;,
0.103582; 0.010758; 0.485297;,
0.541230; 0.000946; 0.485297;,
0.541230; 0.000946; 1.118546;,
0.541199;-0.004290; 1.118546;,
0.541199;-0.004290; 0.485297;,
-0.369085; 0.113041; 1.118546;,
-0.419495; 0.111179; 1.118546;,
-0.419526; 0.105943; 1.118546;,
-0.369116; 0.107804; 1.118546;,
0.169657; 0.002341; 1.118546;,
0.103613; 0.015994; 1.118546;,
0.103582; 0.010758; 1.118546;,
0.169626;-0.002895; 1.118546;,
-0.590162; 0.058394; 0.485297;,
-0.552671; 0.079820; 0.485297;,
-0.552701; 0.074584; 0.485297;,
-0.590193; 0.053158; 0.485297;,
-0.143373; 0.076506; 0.485297;,
-0.084006; 0.062201; 0.485297;,
-0.084037; 0.056965; 0.485297;,
-0.143404; 0.071270; 0.485297;,
0.461998;-0.014156; 0.485297;,
0.541230; 0.000946; 0.485297;,
0.541199;-0.004290; 0.485297;,
0.461967;-0.019392; 0.485297;,
-0.552671; 0.079820; 1.118546;,
-0.590162; 0.058394; 1.118546;,
-0.590193; 0.053158; 1.118546;,
-0.552701; 0.074584; 1.118546;,
-0.084006; 0.062201; 1.118546;,
-0.143373; 0.076506; 1.118546;,
-0.143404; 0.071270; 1.118546;,
-0.084037; 0.056965; 1.118546;,
0.541230; 0.000946; 1.118546;,
0.461998;-0.014156; 1.118546;,
0.461967;-0.019392; 1.118546;,
0.541199;-0.004290; 1.118546;,
-0.369085; 0.113040; 0.485297;,
-0.314696; 0.107583; 0.485297;,
-0.314727; 0.102346; 0.485297;,
-0.369116; 0.107804; 0.485297;,
0.169657; 0.002341; 0.485297;,
0.237587;-0.009751; 0.485297;,
0.237556;-0.014987; 0.485297;,
0.169626;-0.002895; 0.485297;,
-0.314696; 0.107583; 1.118546;,
-0.369085; 0.113041; 1.118546;,
-0.369116; 0.107804; 1.118546;,
-0.314727; 0.102346; 1.118546;,
0.237587;-0.009751; 1.118546;,
0.169657; 0.002341; 1.118546;,
0.169626;-0.002895; 1.118546;,
0.237556;-0.014987; 1.118546;,
-0.552671; 0.079820; 0.485297;,
-0.512016; 0.095872; 0.485297;,
-0.512047; 0.090636; 0.485297;,
-0.552701; 0.074584; 0.485297;,
-0.084006; 0.062201; 0.485297;,
-0.022636; 0.046614; 0.485297;,
-0.022667; 0.041378; 0.485297;,
-0.084037; 0.056965; 0.485297;,
-0.512016; 0.095872; 1.118546;,
-0.552671; 0.079820; 1.118546;,
-0.552701; 0.074584; 1.118546;,
-0.512047; 0.090636; 1.118546;,
-0.022636; 0.046614; 1.118546;,
-0.084006; 0.062201; 1.118546;,
-0.084037; 0.056965; 1.118546;,
-0.022667; 0.041378; 1.118546;,
-0.314696; 0.107583; 0.485297;,
-0.259214; 0.100338; 0.485297;,
-0.259245; 0.095102; 0.485297;,
-0.314727; 0.102346; 0.485297;,
0.237587;-0.009751; 0.485297;,
0.309566;-0.016896; 0.485297;,
0.309535;-0.022132; 0.485297;,
0.237556;-0.014987; 0.485297;,
-0.259214; 0.100338; 1.118546;,
-0.314696; 0.107583; 1.118546;,
-0.314727; 0.102346; 1.118546;,
-0.259245; 0.095102; 1.118546;,
0.309566;-0.016896; 1.118546;,
0.237587;-0.009751; 1.118546;,
0.237556;-0.014987; 1.118546;,
0.309535;-0.022132; 1.118546;,
-0.512016; 0.095872; 0.485297;,
-0.468345; 0.107567; 0.485297;,
-0.468375; 0.102331; 0.485297;,
-0.512047; 0.090636; 0.485297;,
-0.022636; 0.046614; 0.485297;,
0.039448; 0.031072; 0.485297;,
0.039418; 0.025836; 0.485297;,
-0.022667; 0.041378; 0.485297;,
-0.468345; 0.107567; 1.118546;,
-0.512016; 0.095872; 1.118546;,
-0.512047; 0.090636; 1.118546;,
-0.468375; 0.102331; 1.118546;,
0.039448; 0.031072; 1.118546;,
-0.022636; 0.046614; 1.118546;,
-0.022667; 0.041378; 1.118546;,
0.039418; 0.025836; 1.118546;,
-0.259214; 0.100338; 0.485297;,
-0.202013; 0.089588; 0.485297;,
-0.202044; 0.084352; 0.485297;,
-0.259245; 0.095102; 0.485297;,
0.309566;-0.016896; 0.485297;,
0.383071;-0.021322; 0.485297;,
0.383041;-0.026558; 0.485297;,
0.309535;-0.022132; 0.485297;;
88;
4;3,2,1,0;,
4;7,6,5,4;,
4;11,10,9,8;,
4;15,14,13,12;,
4;19,18,17,16;,
4;23,22,21,20;,
4;27,26,25,24;,
4;31,30,29,28;,
4;35,34,33,32;,
4;39,38,37,36;,
4;43,42,41,40;,
4;47,46,45,44;,
4;51,50,49,48;,
4;55,54,53,52;,
4;59,58,57,56;,
4;63,62,61,60;,
4;67,66,65,64;,
4;71,70,69,68;,
4;75,74,73,72;,
4;79,78,77,76;,
4;83,82,81,80;,
4;87,86,85,84;,
4;91,90,89,88;,
4;95,94,93,92;,
4;99,98,97,96;,
4;103,102,101,100;,
4;107,106,105,104;,
4;111,110,109,108;,
4;115,114,113,112;,
4;119,118,117,116;,
4;123,122,121,120;,
4;127,126,125,124;,
4;131,130,129,128;,
4;135,134,133,132;,
4;139,138,137,136;,
4;143,142,141,140;,
4;147,146,145,144;,
4;151,150,149,148;,
4;155,154,153,152;,
4;159,158,157,156;,
4;163,162,161,160;,
4;167,166,165,164;,
4;171,170,169,168;,
4;175,174,173,172;,
4;179,178,177,176;,
4;183,182,181,180;,
4;187,186,185,184;,
4;191,190,189,188;,
4;195,194,193,192;,
4;199,198,197,196;,
4;203,202,201,200;,
4;207,206,205,204;,
4;211,210,209,208;,
4;215,214,213,212;,
4;219,218,217,216;,
4;223,222,221,220;,
4;227,226,225,224;,
4;231,230,229,228;,
4;235,234,233,232;,
4;239,238,237,236;,
4;243,242,241,240;,
4;247,246,245,244;,
4;251,250,249,248;,
4;255,254,253,252;,
4;259,258,257,256;,
4;263,262,261,260;,
4;267,266,265,264;,
4;271,270,269,268;,
4;275,274,273,272;,
4;279,278,277,276;,
4;283,282,281,280;,
4;287,286,285,284;,
4;291,290,289,288;,
4;295,294,293,292;,
4;299,298,297,296;,
4;303,302,301,300;,
4;307,306,305,304;,
4;311,310,309,308;,
4;315,314,313,312;,
4;319,318,317,316;,
4;323,322,321,320;,
4;327,326,325,324;,
4;331,330,329,328;,
4;335,334,333,332;,
4;339,338,337,336;,
4;343,342,341,340;,
4;347,346,345,344;,
4;351,350,349,348;;
MeshNormals { // flag normals
88;
1.000000; 0.000000;-0.000000;,
0.000000; 1.000000;-0.000000;,
-1.000000; 0.000000; 0.000000;,
0.000000;-1.000000; 0.000000;,
0.000000; 0.000000; 1.000000;,
0.000000; 0.000000;-1.000000;,
-0.496183; 0.868218; 0.000000;,
-0.495842; 0.868413; 0.000000;,
-0.367234; 0.930129;-0.000000;,
-0.073735; 0.997278; 0.000000;,
-0.258685; 0.965962;-0.000000;,
-0.036910; 0.999319;-0.000000;,
0.129473; 0.991583; 0.000000;,
0.099850; 0.995003;-0.000000;,
0.184705; 0.982794; 0.000000;,
0.234254; 0.972175; 0.000000;,
0.217729; 0.976009; 0.000000;,
0.242850; 0.970064;-0.000000;,
0.246172; 0.969226;-0.000000;,
0.228750; 0.973485; 0.000000;,
0.175250; 0.984524; 0.000000;,
0.202449; 0.979293; 0.000000;,
0.098780; 0.995109; 0.000000;,
-0.090427; 0.995903;-0.000000;,
0.060111; 0.998192; 0.000000;,
-0.187237; 0.982315;-0.000000;,
0.496183;-0.868218;-0.000000;,
0.495842;-0.868413;-0.000000;,
0.367235;-0.930128; 0.000000;,
0.073735;-0.997278; 0.000000;,
0.258684;-0.965962; 0.000000;,
0.036910;-0.999319; 0.000000;,
-0.129473;-0.991583; 0.000000;,
-0.099849;-0.995003; 0.000000;,
-0.184705;-0.982794; 0.000000;,
-0.234255;-0.972175;-0.000000;,
-0.217730;-0.976009;-0.000000;,
-0.242849;-0.970064; 0.000000;,
-0.246172;-0.969226; 0.000000;,
-0.228750;-0.973485;-0.000000;,
-0.175250;-0.984524;-0.000000;,
-0.202449;-0.979293;-0.000000;,
-0.098780;-0.995109; 0.000000;,
0.090427;-0.995903; 0.000000;,
-0.060111;-0.998192; 0.000000;,
0.187237;-0.982315; 0.000000;,
-0.999983; 0.005874; 0.000000;,
-0.000000;-0.000000; 1.000000;,
0.000003;-0.000000; 1.000000;,
0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;,
0.000000;-0.000000; 1.000000;,
-0.000000;-0.000000; 1.000000;,
0.000000;-0.000000; 1.000000;,
-0.000004; 0.000000; 1.000000;,
-0.000000; 0.000000;-1.000000;,
-0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;,
-0.000003; 0.000000; 1.000000;,
0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;,
0.999983;-0.005885; 0.000000;,
0.000000;-0.000000; 1.000000;,
-0.000004; 0.000000; 1.000000;,
-0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;,
-0.000000; 0.000000;-1.000000;,
0.000000;-0.000000; 1.000000;,
0.000004;-0.000000; 1.000000;,
0.000003;-0.000000; 1.000000;,
0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;,
-0.000004; 0.000000; 1.000000;,
0.000004;-0.000000; 1.000000;,
-0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;,
0.000006;-0.000000; 1.000000;,
-0.000000;-0.000000; 1.000000;,
0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;,
0.000004;-0.000000; 1.000000;,
-0.000003; 0.000000; 1.000000;,
-0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;,
0.000000;-0.000000; 1.000000;,
-0.000000;-0.000000; 1.000000;,
0.000000; 0.000000;-1.000000;,
0.000000; 0.000000;-1.000000;;
88;
4;0,0,0,0;,
4;1,1,1,1;,
4;2,2,2,2;,
4;3,3,3,3;,
4;4,4,4,4;,
4;5,5,5,5;,
4;6,6,6,6;,
4;7,7,7,7;,
4;8,8,8,8;,
4;9,9,9,9;,
4;10,10,10,10;,
4;11,11,11,11;,
4;12,12,12,12;,
4;13,13,13,13;,
4;14,14,14,14;,
4;15,15,15,15;,
4;16,16,16,16;,
4;17,17,17,17;,
4;18,18,18,18;,
4;19,19,19,19;,
4;20,20,20,20;,
4;21,21,21,21;,
4;22,22,22,22;,
4;23,23,23,23;,
4;24,24,24,24;,
4;25,25,25,25;,
4;26,26,26,26;,
4;27,27,27,27;,
4;28,28,28,28;,
4;29,29,29,29;,
4;30,30,30,30;,
4;31,31,31,31;,
4;32,32,32,32;,
4;33,33,33,33;,
4;34,34,34,34;,
4;35,35,35,35;,
4;36,36,36,36;,
4;37,37,37,37;,
4;38,38,38,38;,
4;39,39,39,39;,
4;40,40,40,40;,
4;41,41,41,41;,
4;42,42,42,42;,
4;43,43,43,43;,
4;44,44,44,44;,
4;45,45,45,45;,
4;46,46,46,46;,
4;47,47,47,47;,
4;48,48,48,48;,
4;49,49,49,49;,
4;50,50,50,50;,
4;51,51,51,51;,
4;52,52,52,52;,
4;53,53,53,53;,
4;54,54,54,54;,
4;55,55,55,55;,
4;56,56,56,56;,
4;57,57,57,57;,
4;58,58,58,58;,
4;59,59,59,59;,
4;60,60,60,60;,
4;61,61,61,61;,
4;62,62,62,62;,
4;63,63,63,63;,
4;64,64,64,64;,
4;65,65,65,65;,
4;66,66,66,66;,
4;67,67,67,67;,
4;68,68,68,68;,
4;69,69,69,69;,
4;70,70,70,70;,
4;71,71,71,71;,
4;72,72,72,72;,
4;73,73,73,73;,
4;74,74,74,74;,
4;75,75,75,75;,
4;76,76,76,76;,
4;77,77,77,77;,
4;78,78,78,78;,
4;79,79,79,79;,
4;80,80,80,80;,
4;81,81,81,81;,
4;82,82,82,82;,
4;83,83,83,83;,
4;84,84,84,84;,
4;85,85,85,85;,
4;86,86,86,86;,
4;87,87,87,87;;
} // End of flag normals
MeshTextureCoords { // flag UV coordinates
352;
0.502372; 0.655955;,
0.502372; 0.674052;,
0.993251; 0.674052;,
0.993251; 0.655955;,
0.997751; 0.687795;,
0.997751; 0.674223;,
0.506885; 0.674221;,
0.506885; 0.687795;,
0.488799; 0.674052;,
0.488799; 0.655955;,
-0.002080; 0.655955;,
-0.002080; 0.674052;,
-0.002080; 0.674221;,
-0.002080; 0.687793;,
0.488786; 0.687795;,
0.488786; 0.674221;,
0.488786; 0.687795;,
0.506885; 0.687795;,
0.506885; 0.674221;,
0.488786; 0.674221;,
0.488799; 0.655955;,
0.488799; 0.674052;,
0.502372; 0.674052;,
0.502372; 0.655955;,
0.943902; 0.002727;,
0.908697; 0.002727;,
0.908696; 0.502611;,
0.943901; 0.502611;,
0.943902; 0.002727;,
0.943901; 0.502611;,
0.994376; 0.502611;,
0.994377; 0.002727;,
0.908697; 0.002727;,
0.873062; 0.002727;,
0.873062; 0.502611;,
0.908696; 0.502611;,
0.836204; 0.002727;,
0.796270; 0.002727;,
0.796270; 0.502611;,
0.836203; 0.502611;,
0.873062; 0.002727;,
0.836204; 0.002727;,
0.836203; 0.502611;,
0.873062; 0.502611;,
0.796270; 0.002727;,
0.755145; 0.002727;,
0.755144; 0.502611;,
0.796270; 0.502611;,
0.710581; 0.002727;,
0.664964; 0.002727;,
0.664964; 0.502611;,
0.710580; 0.502611;,
0.755145; 0.002727;,
0.710581; 0.002727;,
0.710580; 0.502611;,
0.755144; 0.502611;,
0.664964; 0.002727;,
0.617514; 0.002727;,
0.617513; 0.502611;,
0.664964; 0.502611;,
0.568531; 0.002727;,
0.518746; 0.002727;,
0.518746; 0.502611;,
0.568531; 0.502611;,
0.617514; 0.002727;,
0.568531; 0.002727;,
0.568531; 0.502611;,
0.617513; 0.502611;,
0.467125; 0.002727;,
0.414948; 0.002727;,
0.414948; 0.502611;,
0.467125; 0.502611;,
0.518746; 0.002727;,
0.467125; 0.002727;,
0.467125; 0.502611;,
0.518746; 0.502611;,
0.414948; 0.002727;,
0.361211; 0.002727;,
0.361212; 0.502611;,
0.414948; 0.502611;,
0.306230; 0.002727;,
0.249978; 0.002727;,
0.249979; 0.502611;,
0.306230; 0.502611;,
0.361211; 0.002727;,
0.306230; 0.002727;,
0.306230; 0.502611;,
0.361212; 0.502611;,
0.249978; 0.002727;,
0.191008; 0.002727;,
0.191008; 0.502611;,
0.249979; 0.502611;,
0.130973; 0.002727;,
0.066362; 0.002727;,
0.066362; 0.502611;,
0.130973; 0.502611;,
0.191008; 0.002727;,
0.130973; 0.002727;,
0.130973; 0.502611;,
0.191008; 0.502611;,
0.066362; 0.002727;,
0.000604; 0.002727;,
0.000604; 0.502611;,
0.066362; 0.502611;,
0.941264; 0.001422;,
0.941265; 0.507504;,
0.906167; 0.507504;,
0.906167; 0.001422;,
0.941264; 0.001422;,
0.991585; 0.001422;,
0.991585; 0.507504;,
0.941265; 0.507504;,
0.906167; 0.001422;,
0.906167; 0.507504;,
0.870642; 0.507504;,
0.870642; 0.001422;,
0.833896; 0.001422;,
0.833896; 0.507504;,
0.794084; 0.507504;,
0.794084; 0.001422;,
0.870642; 0.001422;,
0.870642; 0.507504;,
0.833896; 0.507504;,
0.833896; 0.001422;,
0.794084; 0.001422;,
0.794084; 0.507504;,
0.753084; 0.507504;,
0.753085; 0.001422;,
0.708657; 0.001422;,
0.708657; 0.507504;,
0.663180; 0.507504;,
0.663180; 0.001422;,
0.753085; 0.001422;,
0.753084; 0.507504;,
0.708657; 0.507504;,
0.708657; 0.001422;,
0.663180; 0.001422;,
0.663180; 0.507504;,
0.615874; 0.507504;,
0.615874; 0.001422;,
0.567042; 0.001422;,
0.567042; 0.507504;,
0.517409; 0.507504;,
0.517409; 0.001422;,
0.615874; 0.001422;,
0.615874; 0.507504;,
0.567042; 0.507504;,
0.567042; 0.001422;,
0.465946; 0.001422;,
0.465945; 0.507504;,
0.413927; 0.507504;,
0.413928; 0.001422;,
0.517409; 0.001422;,
0.517409; 0.507504;,
0.465945; 0.507504;,
0.465946; 0.001422;,
0.413928; 0.001422;,
0.413927; 0.507504;,
0.360356; 0.507504;,
0.360356; 0.001422;,
0.305542; 0.001422;,
0.305542; 0.507504;,
0.249463; 0.507504;,
0.249463; 0.001422;,
0.360356; 0.001422;,
0.360356; 0.507504;,
0.305542; 0.507504;,
0.305542; 0.001422;,
0.249463; 0.001422;,
0.249463; 0.507504;,
0.190673; 0.507504;,
0.190673; 0.001422;,
0.130821; 0.001422;,
0.130821; 0.507504;,
0.066407; 0.507504;,
0.066407; 0.001422;,
0.190673; 0.001422;,
0.190673; 0.507504;,
0.130821; 0.507504;,
0.130821; 0.001422;,
0.066407; 0.001422;,
0.066407; 0.507504;,
0.000850; 0.507504;,
0.000850; 0.001422;,
0.819613; 0.932277;,
0.721014; 0.932277;,
0.721002; 0.933997;,
0.819602; 0.933998;,
0.594108; 0.827414;,
0.581155; 0.825058;,
0.581155; 0.826243;,
0.594108; 0.828598;,
0.726607; 0.851725;,
0.709973; 0.850821;,
0.709973; 0.852006;,
0.726607; 0.852909;,
0.533037; 0.819855;,
0.544035; 0.821198;,
0.544085; 0.820014;,
0.533086; 0.818671;,
0.648599; 0.808047;,
0.663260; 0.805332;,
0.663310; 0.804148;,
0.648648; 0.806863;,
0.544883; 0.822819;,
0.533838; 0.823701;,
0.533838; 0.824886;,
0.544883; 0.824004;,
0.663341; 0.843655;,
0.648807; 0.840330;,
0.648807; 0.841514;,
0.663341; 0.844839;,
0.506347; 0.834987;,
0.494225; 0.842003;,
0.494225; 0.843187;,
0.506347; 0.836171;,
0.607391; 0.830295;,
0.594108; 0.827414;,
0.594108; 0.828598;,
0.607391; 0.831479;,
0.726809; 0.799913;,
0.744566; 0.802384;,
0.744616; 0.801200;,
0.726858; 0.798730;,
0.494225; 0.799914;,
0.506043; 0.807430;,
0.506092; 0.806247;,
0.494274; 0.798731;,
0.593408; 0.818665;,
0.606799; 0.816341;,
0.606849; 0.815158;,
0.593458; 0.817481;,
0.744451; 0.849999;,
0.726607; 0.851725;,
0.726607; 0.852909;,
0.744451; 0.851183;,
0.544035; 0.821198;,
0.555405; 0.822162;,
0.555455; 0.820979;,
0.544085; 0.820014;,
0.663260; 0.805332;,
0.678331; 0.802959;,
0.678380; 0.801775;,
0.663310; 0.804148;,
0.721002; 0.932108;,
0.819602; 0.932108;,
0.819613; 0.930387;,
0.721014; 0.930387;,
0.556284; 0.822331;,
0.544883; 0.822819;,
0.544883; 0.824004;,
0.556284; 0.823515;,
0.678299; 0.846656;,
0.663341; 0.843655;,
0.663341; 0.844839;,
0.678299; 0.847840;,
0.506043; 0.807430;,
0.514283; 0.812676;,
0.514332; 0.811493;,
0.506092; 0.806247;,
0.606799; 0.816341;,
0.620368; 0.813749;,
0.620417; 0.812566;,
0.606849; 0.815158;,
0.744566; 0.802384;,
0.762307; 0.806651;,
0.762356; 0.805467;,
0.744616; 0.801200;,
0.514799; 0.830090;,
0.506347; 0.834987;,
0.506347; 0.836171;,
0.514799; 0.831275;,
0.620839; 0.833452;,
0.607391; 0.830295;,
0.607391; 0.831479;,
0.620839; 0.834636;,
0.762354; 0.846477;,
0.744451; 0.849999;,
0.744451; 0.851183;,
0.762354; 0.847662;,
0.555405; 0.822162;,
0.567753; 0.821515;,
0.567803; 0.820332;,
0.555455; 0.820979;,
0.678331; 0.802959;,
0.693811; 0.800959;,
0.693860; 0.799776;,
0.678380; 0.801775;,
0.568595; 0.823493;,
0.556284; 0.822331;,
0.556284; 0.823515;,
0.568595; 0.824678;,
0.693681; 0.849301;,
0.678299; 0.846656;,
0.678299; 0.847840;,
0.693681; 0.850485;,
0.514283; 0.812676;,
0.523295; 0.816741;,
0.523345; 0.815558;,
0.514332; 0.811493;,
0.620368; 0.813749;,
0.634403; 0.810889;,
0.634452; 0.809705;,
0.620417; 0.812566;,
0.523974; 0.826405;,
0.514799; 0.830090;,
0.514799; 0.831275;,
0.523974; 0.827589;,
0.634742; 0.836896;,
0.620839; 0.833452;,
0.620839; 0.834636;,
0.634742; 0.838081;,
0.567753; 0.821515;,
0.580368; 0.820477;,
0.580417; 0.819293;,
0.567803; 0.820332;,
0.693811; 0.800959;,
0.710152; 0.800121;,
0.710202; 0.798937;,
0.693860; 0.799776;,
0.581155; 0.825058;,
0.568595; 0.823493;,
0.568595; 0.824678;,
0.581155; 0.826243;,
0.709973; 0.850821;,
0.693681; 0.849301;,
0.693681; 0.850485;,
0.709973; 0.852006;,
0.523295; 0.816741;,
0.533037; 0.819855;,
0.533086; 0.818671;,
0.523345; 0.815558;,
0.634403; 0.810889;,
0.648599; 0.808047;,
0.648648; 0.806863;,
0.634452; 0.809705;,
0.533838; 0.823701;,
0.523974; 0.826405;,
0.523974; 0.827589;,
0.533838; 0.824886;,
0.648807; 0.840330;,
0.634742; 0.836896;,
0.634742; 0.838081;,
0.648807; 0.841514;,
0.580368; 0.820477;,
0.593408; 0.818665;,
0.593458; 0.817481;,
0.580417; 0.819293;,
0.710152; 0.800121;,
0.726809; 0.799913;,
0.726858; 0.798730;,
0.710202; 0.798937;;
} // End of flag UV coordinates
} // End of flag mesh
} // End of flag
} // End of Root

View File

@ -1,222 +0,0 @@
# Blender 4.4.3
# www.blender.org
mtllib flag_support.mtl
o Plane
v -0.510405 -0.503108 -0.514181
v -0.510405 -0.503108 0.512251
v 0.516028 -0.503108 -0.514180
v 0.516027 -0.503108 0.512252
v -0.504090 -0.492843 -0.464318
v -0.070070 0.051166 -0.030298
v -0.460542 -0.492843 -0.507866
v -0.026523 0.051166 -0.073846
v -0.460542 -0.492843 -0.420770
v -0.067580 -0.000156 -0.027808
v -0.416994 -0.492843 -0.464318
v -0.024032 -0.000156 -0.071356
v 0.466165 -0.492844 -0.507866
v 0.032146 0.051166 -0.073846
v 0.509713 -0.492844 -0.464318
v 0.075693 0.051166 -0.030298
v 0.422617 -0.492843 -0.464318
v 0.029655 -0.000156 -0.071356
v 0.466165 -0.492843 -0.420770
v 0.073203 -0.000156 -0.027808
v 0.466165 -0.492844 0.505937
v 0.032146 0.051166 0.071917
v 0.509713 -0.492844 0.462389
v 0.075693 0.051166 0.028370
v 0.422617 -0.492844 0.462389
v 0.029655 -0.000156 0.069427
v 0.466165 -0.492844 0.418841
v 0.073203 -0.000156 0.025879
v -0.504090 -0.492844 0.462389
v -0.070070 0.051166 0.028370
v -0.460542 -0.492844 0.505937
v -0.026523 0.051166 0.071917
v -0.460542 -0.492844 0.418841
v -0.067580 -0.000156 0.025879
v -0.416994 -0.492844 0.462389
v -0.024032 -0.000156 0.069427
v -0.510405 -0.489509 -0.514181
v -0.510405 -0.489509 0.512251
v 0.516028 -0.489509 -0.514180
v 0.516027 -0.489510 0.512252
v -0.076859 -0.049034 -0.080635
v -0.076859 0.110308 -0.080635
v 0.082482 -0.049034 -0.080635
v 0.082482 0.110308 -0.080635
v -0.076859 -0.049034 0.078706
v -0.076859 0.110308 0.078706
v 0.082482 -0.049034 0.078706
v 0.082482 0.110308 0.078706
v 0.049677 0.077502 0.045901
v 0.049677 -0.016228 0.045901
v -0.044054 0.077502 0.045901
v -0.044054 -0.016228 0.045901
v 0.049677 0.077502 -0.047830
v 0.049677 -0.016228 -0.047830
v -0.044054 0.077502 -0.047830
v -0.044054 -0.016228 -0.047830
vn -0.0000 -1.0000 -0.0000
vn -0.4690 0.7484 -0.4690
vn 0.7071 -0.0000 -0.7071
vn 0.4691 -0.7483 0.4691
vn -0.7071 -0.0000 0.7071
vn -0.0000 1.0000 -0.0000
vn 0.4690 0.7484 -0.4690
vn 0.7071 -0.0000 0.7071
vn -0.4691 -0.7483 0.4691
vn -0.7071 -0.0000 -0.7071
vn -0.7054 -0.0685 0.7054
vn -0.7054 0.0685 0.7054
vn -0.4690 -0.7484 -0.4690
vn 0.4691 0.7483 0.4691
vn 0.4690 -0.7484 -0.4690
vn -0.4691 0.7483 0.4691
vn 0.7054 -0.0685 0.7054
vn 0.7054 0.0685 0.7054
vn -0.0000 -0.0000 1.0000
vn -0.0000 -0.0000 -1.0000
vn 1.0000 -0.0000 -0.0000
vn -1.0000 -0.0000 -0.0000
vn -0.0000 0.7071 -0.7071
vn 0.7071 -0.7071 -0.0000
vn 0.7071 0.7071 -0.0000
vn -0.0000 -0.7071 0.7071
vn -0.0000 0.7071 0.7071
vn -0.7071 -0.7071 -0.0000
vn -0.7071 0.7071 -0.0000
vn -0.0000 -0.7071 -0.7071
vt 0.000222 0.512504
vt 0.502631 0.512769
vt 0.502631 0.000487
vt 0.000222 0.000222
vt 0.702700 0.891477
vt 0.672991 0.891474
vt 0.673030 0.495818
vt 0.702740 0.495821
vt 0.653338 0.876322
vt 0.653323 0.518049
vt 0.623629 0.876323
vt 0.623614 0.518051
vt 0.603976 0.891476
vt 0.603904 0.495820
vt 0.901297 0.495821
vt 0.881587 0.518051
vt 0.851878 0.518050
vt 0.832170 0.495818
vt 0.573751 0.495818
vt 0.554044 0.518049
vt 0.524335 0.518051
vt 0.504625 0.495820
vt 0.603422 0.891477
vt 0.573712 0.891474
vt 0.603461 0.495821
vt 0.554059 0.876322
vt 0.524350 0.876323
vt 0.504698 0.891477
vt 0.832209 0.891475
vt 0.851862 0.876323
vt 0.881572 0.876325
vt 0.901224 0.891478
vt 0.732932 0.891475
vt 0.703222 0.891478
vt 0.703183 0.495821
vt 0.732893 0.495818
vt 0.801946 0.891478
vt 0.782294 0.876324
vt 0.782309 0.518051
vt 0.802019 0.495821
vt 0.752585 0.876323
vt 0.752600 0.518049
vt 0.802499 0.891478
vt 0.802462 0.495821
vt 0.504625 0.495375
vt 0.504625 0.000222
vt 0.999778 0.000222
vt 0.999778 0.495375
vt 0.491425 0.502422
vt 0.493275 0.010540
vt 0.011428 0.010569
vt 0.009578 0.502451
vt 0.385267 0.676942
vt 0.386630 0.634786
vt 0.407898 0.611579
vt 0.408626 0.698179
vt 0.097215 0.567693
vt 0.121209 0.606692
vt 0.107780 0.622610
vt 0.069514 0.565919
vt 0.344547 0.632816
vt 0.321185 0.611578
vt 0.203667 0.606458
vt 0.235584 0.565919
vt 0.270917 0.571097
vt 0.215623 0.628725
vt 0.343185 0.674971
vt 0.321920 0.698178
vt 0.160922 0.618835
vt 0.158674 0.640991
vt 0.320742 0.641329
vt 0.250510 0.691154
vt 0.164187 0.714990
vt 0.074379 0.693986
vt 0.000222 0.631238
vt 0.366401 0.565919
vt 0.366401 0.611135
vt 0.321185 0.611135
vt 0.321185 0.565919
vt 0.411617 0.565919
vt 0.411617 0.611135
vt 0.456832 0.565919
vt 0.456832 0.611135
vt 0.502048 0.565919
vt 0.502048 0.611135
s 0
f 3/1/1 4/2/1 2/3/1 1/4/1
f 6/5/2 8/6/2 7/7/2 5/8/2
f 8/6/3 12/9/3 11/10/3 7/7/3
f 12/9/4 10/11/4 9/12/4 11/10/4
f 10/11/5 6/13/5 5/14/5 9/12/5
f 31/15/6 35/16/6 33/17/6 29/18/6
f 15/19/1 19/20/1 17/21/1 13/22/1
f 14/23/7 16/24/7 15/19/7 13/25/7
f 16/24/8 20/26/8 19/20/8 15/19/8
f 20/26/9 18/27/9 17/21/9 19/20/9
f 18/27/10 14/28/10 13/22/10 17/21/10
f 30/29/11 34/30/11 36/31/11 32/32/11
f 14/28/12 18/27/12 20/26/12 16/24/12
f 22/33/13 24/34/13 23/35/13 21/36/13
f 24/37/5 28/38/5 27/39/5 23/40/5
f 28/38/14 26/41/14 25/42/14 27/39/14
f 26/41/3 22/33/3 21/36/3 25/42/3
f 23/40/6 27/39/6 25/42/6 21/36/6
f 7/7/1 11/10/1 9/12/1 5/14/1
f 30/29/15 32/43/15 31/44/15 29/18/15
f 32/32/10 36/31/10 35/16/10 31/15/10
f 36/31/16 34/30/16 33/17/16 35/16/16
f 34/30/8 30/29/8 29/18/8 33/17/8
f 22/33/17 26/41/17 28/38/17 24/37/17
f 6/13/18 10/11/18 12/9/18 8/6/18
f 37/45/6 38/46/6 40/47/6 39/48/6
f 2/3/19 4/2/19 40/49/19 38/50/19
f 3/1/20 1/4/20 37/51/20 39/52/20
f 4/2/21 3/1/21 39/52/21 40/49/21
f 1/4/22 2/3/22 38/50/22 37/51/22
f 49/53/23 51/54/23 46/55/23 48/56/23
f 56/57/24 52/58/24 45/59/24 41/60/24
f 51/54/25 55/61/25 42/62/25 46/55/25
f 54/63/26 56/64/26 41/65/26 43/66/26
f 55/61/27 53/67/27 44/68/27 42/62/27
f 50/69/28 54/63/28 43/66/28 47/70/28
f 53/67/29 49/53/29 48/56/29 44/68/29
f 52/58/30 50/69/30 47/70/30 45/59/30
f 42/71/20 44/72/20 43/66/20 41/65/20
f 44/72/21 48/73/21 47/70/21 43/66/21
f 48/73/19 46/74/19 45/59/19 47/70/19
f 46/74/22 42/75/22 41/60/22 45/59/22
f 51/76/21 52/77/21 56/78/21 55/79/21
f 49/80/20 50/81/20 52/77/20 51/76/20
f 53/82/22 54/83/22 50/81/22 49/80/22
f 55/84/19 56/85/19 54/83/19 53/82/19

535
models/banner_support.x Normal file
View File

@ -0,0 +1,535 @@
xof 0303txt 0032
Frame Root {
FrameTransformMatrix {
1.000000, 0.000000, 0.000000, 0.000000,
0.000000,-0.000000, 1.000000, 0.000000,
0.000000, 1.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.000000, 1.000000;;
}
Frame Plane {
FrameTransformMatrix {
5.000000, 0.000000, 0.000000, 0.000000,
0.000000, 5.000000, 0.000000, 0.000000,
0.000000, 0.000000, 5.000000, 0.000000,
0.000000, 0.000000, 0.000000, 1.000000;;
}
Mesh { // Plane mesh
184;
0.516028;-0.503108;-0.514180;,
0.516027;-0.503108; 0.512252;,
-0.510405;-0.503108; 0.512251;,
-0.510405;-0.503108;-0.514181;,
-0.070070; 0.051166;-0.030298;,
-0.026523; 0.051166;-0.073846;,
-0.460542;-0.492843;-0.507866;,
-0.504090;-0.492843;-0.464318;,
-0.026523; 0.051166;-0.073846;,
-0.024032;-0.000156;-0.071356;,
-0.416994;-0.492843;-0.464318;,
-0.460542;-0.492843;-0.507866;,
-0.024032;-0.000156;-0.071356;,
-0.067580;-0.000156;-0.027808;,
-0.460542;-0.492843;-0.420770;,
-0.416994;-0.492843;-0.464318;,
-0.067580;-0.000156;-0.027808;,
-0.070070; 0.051166;-0.030298;,
-0.504090;-0.492843;-0.464318;,
-0.460542;-0.492843;-0.420770;,
-0.460542;-0.492844; 0.505937;,
-0.416994;-0.492844; 0.462389;,
-0.460542;-0.492844; 0.418841;,
-0.504090;-0.492844; 0.462389;,
0.509713;-0.492844;-0.464318;,
0.466165;-0.492843;-0.420770;,
0.422617;-0.492843;-0.464318;,
0.466165;-0.492844;-0.507866;,
0.032146; 0.051166;-0.073846;,
0.075693; 0.051166;-0.030298;,
0.509713;-0.492844;-0.464318;,
0.466165;-0.492844;-0.507866;,
0.075693; 0.051166;-0.030298;,
0.073203;-0.000156;-0.027808;,
0.466165;-0.492843;-0.420770;,
0.509713;-0.492844;-0.464318;,
0.073203;-0.000156;-0.027808;,
0.029655;-0.000156;-0.071356;,
0.422617;-0.492843;-0.464318;,
0.466165;-0.492843;-0.420770;,
0.029655;-0.000156;-0.071356;,
0.032146; 0.051166;-0.073846;,
0.466165;-0.492844;-0.507866;,
0.422617;-0.492843;-0.464318;,
-0.070070; 0.051166; 0.028370;,
-0.067580;-0.000156; 0.025879;,
-0.024032;-0.000156; 0.069427;,
-0.026523; 0.051166; 0.071917;,
0.032146; 0.051166;-0.073846;,
0.029655;-0.000156;-0.071356;,
0.073203;-0.000156;-0.027808;,
0.075693; 0.051166;-0.030298;,
0.032146; 0.051166; 0.071917;,
0.075693; 0.051166; 0.028370;,
0.509713;-0.492844; 0.462389;,
0.466165;-0.492844; 0.505937;,
0.075693; 0.051166; 0.028370;,
0.073203;-0.000156; 0.025879;,
0.466165;-0.492844; 0.418841;,
0.509713;-0.492844; 0.462389;,
0.073203;-0.000156; 0.025879;,
0.029655;-0.000156; 0.069427;,
0.422617;-0.492844; 0.462389;,
0.466165;-0.492844; 0.418841;,
0.029655;-0.000156; 0.069427;,
0.032146; 0.051166; 0.071917;,
0.466165;-0.492844; 0.505937;,
0.422617;-0.492844; 0.462389;,
0.509713;-0.492844; 0.462389;,
0.466165;-0.492844; 0.418841;,
0.422617;-0.492844; 0.462389;,
0.466165;-0.492844; 0.505937;,
-0.460542;-0.492843;-0.507866;,
-0.416994;-0.492843;-0.464318;,
-0.460542;-0.492843;-0.420770;,
-0.504090;-0.492843;-0.464318;,
-0.070070; 0.051166; 0.028370;,
-0.026523; 0.051166; 0.071917;,
-0.460542;-0.492844; 0.505937;,
-0.504090;-0.492844; 0.462389;,
-0.026523; 0.051166; 0.071917;,
-0.024032;-0.000156; 0.069427;,
-0.416994;-0.492844; 0.462389;,
-0.460542;-0.492844; 0.505937;,
-0.024032;-0.000156; 0.069427;,
-0.067580;-0.000156; 0.025879;,
-0.460542;-0.492844; 0.418841;,
-0.416994;-0.492844; 0.462389;,
-0.067580;-0.000156; 0.025879;,
-0.070070; 0.051166; 0.028370;,
-0.504090;-0.492844; 0.462389;,
-0.460542;-0.492844; 0.418841;,
0.032146; 0.051166; 0.071917;,
0.029655;-0.000156; 0.069427;,
0.073203;-0.000156; 0.025879;,
0.075693; 0.051166; 0.028370;,
-0.070070; 0.051166;-0.030298;,
-0.067580;-0.000156;-0.027808;,
-0.024032;-0.000156;-0.071356;,
-0.026523; 0.051166;-0.073846;,
-0.510405;-0.489509;-0.514181;,
-0.510405;-0.489509; 0.512251;,
0.516027;-0.489510; 0.512252;,
0.516028;-0.489509;-0.514180;,
-0.510405;-0.503108; 0.512251;,
0.516027;-0.503108; 0.512252;,
0.516027;-0.489510; 0.512252;,
-0.510405;-0.489509; 0.512251;,
0.516028;-0.503108;-0.514180;,
-0.510405;-0.503108;-0.514181;,
-0.510405;-0.489509;-0.514181;,
0.516028;-0.489509;-0.514180;,
0.516027;-0.503108; 0.512252;,
0.516028;-0.503108;-0.514180;,
0.516028;-0.489509;-0.514180;,
0.516027;-0.489510; 0.512252;,
-0.510405;-0.503108;-0.514181;,
-0.510405;-0.503108; 0.512251;,
-0.510405;-0.489509; 0.512251;,
-0.510405;-0.489509;-0.514181;,
0.049677; 0.077502; 0.045901;,
-0.044054; 0.077502; 0.045901;,
-0.076859; 0.110308; 0.078706;,
0.082482; 0.110308; 0.078706;,
-0.044054;-0.016228;-0.047830;,
-0.044054;-0.016228; 0.045901;,
-0.076859;-0.049034; 0.078706;,
-0.076859;-0.049034;-0.080635;,
-0.044054; 0.077502; 0.045901;,
-0.044054; 0.077502;-0.047830;,
-0.076859; 0.110308;-0.080635;,
-0.076859; 0.110308; 0.078706;,
0.049677;-0.016228;-0.047830;,
-0.044054;-0.016228;-0.047830;,
-0.076859;-0.049034;-0.080635;,
0.082482;-0.049034;-0.080635;,
-0.044054; 0.077502;-0.047830;,
0.049677; 0.077502;-0.047830;,
0.082482; 0.110308;-0.080635;,
-0.076859; 0.110308;-0.080635;,
0.049677;-0.016228; 0.045901;,
0.049677;-0.016228;-0.047830;,
0.082482;-0.049034;-0.080635;,
0.082482;-0.049034; 0.078706;,
0.049677; 0.077502;-0.047830;,
0.049677; 0.077502; 0.045901;,
0.082482; 0.110308; 0.078706;,
0.082482; 0.110308;-0.080635;,
-0.044054;-0.016228; 0.045901;,
0.049677;-0.016228; 0.045901;,
0.082482;-0.049034; 0.078706;,
-0.076859;-0.049034; 0.078706;,
-0.076859; 0.110308;-0.080635;,
0.082482; 0.110308;-0.080635;,
0.082482;-0.049034;-0.080635;,
-0.076859;-0.049034;-0.080635;,
0.082482; 0.110308;-0.080635;,
0.082482; 0.110308; 0.078706;,
0.082482;-0.049034; 0.078706;,
0.082482;-0.049034;-0.080635;,
0.082482; 0.110308; 0.078706;,
-0.076859; 0.110308; 0.078706;,
-0.076859;-0.049034; 0.078706;,
0.082482;-0.049034; 0.078706;,
-0.076859; 0.110308; 0.078706;,
-0.076859; 0.110308;-0.080635;,
-0.076859;-0.049034;-0.080635;,
-0.076859;-0.049034; 0.078706;,
-0.044054; 0.077502; 0.045901;,
-0.044054;-0.016228; 0.045901;,
-0.044054;-0.016228;-0.047830;,
-0.044054; 0.077502;-0.047830;,
0.049677; 0.077502; 0.045901;,
0.049677;-0.016228; 0.045901;,
-0.044054;-0.016228; 0.045901;,
-0.044054; 0.077502; 0.045901;,
0.049677; 0.077502;-0.047830;,
0.049677;-0.016228;-0.047830;,
0.049677;-0.016228; 0.045901;,
0.049677; 0.077502; 0.045901;,
-0.044054; 0.077502;-0.047830;,
-0.044054;-0.016228;-0.047830;,
0.049677;-0.016228;-0.047830;,
0.049677; 0.077502;-0.047830;;
46;
4;3,2,1,0;,
4;7,6,5,4;,
4;11,10,9,8;,
4;15,14,13,12;,
4;19,18,17,16;,
4;23,22,21,20;,
4;27,26,25,24;,
4;31,30,29,28;,
4;35,34,33,32;,
4;39,38,37,36;,
4;43,42,41,40;,
4;47,46,45,44;,
4;51,50,49,48;,
4;55,54,53,52;,
4;59,58,57,56;,
4;63,62,61,60;,
4;67,66,65,64;,
4;71,70,69,68;,
4;75,74,73,72;,
4;79,78,77,76;,
4;83,82,81,80;,
4;87,86,85,84;,
4;91,90,89,88;,
4;95,94,93,92;,
4;99,98,97,96;,
4;103,102,101,100;,
4;107,106,105,104;,
4;111,110,109,108;,
4;115,114,113,112;,
4;119,118,117,116;,
4;123,122,121,120;,
4;127,126,125,124;,
4;131,130,129,128;,
4;135,134,133,132;,
4;139,138,137,136;,
4;143,142,141,140;,
4;147,146,145,144;,
4;151,150,149,148;,
4;155,154,153,152;,
4;159,158,157,156;,
4;163,162,161,160;,
4;167,166,165,164;,
4;171,170,169,168;,
4;175,174,173,172;,
4;179,178,177,176;,
4;183,182,181,180;;
MeshNormals { // Plane normals
46;
-0.000000;-1.000000;-0.000000;,
-0.469011; 0.748370;-0.469012;,
0.707107; 0.000000;-0.707107;,
0.469086;-0.748276; 0.469086;,
-0.707107;-0.000000; 0.707107;,
0.000000; 1.000000; 0.000000;,
-0.000001;-1.000000; 0.000001;,
0.469011; 0.748370;-0.469011;,
0.707107;-0.000000; 0.707107;,
-0.469086;-0.748276; 0.469086;,
-0.707107;-0.000001;-0.707106;,
-0.705447;-0.068468; 0.705448;,
-0.705448; 0.068468; 0.705447;,
-0.469011;-0.748369;-0.469011;,
-0.707106; 0.000001; 0.707107;,
0.469086; 0.748276; 0.469086;,
0.707107; 0.000001;-0.707106;,
-0.000000; 1.000000; 0.000000;,
0.000000;-1.000000; 0.000000;,
0.469011;-0.748370;-0.469012;,
-0.707107;-0.000000;-0.707107;,
-0.469086; 0.748276; 0.469086;,
0.707106; 0.000001; 0.707107;,
0.705448;-0.068468; 0.705447;,
0.705447; 0.068468; 0.705448;,
0.000000; 1.000000; 0.000000;,
-0.000000; 0.000000; 1.000000;,
0.000000; 0.000000;-1.000000;,
1.000000; 0.000000; 0.000000;,
-1.000000; 0.000000;-0.000000;,
0.000000; 0.707106;-0.707108;,
0.707107;-0.707106; 0.000000;,
0.707108; 0.707106; 0.000000;,
-0.000000;-0.707106; 0.707107;,
-0.000000; 0.707106; 0.707108;,
-0.707107;-0.707106;-0.000000;,
-0.707108; 0.707105;-0.000000;,
0.000000;-0.707106;-0.707107;,
0.000000; 0.000000;-1.000000;,
1.000000; 0.000000; 0.000000;,
0.000000;-0.000000; 1.000000;,
-1.000000; 0.000000;-0.000000;,
1.000000;-0.000000; 0.000000;,
0.000000; 0.000000;-1.000000;,
-1.000000; 0.000000;-0.000000;,
-0.000000; 0.000000; 1.000000;;
46;
4;0,0,0,0;,
4;1,1,1,1;,
4;2,2,2,2;,
4;3,3,3,3;,
4;4,4,4,4;,
4;5,5,5,5;,
4;6,6,6,6;,
4;7,7,7,7;,
4;8,8,8,8;,
4;9,9,9,9;,
4;10,10,10,10;,
4;11,11,11,11;,
4;12,12,12,12;,
4;13,13,13,13;,
4;14,14,14,14;,
4;15,15,15,15;,
4;16,16,16,16;,
4;17,17,17,17;,
4;18,18,18,18;,
4;19,19,19,19;,
4;20,20,20,20;,
4;21,21,21,21;,
4;22,22,22,22;,
4;23,23,23,23;,
4;24,24,24,24;,
4;25,25,25,25;,
4;26,26,26,26;,
4;27,27,27,27;,
4;28,28,28,28;,
4;29,29,29,29;,
4;30,30,30,30;,
4;31,31,31,31;,
4;32,32,32,32;,
4;33,33,33,33;,
4;34,34,34,34;,
4;35,35,35,35;,
4;36,36,36,36;,
4;37,37,37,37;,
4;38,38,38,38;,
4;39,39,39,39;,
4;40,40,40,40;,
4;41,41,41,41;,
4;42,42,42,42;,
4;43,43,43,43;,
4;44,44,44,44;,
4;45,45,45,45;;
} // End of Plane normals
MeshTextureCoords { // Plane UV coordinates
184;
0.000222; 0.487496;,
0.502631; 0.487231;,
0.502631; 0.999513;,
0.000222; 0.999778;,
0.702700; 0.108523;,
0.672991; 0.108526;,
0.673030; 0.504182;,
0.702740; 0.504179;,
0.672991; 0.108526;,
0.653338; 0.123678;,
0.653323; 0.481951;,
0.673030; 0.504182;,
0.653338; 0.123678;,
0.623629; 0.123677;,
0.623614; 0.481949;,
0.653323; 0.481951;,
0.623629; 0.123677;,
0.603976; 0.108524;,
0.603904; 0.504180;,
0.623614; 0.481949;,
0.901297; 0.504179;,
0.881587; 0.481949;,
0.851878; 0.481950;,
0.832170; 0.504182;,
0.573751; 0.504182;,
0.554044; 0.481951;,
0.524335; 0.481949;,
0.504625; 0.504180;,
0.603422; 0.108523;,
0.573712; 0.108526;,
0.573751; 0.504182;,
0.603461; 0.504179;,
0.573712; 0.108526;,
0.554059; 0.123678;,
0.554044; 0.481951;,
0.573751; 0.504182;,
0.554059; 0.123678;,
0.524350; 0.123677;,
0.524335; 0.481949;,
0.554044; 0.481951;,
0.524350; 0.123677;,
0.504698; 0.108523;,
0.504625; 0.504180;,
0.524335; 0.481949;,
0.832209; 0.108525;,
0.851862; 0.123677;,
0.881572; 0.123675;,
0.901224; 0.108522;,
0.504698; 0.108523;,
0.524350; 0.123677;,
0.554059; 0.123678;,
0.573712; 0.108526;,
0.732932; 0.108525;,
0.703222; 0.108522;,
0.703183; 0.504179;,
0.732893; 0.504182;,
0.801946; 0.108522;,
0.782294; 0.123676;,
0.782309; 0.481949;,
0.802019; 0.504179;,
0.782294; 0.123676;,
0.752585; 0.123677;,
0.752600; 0.481951;,
0.782309; 0.481949;,
0.752585; 0.123677;,
0.732932; 0.108525;,
0.732893; 0.504182;,
0.752600; 0.481951;,
0.802019; 0.504179;,
0.782309; 0.481949;,
0.752600; 0.481951;,
0.732893; 0.504182;,
0.673030; 0.504182;,
0.653323; 0.481951;,
0.623614; 0.481949;,
0.603904; 0.504180;,
0.832209; 0.108525;,
0.802499; 0.108522;,
0.802462; 0.504179;,
0.832170; 0.504182;,
0.901224; 0.108522;,
0.881572; 0.123675;,
0.881587; 0.481949;,
0.901297; 0.504179;,
0.881572; 0.123675;,
0.851862; 0.123677;,
0.851878; 0.481950;,
0.881587; 0.481949;,
0.851862; 0.123677;,
0.832209; 0.108525;,
0.832170; 0.504182;,
0.851878; 0.481950;,
0.732932; 0.108525;,
0.752585; 0.123677;,
0.782294; 0.123676;,
0.801946; 0.108522;,
0.603976; 0.108524;,
0.623629; 0.123677;,
0.653338; 0.123678;,
0.672991; 0.108526;,
0.504625; 0.504625;,
0.504625; 0.999778;,
0.999778; 0.999778;,
0.999778; 0.504625;,
0.502631; 0.999513;,
0.502631; 0.487231;,
0.491425; 0.497578;,
0.493275; 0.989460;,
0.000222; 0.487496;,
0.000222; 0.999778;,
0.011428; 0.989431;,
0.009578; 0.497549;,
0.502631; 0.487231;,
0.000222; 0.487496;,
0.009578; 0.497549;,
0.491425; 0.497578;,
0.000222; 0.999778;,
0.502631; 0.999513;,
0.493275; 0.989460;,
0.011428; 0.989431;,
0.385267; 0.323058;,
0.386630; 0.365214;,
0.407898; 0.388421;,
0.408626; 0.301821;,
0.097215; 0.432307;,
0.121209; 0.393308;,
0.107780; 0.377390;,
0.069514; 0.434081;,
0.386630; 0.365214;,
0.344547; 0.367184;,
0.321185; 0.388422;,
0.407898; 0.388421;,
0.203667; 0.393542;,
0.235584; 0.434081;,
0.270917; 0.428903;,
0.215623; 0.371275;,
0.344547; 0.367184;,
0.343185; 0.325029;,
0.321920; 0.301822;,
0.321185; 0.388422;,
0.160922; 0.381165;,
0.203667; 0.393542;,
0.215623; 0.371275;,
0.158674; 0.359009;,
0.343185; 0.325029;,
0.385267; 0.323058;,
0.408626; 0.301821;,
0.321920; 0.301822;,
0.121209; 0.393308;,
0.160922; 0.381165;,
0.158674; 0.359009;,
0.107780; 0.377390;,
0.320742; 0.358671;,
0.250510; 0.308846;,
0.215623; 0.371275;,
0.270917; 0.428903;,
0.250510; 0.308846;,
0.164187; 0.285010;,
0.158674; 0.359009;,
0.215623; 0.371275;,
0.164187; 0.285010;,
0.074379; 0.306014;,
0.107780; 0.377390;,
0.158674; 0.359009;,
0.074379; 0.306014;,
0.000222; 0.368762;,
0.069514; 0.434081;,
0.107780; 0.377390;,
0.366401; 0.434081;,
0.366401; 0.388865;,
0.321185; 0.388865;,
0.321185; 0.434081;,
0.411617; 0.434081;,
0.411617; 0.388865;,
0.366401; 0.388865;,
0.366401; 0.434081;,
0.456832; 0.434081;,
0.456832; 0.388865;,
0.411617; 0.388865;,
0.411617; 0.434081;,
0.502048; 0.434081;,
0.502048; 0.388865;,
0.456832; 0.388865;,
0.456832; 0.434081;;
} // End of Plane UV coordinates
} // End of Plane mesh
} // End of Plane
} // End of Root

View File

@ -1,38 +1,55 @@
-- da wooden banner -- da wooden banner
core.register_node("banners:wooden_banner", { minetest.register_node("banners:wooden_banner",
{
drawtype = "mesh", drawtype = "mesh",
mesh = "banner_support.obj", mesh = "banner_support.x",
tiles = { "banner_support.png" }, tiles = {"banner_support.png"},
description = "Wooden banner", description = "Wooden banner",
groups = { choppy = 2, dig_immediate = 2 }, groups = {choppy=2, dig_immediate=2},
is_ground_content = false,
diggable = true, diggable = true,
stack_max = 1, stack_max = 1,
paramtype = "light", paramtype="light",
paramtype2 = "facedir", paramtype2="facedir",
after_place_node = banners.banner_after_place, after_place_node = function (pos, player, itemstack, pointed_thing)
on_destruct = banners.banner_on_destruct, banners.banner_after_place(pos, player, itemstack, pointed_thing)
on_use = banners.banner_on_use, end,
on_dig = banners.banner_on_dig, on_destruct = function(pos)
on_movenode = banners.banner_on_movenode, banners.banner_on_destruct(pos)
}) end,
on_use = function(i, p, pt)
banners.banner_on_use(i, p, pt)
end,
on_dig = function(pos, n, p)
banners.banner_on_dig(pos, n, p)
end
}
)
-- steel banner -- steel banner
core.register_node("banners:steel_banner", { minetest.register_node("banners:steel_banner",
{
drawtype = "mesh", drawtype = "mesh",
mesh = "banner_support.obj", mesh = "banner_support.x",
tiles = { "steel_support.png" }, tiles = {"steel_support.png"},
description = "Steel banner", description = "Steel banner",
groups = { cracky = 2 }, groups = {cracky=2},
is_ground_content = false,
diggable = true, diggable = true,
stack_max = 1, stack_max = 1,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
after_place_node = banners.banner_after_place, after_place_node = function (pos, player, itemstack, pointed_thing)
on_destruct = banners.banner_on_destruct, banners.banner_after_place(pos, player, itemstack, pointed_thing)
on_use = banners.banner_on_use, end,
on_dig = banners.banner_on_dig, on_destruct = function(pos)
on_movenode = banners.banner_on_movenode, banners.banner_on_destruct(pos)
}) end,
on_use = function(i, p, pt)
banners.banner_on_use(i, p, pt)
end,
on_dig = function(pos, n, p)
banners.banner_on_dig(pos, n, p)
end
}
)

View File

@ -4,9 +4,6 @@
-- by Rubenwardy -- by Rubenwardy
--------------------------- ---------------------------
local has_inventory_plus = core.get_modpath("inventory_plus") and true or false
local has_unified_inventory = core.get_modpath("unified_inventory") and true or false
smartfs = { smartfs = {
_fdef = {}, _fdef = {},
_edef = {}, _edef = {},
@ -15,14 +12,14 @@ smartfs = {
} }
-- the smartfs() function -- the smartfs() function
function smartfs.__call(_, name) function smartfs.__call(self, name)
return smartfs._fdef[name] return smartfs._fdef[name]
end end
-- Register forms and elements -- Register forms and elements
function smartfs.create(name, onload) function smartfs.create(name,onload)
if smartfs._fdef[name] then if smartfs._fdef[name] then
error("SmartFS - (Error) Form " .. name .. " already exists!") error("SmartFS - (Error) Form "..name.." already exists!")
end end
if smartfs.loaded and not smartfs._loaded_override then if smartfs.loaded and not smartfs._loaded_override then
error("SmartFS - (Error) Forms should be declared while the game loads.") error("SmartFS - (Error) Forms should be declared while the game loads.")
@ -40,57 +37,56 @@ function smartfs.override_load_checks()
smartfs._loaded_override = true smartfs._loaded_override = true
end end
core.after(0, function() minetest.after(0, function()
smartfs.loaded = true smartfs.loaded = true
end) end)
function smartfs.dynamic(name, player) function smartfs.dynamic(name,player)
if not smartfs._dynamic_warned then if not smartfs._dynamic_warned then
smartfs._dynamic_warned = true smartfs._dynamic_warned = true
print("SmartFS - (Warning) On the fly forms are being used. May cause bad things to happen") print("SmartFS - (Warning) On the fly forms are being used. May cause bad things to happen")
end end
local state = smartfs._makeState_({ name = name }, player, nil, false) local state = smartfs._makeState_({name=name},player,nil,false)
state.show = state._show_ state.show = state._show_
smartfs.opened[player] = state smartfs.opened[player] = state
return state return state
end end
function smartfs.element(name, data) function smartfs.element(name,data)
if smartfs._edef[name] then if smartfs._edef[name] then
error("SmartFS - (Error) Element type " .. name .. " already exists!") error("SmartFS - (Error) Element type "..name.." already exists!")
end end
smartfs._edef[name] = data smartfs._edef[name] = data
return smartfs._edef[name] return smartfs._edef[name]
end end
function smartfs.inventory_mod() function smartfs.inventory_mod()
if has_unified_inventory then if unified_inventory then
return "unified_inventory" return "unified_inventory"
elseif has_inventory_plus then elseif inventory_plus then
return "inventory_plus" return "inventory_plus"
else else
return nil return nil
end end
end end
function smartfs.add_to_inventory(form, icon, title) function smartfs.add_to_inventory(form,icon,title)
if has_unified_inventory then if unified_inventory then
unified_inventory.register_button(form.name, { unified_inventory.register_button(form.name, {
type = "image", type = "image",
image = icon, image = icon,
}) })
unified_inventory.register_page(form.name, { unified_inventory.register_page(form.name, {
-- (player, formspec) get_formspec = function(player, formspec)
get_formspec = function(player)
local name = player:get_player_name() local name = player:get_player_name()
local opened = smartfs._show_(form, name, nil, true) local opened = smartfs._show_(form, name, nil, true)
return { formspec = opened:_getFS_(false) } return {formspec = opened:_getFS_(false)}
end end
}) })
return true return true
elseif has_inventory_plus then elseif inventory_plus then
core.register_on_joinplayer(function(player) minetest.register_on_joinplayer(function(player)
inventory_plus.register_button(player, form.name, title) inventory_plus.register_button(player, form.name, title)
end) end)
core.register_on_player_receive_fields(function(player, formname, fields) minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname == "" and fields[form.name] then if formname == "" and fields[form.name] then
local name = player:get_player_name() local name = player:get_player_name()
local opened = smartfs._show_(form, name, nil, true) local opened = smartfs._show_(form, name, nil, true)
@ -103,7 +99,7 @@ function smartfs.add_to_inventory(form, icon, title)
end end
end end
function smartfs._makeState_(form, player, params, is_inv) function smartfs._makeState_(form,player,params,is_inv)
return { return {
_ele = {}, _ele = {},
def = form, def = form,
@ -116,176 +112,119 @@ function smartfs._makeState_(form, player, params, is_inv)
close = function(self) close = function(self)
self.closed = true self.closed = true
end, end,
size = function(self, w, h) size = function(self,w,h)
self._size = { w = w, h = h } self._size = {w=w,h=h}
end, end,
_getFS_ = function(self,size) _getFS_ = function(self,size)
local res = "" local res = ""
if self._size and size then if self._size and size then
res = "size[" .. self._size.w .. "," .. self._size.h .. "]" res = "size["..self._size.w..","..self._size.h.."]"
end end
for _, val in pairs(self._ele) do for key,val in pairs(self._ele) do
res = res .. val:build() res = res .. val:build()
end end
return res return res
end, end,
_show_ = function(self) _show_ = function(self)
if self.is_inv then if self.is_inv then
if has_unified_inventory then if unified_inventory then
unified_inventory.set_inventory_formspec( unified_inventory.set_inventory_formspec(minetest.get_player_by_name(self.player), self.def.name)
core.get_player_by_name(self.player), self.def.name) elseif inventory_plus then
elseif has_inventory_plus then inventory_plus.set_inventory_formspec(minetest.get_player_by_name(self.player), self:_getFS_(true))
inventory_plus.set_inventory_formspec(
core.get_player_by_name(self.player), self:_getFS_(true))
end end
else else
local res = self:_getFS_(true) local res = self:_getFS_(true)
core.show_formspec(player, form.name, res) minetest.show_formspec(player,form.name,res)
end end
end, end,
load = function(self, file_name) load = function(self,file)
local file = io.open(file_name, "r") local file = io.open(file, "r")
if file then if file then
local data = core.deserialize(file:read("*all")) local table = minetest.deserialize(file:read("*all"))
file:close() if type(table) == "table" then
if type(data) == "table" then if table.size then
if data.size then self._size = table.size
self._size = data.size
end end
for _, val in pairs(data.ele) do for key,val in pairs(table.ele) do
self:element(val.type, val) self:element(val.type,val)
end end
return true return true
end end
end end
return false return false
end, end,
save = function(self, file_name) save = function(self,file)
local res = { ele = {} } local res = {ele={}}
if self._size then if self._size then
res.size = self._size res.size = self._size
end end
for key, val in pairs(self._ele) do for key,val in pairs(self._ele) do
res.ele[key] = val.data res.ele[key] = val.data
end end
local file = io.open(file_name, "w") local file = io.open(file, "w")
if file then if file then
file:write(core.serialize(res)) file:write(minetest.serialize(res))
file:close() file:close()
return true return true
end end
return false return false
end, end,
setparam = function(self, key, value) setparam = function(self,key,value)
if not key then return end if not key then return end
self.param[key] = value self.param[key] = value
return true return true
end, end,
getparam = function(self, key, default) getparam = function(self,key,default)
if not key then return end if not key then return end
return self.param[key] or default return self.param[key] or default
end, end,
button = function(self, x, y, w, h, name, text, exitf) button = function(self,x,y,w,h,name,text,exitf)
if exitf == nil then exitf = false end if exitf == nil then exitf = false end
return self:element("button", { return self:element("button",{pos={x=x,y=y},size={w=w,h=h},name=name,value=text,closes=exitf})
pos = { x = x, y = y },
size = { w = w, h = h },
name = name,
value = text,
closes = exitf
})
end, end,
label = function(self, x, y, name, text) label = function(self,x,y,name,text)
return self:element("label", { return self:element("label",{pos={x=x,y=y},name=name,value=text})
pos = { x = x, y = y },
name = name,
value = text
})
end, end,
toggle = function(self, x, y, w, h, name, list) toggle = function(self,x,y,w,h,name,list)
return self:element("toggle", { return self:element("toggle",{pos={x=x,y=y},size={w=w,h=h},name=name,id=1,list=list})
pos = { x = x, y = y },
size = { w = w, h = h },
name = name,
id = 1,
list = list
})
end, end,
field = function(self, x, y, w, h, name, label) field = function(self,x,y,w,h,name,label)
return self:element("field", { return self:element("field",{pos={x=x,y=y},size={w=w,h=h},name=name,value="",label=label})
pos = { x = x, y = y },
size = { w = w, h = h },
name = name,
value = "",
label = label
})
end, end,
pwdfield = function(self, x, y, w, h, name, label) pwdfield = function(self,x,y,w,h,name,label)
local res = self:element("field", { local res = self:element("field",{pos={x=x,y=y},size={w=w,h=h},name=name,value="",label=label})
pos = { x = x, y = y },
size = { w = w, h = h },
name = name,
value = "",
label = label
})
res:isPassword(true) res:isPassword(true)
return res return res
end, end,
textarea = function(self, x, y, w, h, name, label) textarea = function(self,x,y,w,h,name,label)
local res = self:element("field", { local res = self:element("field",{pos={x=x,y=y},size={w=w,h=h},name=name,value="",label=label})
pos = { x = x, y = y },
size = { w = w, h = h },
name = name,
value = "",
label = label
})
res:isMultiline(true) res:isMultiline(true)
return res return res
end, end,
image = function(self, x, y, w, h, name, img) image = function(self,x,y,w,h,name,img)
return self:element("image", { return self:element("image",{pos={x=x,y=y},size={w=w,h=h},name=name,value=img})
pos = { x = x, y = y },
size = { w = w, h = h },
name = name,
value = img
})
end, end,
checkbox = function(self, x, y, name, label, selected) checkbox = function(self,x,y,name,label,selected)
return self:element("checkbox", { return self:element("checkbox",{pos={x=x,y=y},name=name,value=selected,label=label})
pos = { x = x, y = y },
name = name,
value = selected,
label = label
})
end, end,
listbox = function(self, x, y, w, h, name, selected, transparent) listbox = function(self,x,y,w,h,name,selected,transparent)
return self:element("list", { return self:element("list", { pos={x=x,y=y}, size={w=w,h=h}, name=name, selected=selected, transparent=transparent })
pos = { x = x, y = y },
size = { w = w, h = h },
name = name,
selected = selected,
transparent = transparent
})
end, end,
inventory = function(self, x, y, w, h, name) inventory = function(self,x,y,w,h,name)
return self:element("inventory", { return self:element("inventory", { pos={x=x,y=y}, size={w=w,h=h}, name=name })
pos = { x = x, y = y },
size = { w = w, h = h },
name = name
})
end, end,
element = function(self, typen, data) element = function(self,typen,data)
local type = smartfs._edef[typen] local type = smartfs._edef[typen]
if not type then if not type then
error("Element type " .. typen .. " does not exist!") error("Element type "..typen.." does not exist!")
end end
if self._ele[data.name] then if self._ele[data.name] then
error("Element " .. data.name .. " already exists") error("Element "..data.name.." already exists")
end end
data.type = typen data.type = typen
@ -293,12 +232,12 @@ function smartfs._makeState_(form, player, params, is_inv)
name = data.name, name = data.name,
root = self, root = self,
data = data, data = data,
remove = function(self2) remove = function(self)
self2.root._ele[self2.name] = nil self.root._ele[self.name] = nil
end end
} }
for key, val in pairs(type) do for key,val in pairs(type) do
ele[key] = val ele[key] = val
end end
@ -313,7 +252,7 @@ end
function smartfs._show_(form, player, params, is_inv) function smartfs._show_(form, player, params, is_inv)
local state = smartfs._makeState_(form, player, params, is_inv) local state = smartfs._makeState_(form, player, params, is_inv)
state.show = state._show_ state.show = state._show_
if form._reg(state) ~= false then if form._reg(state)~=false then
if not is_inv then if not is_inv then
smartfs.opened[player] = state smartfs.opened[player] = state
state:_show_() state:_show_()
@ -325,22 +264,22 @@ function smartfs._show_(form, player, params, is_inv)
end end
-- Receive fields from formspec -- Receive fields from formspec
local function _sfs_recieve_(state, name, fields) local function _sfs_recieve_(state,name,fields)
if fields.quit == "true" then if (fields.quit == "true") then
if not state.is_inv then if not state.is_inv then
smartfs.opened[name] = nil smartfs.opened[name] = nil
end end
return true return true
end end
for key, val in pairs(fields) do for key,val in pairs(fields) do
if state._ele[key] then if state._ele[key] then
state._ele[key].data.value = val state._ele[key].data.value = val
end end
end end
for _, val in pairs(state._ele) do for key,val in pairs(state._ele) do
if val.submit then if val.submit then
if val:submit(fields) == true then if (val:submit(fields)==true) then
return true return true
end end
end end
@ -348,8 +287,7 @@ local function _sfs_recieve_(state, name, fields)
if state.closed ~= true then if state.closed ~= true then
state:_show_() state:_show_()
else else
core.show_formspec(name, "", minetest.show_formspec(name,"","size[5,1]label[0,0;Formspec closing not yet created!]")
"size[5,1]label[0,0;Formspec closing not yet created!]")
if not state.is_inv then if not state.is_inv then
smartfs.opened[name] = nil smartfs.opened[name] = nil
end end
@ -357,18 +295,18 @@ local function _sfs_recieve_(state, name, fields)
return true return true
end end
core.register_on_player_receive_fields(function(player, formname, fields) minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = player:get_player_name() local name = player:get_player_name()
if smartfs.opened[name] and not smartfs.opened[name].is_inv then if smartfs.opened[name] and not smartfs.opened[name].is_inv then
if smartfs.opened[name].def.name == formname then if smartfs.opened[name].def.name == formname then
local state = smartfs.opened[name] local state = smartfs.opened[name]
return _sfs_recieve_(state, name, fields) return _sfs_recieve_(state,name,fields)
else else
smartfs.opened[name] = nil smartfs.opened[name] = nil
end end
elseif smartfs.inv[name] and smartfs.inv[name].is_inv then elseif smartfs.inv[name] and smartfs.inv[name].is_inv then
local state = smartfs.inv[name] local state = smartfs.inv[name]
_sfs_recieve_(state, name, fields) _sfs_recieve_(state,name,fields)
end end
return false return false
end) end)
@ -378,28 +316,45 @@ end)
------------------------- ELEMENTS ---------------------------- ------------------------- ELEMENTS ----------------------------
----------------------------------------------------------------- -----------------------------------------------------------------
smartfs.element("button", { smartfs.element("button",{
build = function(self) build = function(self)
local common_prefix = self.data.pos.x .. "," .. self.data.pos.y
.. ";" .. self.data.size.w .. "," ..self.data.size.h
local common_sufix = ";" .. self.name
.. ";" .. self.data.value
.. "]"
if self.data.img then if self.data.img then
return "image_button[" return "image_button["..
.. common_prefix self.data.pos.x..","..self.data.pos.y..
.. ";" .. self.data.img ";"..
.. common_sufix self.data.size.w..","..self.data.size.h..
";"..
self.data.img..
";"..
self.name..
";"..
self.data.value..
"]"
else else
if self.data.closes then if self.data.closes then
return "button_exit[" .. common_prefix .. common_sufix return "button_exit["..
self.data.pos.x..","..self.data.pos.y..
";"..
self.data.size.w..","..self.data.size.h..
";"..
self.name..
";"..
self.data.value..
"]"
else else
return "button[" .. common_prefix .. common_sufix return "button["..
self.data.pos.x..","..self.data.pos.y..
";"..
self.data.size.w..","..self.data.size.h..
";"..
self.name..
";"..
self.data.value..
"]"
end end
end end
end, end,
-- (self, fields, state) submit = function(self,fields,state)
submit = function(self, fields)
if fields[self.name] and self._click then if fields[self.name] and self._click then
self:_click(self.root) self:_click(self.root)
end end
@ -408,51 +363,54 @@ smartfs.element("button", {
return true return true
end end
end, end,
setPosition = function(self, x, y) setPosition = function(self,x,y)
self.data.pos = { x = x, y = y } self.data.pos = {x=x,y=y}
end, end,
getPosition = function(self) getPosition = function(self,x,y)
return self.data.pos return self.data.pos
end, end,
setSize = function(self, w, h) setSize = function(self,w,h)
self.data.size = { w = w, h = h } self.data.size = {w=w,h=h}
end, end,
getSize = function(self) getSize = function(self,x,y)
return self.data.size return self.data.size
end, end,
onClick = function(self, func) onClick = function(self,func)
self._click = func self._click = func
end, end,
click = function(self, func) click = function(self,func)
self._click = func self._click = func
end, end,
setText = function(self, text) setText = function(self,text)
self.data.value = text self.data.value = text
end, end,
getText = function(self) getText = function(self)
return self.data.value return self.data.value
end, end,
setImage = function(self, image) setImage = function(self,image)
self.data.img = image self.data.img = image
end, end,
getImage = function(self) getImage = function(self)
return self.data.img return self.data.img
end, end,
setClose = function(self, bool) setClose = function(self,bool)
self.data.closes = bool self.data.closes = bool
end end
}) })
smartfs.element("toggle", { smartfs.element("toggle",{
build = function(self) build = function(self)
return "button[" return "button["..
.. self.data.pos.x .. "," .. self.data.pos.y self.data.pos.x..","..self.data.pos.y..
.. ";" .. self.data.size.w .. "," .. self.data.size.h ";"..
.. ";" .. self.name self.data.size.w..","..self.data.size.h..
.. ";" .. self.data.list[self.data.id] ";"..
.. "]" self.name..
";"..
self.data.list[self.data.id]..
"]"
end, end,
submit = function(self, fields) submit = function(self,fields)
if fields[self.name] then if fields[self.name] then
self.data.id = self.data.id + 1 self.data.id = self.data.id + 1
if self.data.id > #self.data.list then if self.data.id > #self.data.list then
@ -463,22 +421,22 @@ smartfs.element("toggle", {
end end
end end
end, end,
onToggle = function(self, func) onToggle = function(self,func)
self._tog = func self._tog = func
end, end,
setPosition = function(self, x, y) setPosition = function(self,x,y)
self.data.pos = { x = x, y = y } self.data.pos = {x=x,y=y}
end, end,
getPosition = function(self) getPosition = function(self,x,y)
return self.data.pos return self.data.pos
end, end,
setSize = function(self, w, h) setSize = function(self,w,h)
self.data.size = { w = w, h = h } self.data.size = {w=w,h=h}
end, end,
getSize = function(self) getSize = function(self,x,y)
return self.data.size return self.data.size
end, end,
setId = function(self, id) setId = function(self,id)
self.data.id = id self.data.id = id
end, end,
getId = function(self) getId = function(self)
@ -489,20 +447,21 @@ smartfs.element("toggle", {
end end
}) })
smartfs.element("label", { smartfs.element("label",{
build = function(self) build = function(self)
return "label[" return "label["..
.. self.data.pos.x .. "," .. self.data.pos.y self.data.pos.x..","..self.data.pos.y..
.. ";" .. self.data.value ";"..
.. "]" self.data.value..
"]"
end, end,
setPosition = function(self, x, y) setPosition = function(self,x,y)
self.data.pos = { x = x, y = y } self.data.pos = {x=x,y=y}
end, end,
getPosition = function(self) getPosition = function(self,x,y)
return self.data.pos return self.data.pos
end, end,
setText = function(self, text) setText = function(self,text)
self.data.value = text self.data.value = text
end, end,
getText = function(self) getText = function(self)
@ -510,75 +469,93 @@ smartfs.element("label", {
end end
}) })
smartfs.element("field", { smartfs.element("field",{
build = function(self) build = function(self)
local common = self.data.pos.x .. "," .. self.data.pos.y
.. ";" .. self.data.size.w .. "," .. self.data.size.h
.. ";" .. self.name
.. ";" .. self.data.label
if self.data.ml then if self.data.ml then
return "textarea[" return "textarea["..
.. common self.data.pos.x..","..self.data.pos.y..
.. ";" .. self.data.value ";"..
.. "]" self.data.size.w..","..self.data.size.h..
";"..
self.name..
";"..
self.data.label..
";"..
self.data.value..
"]"
elseif self.data.pwd then elseif self.data.pwd then
return "pwdfield[" return "pwdfield["..
.. common self.data.pos.x..","..self.data.pos.y..
.. "]" ";"..
self.data.size.w..","..self.data.size.h..
";"..
self.name..
";"..
self.data.label..
"]"
else else
return "field[" return "field["..
.. common self.data.pos.x..","..self.data.pos.y..
.. ";" .. self.data.value ";"..
.. "]" self.data.size.w..","..self.data.size.h..
";"..
self.name..
";"..
self.data.label..
";"..
self.data.value..
"]"
end end
end, end,
setPosition = function(self, x, y) setPosition = function(self,x,y)
self.data.pos = { x = x, y = y } self.data.pos = {x=x,y=y}
end, end,
getPosition = function(self) getPosition = function(self,x,y)
return self.data.pos return self.data.pos
end, end,
setSize = function(self, w, h) setSize = function(self,w,h)
self.data.size = { w = w, h = h } self.data.size = {w=w,h=h}
end, end,
getSize = function(self) getSize = function(self,x,y)
return self.data.size return self.data.size
end, end,
setText = function(self, text) setText = function(self,text)
self.data.value = text self.data.value = text
end, end,
getText = function(self) getText = function(self)
return self.data.value return self.data.value
end, end,
isPassword = function(self, bool) isPassword = function(self,bool)
self.data.pwd = bool self.data.pwd = bool
end, end,
isMultiline = function(self, bool) isMultiline = function(self,bool)
self.data.ml = bool self.data.ml = bool
end end
}) })
smartfs.element("image", { smartfs.element("image",{
build = function(self) build = function(self)
return "image[" return "image["..
.. self.data.pos.x .. "," .. self.data.pos.y self.data.pos.x..","..self.data.pos.y..
.. ";" .. self.data.size.w .. "," .. self.data.size.h ";"..
.. ";" .. self.data.value self.data.size.w..","..self.data.size.h..
.. "]" ";"..
self.data.value..
"]"
end, end,
setPosition = function(self, x, y) setPosition = function(self,x,y)
self.data.pos = { x = x, y = y } self.data.pos = {x=x,y=y}
end, end,
getPosition = function(self) getPosition = function(self,x,y)
return self.data.pos return self.data.pos
end, end,
setSize = function(self, w, h) setSize = function(self,w,h)
self.data.size = { w = w, h = h } self.data.size = {w=w,h=h}
end, end,
getSize = function(self) getSize = function(self,x,y)
return self.data.size return self.data.size
end, end,
setImage = function(self, text) setImage = function(self,text)
self.data.value = text self.data.value = text
end, end,
getImage = function(self) getImage = function(self)
@ -586,31 +563,39 @@ smartfs.element("image", {
end end
}) })
smartfs.element("checkbox", { smartfs.element("checkbox",{
build = function(self) build = function(self)
local out = "checkbox["
.. self.data.pos.x .. "," .. self.data.pos.y
.. ";" .. self.name
.. ";" .. self.data.label
if self.data.value then if self.data.value then
return out .. ";true]" return "checkbox["..
self.data.pos.x..","..self.data.pos.y..
";"..
self.name..
";"..
self.data.label..
";true]"
else else
return out .. ";false]" return "checkbox["..
self.data.pos.x..","..self.data.pos.y..
";"..
self.name..
";"..
self.data.label..
";false]"
end end
end, end,
setPosition = function(self, x, y) setPosition = function(self,x,y)
self.data.pos = { x = x, y = y } self.data.pos = {x=x,y=y}
end, end,
getPosition = function(self) getPosition = function(self,x,y)
return self.data.pos return self.data.pos
end, end,
setSize = function(self, w, h) setSize = function(self,w,h)
self.data.size = { w = w, h = h } self.data.size = {w=w,h=h}
end, end,
getSize = function(self) getSize = function(self,x,y)
return self.data.size return self.data.size
end, end,
setText = function(self, text) setText = function(self,text)
self.data.value = text self.data.value = text
end, end,
getText = function(self) getText = function(self)
@ -618,26 +603,30 @@ smartfs.element("checkbox", {
end end
}) })
smartfs.element("list", { smartfs.element("list",{
build = function(self) build = function(self)
if not self.data.items then if not self.data.items then
self.data.items = {} self.data.items = {}
end end
local listformspec = "textlist[" local listformspec = "textlist["..
.. self.data.pos.x .. "," .. self.data.pos.y self.data.pos.x..","..self.data.pos.y..
.. ";" .. self.data.size.w .. "," .. self.data.size.h ";"..
.. ";" .. self.data.name self.data.size.w..","..self.data.size.h..
.. ";" .. table.concat(self.data.items, ",") ";"..
.. ";" .. tostring(self.data.selected or "") self.data.name..
.. ";" .. tostring(self.data.transparent or "false") ";"..
.. "]" table.concat(self.data.items, ",")..
";"..
tostring(self.data.selected or "")..
";"..
tostring(self.data.transparent or "false").."]"
return listformspec return listformspec
end, end,
submit = function(self, fields) submit = function(self,fields)
if fields[self.name] then if fields[self.name] then
local _type = string.sub(fields[self.data.name], 1, 3) local _type = string.sub(fields[self.data.name],1,3)
local index = string.sub(fields[self.data.name], 5) local index = string.sub(fields[self.data.name],5)
if _type == "CHG" and self._click then if _type == "CHG" and self._click then
self:_click(self.root, index) self:_click(self.root, index)
elseif _type == "DCL" and self._doubleClick then elseif _type == "DCL" and self._doubleClick then
@ -657,16 +646,16 @@ smartfs.element("list", {
doubleclick = function(self, func) doubleclick = function(self, func)
self._doubleClick = func self._doubleClick = func
end, end,
setPosition = function(self, x, y) setPosition = function(self,x,y)
self.data.pos = { x = x, y = y } self.data.pos = {x=x,y=y}
end, end,
getPosition = function(self) getPosition = function(self,x,y)
return self.data.pos return self.data.pos
end, end,
setSize = function(self, w, h) setSize = function(self,w,h)
self.data.size = { w = w, h = h } self.data.size = {w=w,h=h}
end, end,
getSize = function(self) getSize = function(self,x,y)
return self.data.size return self.data.size
end, end,
addItem = function(self, item) addItem = function(self, item)
@ -675,11 +664,11 @@ smartfs.element("list", {
end end
table.insert(self.data.items, item) table.insert(self.data.items, item)
end, end,
removeItem = function(self, idx) removeItem = function(self,idx)
if not self.data.items then if not self.data.items then
self.data.items = {} self.data.items = {}
end end
table.remove(self.data.items, idx) table.remove(self.data.items,idx)
end, end,
popItem = function(self) popItem = function(self)
if not self.data.items then if not self.data.items then
@ -691,26 +680,30 @@ smartfs.element("list", {
end end
}) })
smartfs.element("inventory", { smartfs.element("inventory",{
build = function(self) build = function(self)
return "list[" return "list["..
.. (self.data.location or "current_player") (self.data.location or "current_player") ..
.. ";" .. self.name ";"..
.. ";" .. self.data.pos.x .. "," .. self.data.pos.y self.name..
.. ";" .. self.data.size.w .. "," .. self.data.size.h ";"..
.. ";" .. (self.data.index or "") self.data.pos.x..","..self.data.pos.y..
.. "]" ";"..
self.data.size.w..","..self.data.size.h..
";"..
(self.data.index or "") ..
"]"
end, end,
setPosition = function(self, x, y) setPosition = function(self,x,y)
self.data.pos = { x = x, y = y } self.data.pos = {x=x,y=y}
end, end,
getPosition = function(self) getPosition = function(self,x,y)
return self.data.pos return self.data.pos
end, end,
setSize = function(self, w, h) setSize = function(self,w,h)
self.data.size = { w = w, h = h } self.data.size = {w=w,h=h}
end, end,
getSize = function(self) getSize = function(self,x,y)
return self.data.size return self.data.size
end, end,
-- available inventory locations -- available inventory locations
@ -719,7 +712,7 @@ smartfs.element("inventory", {
-- "nodemeta:<X>,<Y>,<Z>": Any node metadata -- "nodemeta:<X>,<Y>,<Z>": Any node metadata
-- "detached:<name>": A detached inventory -- "detached:<name>": A detached inventory
-- "context" does not apply to smartfs, since there is no node-metadata as context available -- "context" does not apply to smartfs, since there is no node-metadata as context available
setLocation = function(self, location) setLocation = function(self,location)
self.data.location = location self.data.location = location
end, end,
getLocation = function(self) getLocation = function(self)
@ -734,7 +727,7 @@ smartfs.element("inventory", {
useDetached = function(self, name) useDetached = function(self, name)
self.data.location = "detached:" .. name self.data.location = "detached:" .. name
end, end,
setIndex = function(self, index) setIndex = function(self,index)
self.data.index = index self.data.index = index
end, end,
getIndex = function(self) getIndex = function(self)
@ -742,7 +735,7 @@ smartfs.element("inventory", {
end end
}) })
smartfs.element("code", { smartfs.element("code",{
build = function(self) build = function(self)
if self._build then if self._build then
self:_build() self:_build()
@ -750,22 +743,21 @@ smartfs.element("code", {
return self.data.code return self.data.code
end, end,
submit = function(self, fields) submit = function(self,fields)
if self._sub then if self._sub then
self:_sub(fields) self:_sub(fields)
end end
end, end,
onSubmit = function(self, func) onSubmit = function(self,func)
self._sub = func self._sub = func
end, end,
onBuild = function(self, func) onBuild = function(self,func)
self._build = func self._build = func
end, end,
setCode = function(self, code) setCode = function(self,code)
self.data.code = code self.data.code = code
end, end,
getCode = function(self) getCode = function(self)
return self.data.code return self.data.code
end end
}) })

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

After

Width:  |  Height:  |  Size: 402 B