fuel improvement and code cleaning
parent
4a98759b70
commit
3c25a3a5d6
|
@ -0,0 +1,25 @@
|
|||
unused_args = false
|
||||
allow_defined_top = true
|
||||
|
||||
globals = {
|
||||
"minetest",
|
||||
"mobkit",
|
||||
"core",
|
||||
"player_api",
|
||||
"player_monoids",
|
||||
"math.sign",
|
||||
}
|
||||
|
||||
read_globals = {
|
||||
string = {fields = {"split"}},
|
||||
table = {fields = {"copy", "getn"}},
|
||||
|
||||
-- Builtin
|
||||
"vector", "ItemStack",
|
||||
"dump", "DIR_DELIM", "VoxelArea", "Settings",
|
||||
|
||||
-- MTG
|
||||
"default", "sfinv", "creative",
|
||||
}
|
||||
|
||||
ignore = {"611"}
|
51
init.lua
51
init.lua
|
@ -6,6 +6,9 @@ minekart.LONGIT_DRAG_FACTOR = 0.16*0.16
|
|||
minekart.LATER_DRAG_FACTOR = 30.0
|
||||
minekart.gravity = 9.8
|
||||
|
||||
minekart.fuel = {['biofuel:biofuel'] = 1,['biofuel:bottle_fuel'] = 1,
|
||||
['biofuel:phial_fuel'] = 0.25, ['biofuel:fuel_can'] = 10}
|
||||
|
||||
--two variables to control sound event
|
||||
minekart.last_time_collision_snd = 0
|
||||
minekart.last_time_drift_snd =0
|
||||
|
@ -38,8 +41,6 @@ dofile(minetest.get_modpath("kartcar") .. DIR_DELIM .. "minekart_custom_physics.
|
|||
-- helpers and co.
|
||||
--
|
||||
|
||||
local creative_exists = minetest.global_exists("creative")
|
||||
|
||||
function minekart.get_hipotenuse_value(point1, point2)
|
||||
return math.sqrt((point1.x - point2.x) ^ 2 + (point1.y - point2.y) ^ 2 + (point1.z - point2.z) ^ 2)
|
||||
end
|
||||
|
@ -62,7 +63,7 @@ function minekart.paint(self, colstr)
|
|||
self._color = colstr
|
||||
local l_textures = self.initial_properties.textures
|
||||
for _, texture in ipairs(l_textures) do
|
||||
local i,indx = texture:find('kart_painting.png')
|
||||
local indx = texture:find('kart_painting.png')
|
||||
if indx then
|
||||
l_textures[_] = "kart_painting.png^[multiply:".. colstr
|
||||
end
|
||||
|
@ -227,7 +228,10 @@ minetest.register_entity("kartcar:kart", {
|
|||
stepheight = 0.5,
|
||||
visual = "mesh",
|
||||
mesh = "kart_body.b3d",
|
||||
textures = {"kart_black.png", "kart_painting.png", "kart_painting.png", "kart_red.png", "kart_black.png", "kart_white.png", "kart_black.png", "kart_black.png", "kart_black.png", "kart_black.png", "kart_metal.png", "kart_black.png", "kart_black.png", "kart_metal.png", "kart_black.png", "kart_metal.png",},
|
||||
textures = {"kart_black.png", "kart_painting.png", "kart_painting.png",
|
||||
"kart_red.png", "kart_black.png", "kart_white.png", "kart_black.png",
|
||||
"kart_black.png", "kart_black.png", "kart_black.png", "kart_metal.png",
|
||||
"kart_black.png", "kart_black.png", "kart_metal.png", "kart_black.png", "kart_metal.png",},
|
||||
},
|
||||
textures = {},
|
||||
driver_name = nil,
|
||||
|
@ -320,14 +324,10 @@ minetest.register_entity("kartcar:kart", {
|
|||
if minekart.last_time_drift_snd > 1 then minekart.last_time_drift_snd = 1 end
|
||||
--[[end sound control]]--
|
||||
|
||||
local accel_y = self.object:get_acceleration().y
|
||||
local rotation = self.object:get_rotation()
|
||||
local yaw = rotation.y
|
||||
local newyaw=yaw
|
||||
local pitch = rotation.x
|
||||
local newpitch = pitch
|
||||
local roll = rotation.z
|
||||
local newroll=roll
|
||||
|
||||
local hull_direction = minetest.yaw_to_dir(yaw)
|
||||
local nhdir = {x=hull_direction.z,y=0,z=-hull_direction.x} -- lateral unit vector
|
||||
|
@ -335,10 +335,12 @@ minetest.register_entity("kartcar:kart", {
|
|||
|
||||
local longit_speed = minekart.dot(velocity,hull_direction)
|
||||
local fuel_weight_factor = (5 - self._energy)/5000
|
||||
local longit_drag = vector.multiply(hull_direction,(longit_speed*longit_speed) * (minekart.LONGIT_DRAG_FACTOR - fuel_weight_factor) * -1 * minekart.sign(longit_speed))
|
||||
local longit_drag = vector.multiply(hull_direction,(longit_speed*longit_speed) *
|
||||
(minekart.LONGIT_DRAG_FACTOR - fuel_weight_factor) * -1 * minekart.sign(longit_speed))
|
||||
|
||||
local later_speed = minekart.dot(velocity,nhdir)
|
||||
local later_drag = vector.multiply(nhdir,later_speed*later_speed*minekart.LATER_DRAG_FACTOR*-1*minekart.sign(later_speed))
|
||||
local later_drag = vector.multiply(nhdir,later_speed*
|
||||
later_speed*minekart.LATER_DRAG_FACTOR*-1*minekart.sign(later_speed))
|
||||
|
||||
local accel = vector.add(longit_drag,later_drag)
|
||||
|
||||
|
@ -355,11 +357,12 @@ minetest.register_entity("kartcar:kart", {
|
|||
|
||||
--reload fuel at refuel point
|
||||
------------------------------
|
||||
if self._energy < 0.90 then
|
||||
if self._energy < 1 then
|
||||
local speed = minekart.get_hipotenuse_value(vector.new(), self.lastvelocity)
|
||||
local pos = self.object:get_pos()
|
||||
if minetest.find_node_near(pos, 5, {"checkpoints:refuel"}) ~= nil and self._engine_running == false and speed <= 0.1 then
|
||||
minekart_load_fuel(self, self.driver_name, true)
|
||||
if minetest.find_node_near(pos, 5, {"checkpoints:refuel"}) ~= nil and
|
||||
self._engine_running == false and speed <= 0.1 then
|
||||
minekart.loadFuel(self, self.driver_name, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -382,12 +385,13 @@ minetest.register_entity("kartcar:kart", {
|
|||
})
|
||||
end
|
||||
--[[if self.damage > 100 then --if acumulated damage is greater than 100, adieu
|
||||
minekart.destroy(self)
|
||||
minekart.destroy(self)
|
||||
end]]--
|
||||
end
|
||||
|
||||
local min_later_speed = 0.9
|
||||
if (later_speed > min_later_speed or later_speed < -min_later_speed) and minekart.last_time_drift_snd > 0.6 then
|
||||
if (later_speed > min_later_speed or later_speed < -min_later_speed) and
|
||||
minekart.last_time_drift_snd > 0.6 then
|
||||
minekart.last_time_drift_snd = 0
|
||||
minetest.sound_play("drifting", {
|
||||
to_player = self.driver_name,
|
||||
|
@ -419,16 +423,17 @@ minetest.register_entity("kartcar:kart", {
|
|||
self.dir_bar:set_attach(self.object,'',{x=(-1*(self._steering_angle / 25)),y=0,z=-4},{x=0,y=0,z=0})
|
||||
self.r_wheel:set_attach(self.object,'',{x= 6,y=2.1,z=10.7},{x=0,y=-self._steering_angle+angle_factor,z=0})
|
||||
|
||||
if math.abs(self._steering_angle)>5 then
|
||||
if math.abs(self._steering_angle)>5 then
|
||||
local turn_rate = math.rad(60)
|
||||
newyaw = yaw + dtime*(1 - 1 / (math.abs(longit_speed) + 1)) * self._steering_angle / 30 * turn_rate * minekart.sign(longit_speed)
|
||||
newyaw = yaw + dtime*(1 - 1 / (math.abs(longit_speed) + 1)) *
|
||||
self._steering_angle / 30 * turn_rate * minekart.sign(longit_speed)
|
||||
end
|
||||
|
||||
--[[if player and is_attached then
|
||||
player:set_look_horizontal(newyaw)
|
||||
end]]--
|
||||
|
||||
newpitch = velocity.y * math.rad(6)
|
||||
local newpitch = velocity.y * math.rad(6)
|
||||
|
||||
--[[
|
||||
accell correction
|
||||
|
@ -514,9 +519,8 @@ minetest.register_entity("kartcar:kart", {
|
|||
]]--
|
||||
local velocity = self.object:get_velocity()
|
||||
local speed = minekart.get_hipotenuse_value(vector.new(), velocity)
|
||||
if is_attached == true and item_name == "biofuel:biofuel" and self._engine_running == false and speed <= 0.1 then
|
||||
local pos = self.object:get_pos()
|
||||
minekart_load_fuel(self, puncher:get_player_name())
|
||||
if is_attached == true and self._engine_running == false and speed <= 0.1 then
|
||||
minekart.loadFuel(self, puncher:get_player_name())
|
||||
end
|
||||
-- end refuel
|
||||
|
||||
|
@ -550,7 +554,8 @@ minetest.register_entity("kartcar:kart", {
|
|||
|
||||
else -- deal damage
|
||||
--minetest.chat_send_all('owner '.. self.owner ..' - name '.. name)
|
||||
if not self.driver and self.owner == name and toolcaps and toolcaps.damage_groups and toolcaps.damage_groups.fleshy then
|
||||
if not self.driver and self.owner == name and toolcaps and
|
||||
toolcaps.damage_groups and toolcaps.damage_groups.fleshy then
|
||||
self.hp = self.hp - 10
|
||||
minetest.sound_play("collision", {
|
||||
object = self.object,
|
||||
|
@ -643,8 +648,6 @@ minetest.register_craftitem("kartcar:kart", {
|
|||
end
|
||||
|
||||
local pointed_pos = pointed_thing.above
|
||||
local node_below = minetest.get_node(pointed_pos).name
|
||||
local nodedef = minetest.registered_nodes[node_below]
|
||||
--pointed_pos.y=pointed_pos.y+0.2
|
||||
local kart = minetest.add_entity(pointed_pos, "kartcar:kart")
|
||||
if kart and placer then
|
||||
|
|
|
@ -39,7 +39,6 @@ function minekart.check_road_is_ok(obj)
|
|||
else
|
||||
return 0
|
||||
end
|
||||
return minekart.max_acc_factor
|
||||
end
|
||||
|
||||
function minekart.kart_control(self, dtime, hull_direction, longit_speed, longit_drag, later_drag, accel)
|
||||
|
@ -48,7 +47,6 @@ function minekart.kart_control(self, dtime, hull_direction, longit_speed, longit
|
|||
|
||||
local player = minetest.get_player_by_name(self.driver_name)
|
||||
local retval_accel = accel;
|
||||
local zero = vector.new()
|
||||
|
||||
-- player control
|
||||
if player then
|
||||
|
@ -144,7 +142,9 @@ function minekart.kart_control(self, dtime, hull_direction, longit_speed, longit
|
|||
local factor = 1
|
||||
if self._steering_angle > 0 then factor = -1 end
|
||||
local correction = (steering_limit*(longit_speed/100)) * factor
|
||||
local before_correction = self._steering_angle
|
||||
self._steering_angle = self._steering_angle + correction
|
||||
if math.sign(before_correction) ~= math.sign(self._steering_angle) then self._steering_angle = 0 end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
local min = math.min
|
||||
local abs = math.abs
|
||||
local deg = math.deg
|
||||
|
||||
function minekart.physics(self)
|
||||
local vel=self.object:get_velocity()
|
||||
|
@ -16,9 +15,9 @@ function minekart.physics(self)
|
|||
local vnew = vector.new(vel)
|
||||
|
||||
if not self.collided then -- ugly workaround for inconsistent collisions
|
||||
for _,k in ipairs({'y','z','x'}) do
|
||||
if vel[k]==0 and abs(self.lastvelocity[k])> 0.1 then
|
||||
vnew[k]=-self.lastvelocity[k]*self.springiness
|
||||
for _,k in ipairs({'y','z','x'}) do
|
||||
if vel[k]==0 and abs(self.lastvelocity[k])> 0.1 then
|
||||
vnew[k]=-self.lastvelocity[k]*self.springiness
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,25 +2,41 @@
|
|||
-- fuel
|
||||
--
|
||||
|
||||
function minekart_load_fuel(self, player_name, free)
|
||||
function minekart.contains(table, val)
|
||||
for k,v in pairs(table) do
|
||||
if k == val then
|
||||
return v
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function minekart.loadFuel(self, player_name, free)
|
||||
free = free or false
|
||||
if self._energy < 0.90 then
|
||||
if self._energy < 1 then
|
||||
local player = minetest.get_player_by_name(player_name)
|
||||
local inv = player:get_inventory()
|
||||
local inventory_fuel = "biofuel:biofuel"
|
||||
|
||||
if inv:contains_item("main", inventory_fuel) or free == true then
|
||||
if free == false then
|
||||
local stack = ItemStack(inventory_fuel .. " 1")
|
||||
local taken = inv:remove_item("main", stack)
|
||||
local itmstck=player:get_wielded_item()
|
||||
local item_name = ""
|
||||
if itmstck then item_name = itmstck:get_name() end
|
||||
|
||||
local fuel = minekart.contains(minekart.fuel, item_name)
|
||||
if fuel or free == true then
|
||||
local stack = ItemStack(item_name .. " 1")
|
||||
if self._energy < 1 then
|
||||
if free == false then inv:remove_item("main", stack) end
|
||||
self._energy = self._energy + fuel
|
||||
if self._energy > 1 then self._energy = 1 end
|
||||
minekart.last_fuel_display = 0
|
||||
if self._energy == 1 then minetest.chat_send_player(player_name, "Full tank!") end
|
||||
end
|
||||
|
||||
self._energy = self._energy + 1
|
||||
if self._energy > 1 then self._energy = 1 end
|
||||
minekart.last_fuel_display = 0
|
||||
minetest.chat_send_player(player_name, "Full tank!")
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(player_name, "No refuel for you! You have more than 90% of fuel in the tank.")
|
||||
minetest.chat_send_player(player_name, "No refuel for you! Your tank is already full.")
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue