Add multi-signal doors, basic device deployment, and a target trigger.
This commit is contained in:
parent
1b2199705b
commit
3bf1d5c6a0
24 changed files with 656 additions and 74 deletions
|
|
@ -52,14 +52,21 @@ function ns.swap_character(m)
|
|||
ns.apply_vix(m)
|
||||
end
|
||||
|
||||
if artifact.sidekick.ref then
|
||||
-- We don't need to have the sidekick entity during testing.
|
||||
if artifact.sidekick.pos or not artifact.debug then
|
||||
-- `m.pos` includes eye_height, and we don't want that here.
|
||||
local pos = m.object:get_pos()
|
||||
local yaw = m.yaw
|
||||
local pitch = m.pitch
|
||||
m.object:set_pos(artifact.sidekick.ref.object:get_pos())
|
||||
if not artifact.sidekick.pos then
|
||||
artifact.sidekick.pos = pos
|
||||
end
|
||||
m.object:set_pos(artifact.sidekick.pos)
|
||||
m.object:set_look_horizontal(artifact.sidekick.yaw)
|
||||
m.object:set_look_vertical(artifact.sidekick.pitch)
|
||||
if not artifact.sidekick.ref then
|
||||
minetest.add_entity(pos, "artifact:sidekick")
|
||||
end
|
||||
artifact.sidekick.ref.object:set_pos(pos)
|
||||
artifact.sidekick.ref.object:set_yaw(yaw)
|
||||
artifact.sidekick.ref.object:set_bone_override("Head", m.object:get_bone_override("Head"))
|
||||
|
|
@ -76,6 +83,7 @@ function ns.swap_character(m)
|
|||
}
|
||||
if e.blackrod then
|
||||
e.blackrod:remove()
|
||||
e.blackrod = nil
|
||||
end
|
||||
else
|
||||
e.object:set_properties {
|
||||
|
|
@ -101,7 +109,6 @@ include "key.lua"
|
|||
include "vix.lua"
|
||||
|
||||
artifact.sidekick = setmetatable(minetest.deserialize(db:get("sidekick") or "return nil") or {
|
||||
pos = vector.zero(),
|
||||
pitch = 0,
|
||||
yaw = 0,
|
||||
character = "vix",
|
||||
|
|
@ -121,12 +128,14 @@ minetest.register_entity(":artifact:sidekick", {
|
|||
initial_properties = {
|
||||
visual = "mesh",
|
||||
mesh = "artifact_character.gltf",
|
||||
textures = {"artifact_key.png"},
|
||||
textures = {"artifact_vix.png"},
|
||||
visual_size = vector.new(1,1,1) *0.8,
|
||||
physical = true,
|
||||
collisionbox = {
|
||||
-0.3, 0,-0.3,
|
||||
0.3, 1.77, 0.3
|
||||
}
|
||||
},
|
||||
collide_with_objects = false
|
||||
},
|
||||
_interact_marker_offset = function() return vector.new(0, 1.1,0) end,
|
||||
_interact_time = 0.4,
|
||||
|
|
@ -134,7 +143,7 @@ minetest.register_entity(":artifact:sidekick", {
|
|||
if data then
|
||||
extend(e, minetest.deserialize(data) or {})
|
||||
end
|
||||
if artifact.sidekick.character == "vix" then
|
||||
if artifact.sidekick.character == "key" then
|
||||
e.object:set_properties {
|
||||
textures = {"artifact_key.png"},
|
||||
visual_size = vector.new(1,1,1) *0.88
|
||||
|
|
@ -149,9 +158,9 @@ minetest.register_entity(":artifact:sidekick", {
|
|||
if artifact.sidekick.ref then
|
||||
e.object:remove()
|
||||
return
|
||||
else
|
||||
artifact.sidekick.ref = e
|
||||
end
|
||||
artifact.sidekick.pos = e.object:get_pos()
|
||||
artifact.sidekick.ref = e
|
||||
end,
|
||||
on_deactivate = function(e)
|
||||
artifact.sidekick.ref = nil
|
||||
|
|
@ -161,6 +170,10 @@ minetest.register_entity(":artifact:sidekick", {
|
|||
cahracter = e.character
|
||||
}
|
||||
end,
|
||||
-- We need this to ensure that the stored position takes gravity into account.
|
||||
on_step = function(e)
|
||||
artifact.sidekick.pos = e.object:get_pos()
|
||||
end,
|
||||
on_interact = function(e, m)
|
||||
ns.swap_character(m)
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue