ambulance, crafts, and car animation

master
D00Med 2016-11-28 14:56:15 +10:00
parent cf384cd222
commit e78309e236
6 changed files with 124 additions and 4 deletions

23
api.lua
View File

@ -47,7 +47,6 @@ local function force_detach(player)
end
function object_attach(entity, player, attach_at, visible, eye_offset)
eye_offset = eye_offset or {x=0, y=0, z=0}
force_detach(player)
entity.driver = player
entity.loaded = true
@ -253,7 +252,7 @@ end
--same as above but with improvements for cars and nitro/boost
function object_drive_car(entity, dtime, speed, decell, nitro_duration)
function object_drive_car(entity, dtime, speed, decell, nitro_duration, move_anim, stand_anim)
local ctrl = entity.driver:get_player_control()
local velo = entity.object:getvelocity()
local dir = entity.driver:get_look_dir()
@ -321,12 +320,32 @@ function object_drive_car(entity, dtime, speed, decell, nitro_duration)
minetest.after(nitro_duration, function()
entity.nitro = false
end)
--lib_mount animation
if moving_anim ~= nil and not entity.moving then
entity.object:set_animation(move_anim, 20, 0)
entity.moving = true
end
elseif ctrl.up then
entity.object:setvelocity(vec_forward)
--lib_mount animation
if moving_anim ~= nil and not entity.moving then
entity.object:set_animation(move_anim, 20, 0)
entity.moving = true
end
elseif ctrl.down then
entity.object:setvelocity(vec_backward)
--lib_mount animation
if moving_anim ~= nil and not entity.moving then
entity.object:set_animation(move_anim, 20, 0)
entity.moving = true
end
elseif not ctrl.down or ctrl.up then
entity.object:setvelocity(vec_stop)
--lib_mount animation
if stand_anim ~= nil and entity.moving then
entity.object:set_animation(stand_anim, 20, 0)
entity.moving = false
end
end
--play engine sound
if entity.sound_ready then

105
init.lua
View File

@ -129,6 +129,22 @@ minetest.register_entity("vehicles:missile_2", {
local n = minetest.env:get_node(p).name
if n ~= "vehicles:missile_2" and n ~= "vehicles:tank" and n ~= "vehicles:jet" and n ~= "air" then
local pos = self.object:getpos()
minetest.add_particlespawner({
amount = 30,
time = 0.5,
minpos = {x=pos.x-0.5, y=pos.y-0.5, z=pos.z-0.5},
maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5},
minvel = {x=-1, y=-1, z=-1},
maxvel = {x=1, y=1, z=1},
minacc = {x=0, y=0.2, z=0},
maxacc = {x=0, y=0.6, z=0},
minexptime = 0.5,
maxexptime = 1,
minsize = 10,
maxsize = 20,
collisiondetection = false,
texture = "vehicles_explosion.png"
})
tnt.boom(pos, {damage_radius=5,radius=5,ignore_protection=false})
self.object:remove()
return
@ -470,6 +486,64 @@ minetest.register_entity("vehicles:geep", {
register_vehicle_spawner("vehicles:geep", "Geep", "vehicles_geep_inv.png")
minetest.register_entity("vehicles:ambulance", {
visual = "mesh",
mesh = "ambulance.b3d",
textures = {"vehicles_ambulance.png"},
velocity = 15,
acceleration = -5,
stepheight = 1.5,
hp_max = 200,
physical = true,
collisionbox = {-1.4, 0, -1.4, 1.4, 2, 1.4},
on_rightclick = function(self, clicker)
if self.driver and clicker == self.driver then
object_detach(self, clicker, {x=1, y=0, z=1})
elseif self.driver and clicker ~= self.driver and not self.rider then
clicker:set_attach(self.object, clicker, {x=0, y=5, z=4}, false, {x=0, y=7, z=10})
self.rider = true
clicker:set_hp(20)
elseif self.driver and clicker ~= self.driver and self.rider then
clicker:set_detach()
self.rider = false
elseif not self.driver then
object_attach(self, clicker, {x=0, y=5, z=4}, false, {x=0, y=7, z=14})
minetest.sound_play("engine_start",
{gain = 6, max_hear_distance = 3, loop = false})
self.sound_ready = false
minetest.after(14, function()
self.sound_ready = true
end)
end
end,
on_punch = function(self, puncher)
if not self.driver then
local name = self.object:get_luaentity().name
local pos = self.object:getpos()
minetest.env:add_item(pos, name.."_spawner")
self.object:remove()
end
if self.object:get_hp() == 0 then
if self.driver then
object_detach(self, self.driver, {x=1, y=0, z=1})
end
explode(self, 5)
end
end,
on_activate = function(self)
self.nitro = true
end,
on_step = function(self, dtime)
if self.driver then
object_drive_car(self, dtime, 13, 0.6, 0, {x=1, y=3}, {x=1, y=1})
return false
end
return true
end,
})
register_vehicle_spawner("vehicles:ambulance", "Ambulance", "vehicles_ambulance_inv.png")
minetest.register_entity("vehicles:ute", {
visual = "mesh",
mesh = "ute.b3d",
@ -484,7 +558,7 @@ minetest.register_entity("vehicles:ute", {
if self.driver and clicker == self.driver then
object_detach(self, clicker, {x=1, y=0, z=1})
elseif self.driver and clicker ~= self.driver and not self.rider then
clicker:set_attach(self.object, "", {x=0, y=5, z=-5}, false, {x=0, y=0, z=-2})
clicker:set_attach(self.object, clicker, {x=0, y=5, z=-5}, false, {x=0, y=0, z=-2})
self.rider = true
elseif self.driver and clicker ~=self.driver and self.rider then
clicker:set_detach()
@ -558,7 +632,7 @@ minetest.register_entity("vehicles:ute2", {
if self.driver and clicker == self.driver then
object_detach(self, clicker, {x=1, y=0, z=1})
elseif self.driver and clicker ~= self.driver and not self.rider then
clicker:set_attach(self.object, "", {x=0, y=5, z=-5}, {x=0, y=0, z=0})
clicker:set_attach(self.object, clicker, {x=0, y=5, z=-5}, {x=0, y=0, z=0})
self.rider = true
elseif self.driver and clicker ~=self.driver and self.rider then
clicker:set_detach()
@ -1914,6 +1988,33 @@ minetest.register_craft({
}
})
minetest.register_craft({
output = "vehicles:geep_spawner",
recipe = {
{"", "", ""},
{"", "vehicles:engine", ""},
{"vehicles:wheel", "vehicles:armor", "vehicles:wheel"}
}
})
minetest.register_craft({
output = "vehicles:ambulance_spawner",
recipe = {
{"", "", ""},
{"vehicles:body", "vehicles:body", "dye:white"},
{"vehicles:wheel", "vehicles:engine", "vehicles:wheel"}
}
})
minetest.register_craft({
output = "vehicles:assaultsuit_spawner",
recipe = {
{"vehicles:gun", "default:glass", "vehicles:armor"},
{"", "vehicles:engine", ""},
{"vehicles:armor", "", "vehicles:armor"}
}
})
minetest.register_craft({
output = "vehicles:backpack",

BIN
models/ambulance.b3d Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 B

After

Width:  |  Height:  |  Size: 382 B