fix
This commit is contained in:
parent
60fec2cb4f
commit
a9a5a9bcb5
@ -1,178 +0,0 @@
|
||||
local textures_b = {
|
||||
"amogus_entity.png",
|
||||
"amogus_entity_b.png",
|
||||
"amogus_entity_g.png",
|
||||
"amogus_entity_br.png"
|
||||
}
|
||||
|
||||
local entity = {
|
||||
physical = true,
|
||||
collisionbox = {-0.5, 0, -0.5, 0.5, 1, 0.5},
|
||||
|
||||
visual = "mesh",
|
||||
visual_size = {x=10, y=10, z=10},
|
||||
|
||||
mesh = "amogus_entity.obj",
|
||||
on_rightclick = function(self, clicker)
|
||||
minetest.chat_send_player(clicker:get_player_name(), "WHY ARE YOU SUCH SUSSY BAKA?")
|
||||
end,
|
||||
|
||||
|
||||
-- physics config -- <--- HERE IS PART FOR YOU "USER" (NERD)
|
||||
gravity = 9.81, -- m/s^2
|
||||
|
||||
walk_acceleration_speed = 0.2, -- self explainatory
|
||||
rotation_acceleration_speed = 3, -- self explainatory
|
||||
|
||||
min_jump_force = 15, -- self explainatory
|
||||
max_jump_force = 25, -- self explainatory
|
||||
|
||||
friction = 0.6, -- friction (0.0 - no friction like perfectly smooth ice | 1.0 - full friction and can't even move)
|
||||
rotation_friction = 0.75, -- the same but for rotation
|
||||
bounciness = 0.8, -- bounciness (0.0 - no bounce at all | 1.0 - full bounce and bouces infinitely back to the same height)
|
||||
--------------------
|
||||
|
||||
is_going_forward = true,
|
||||
block_lastly_in_front = false,
|
||||
rotation_velocity = 0,
|
||||
rotation_direction = nil,
|
||||
last_y_velocity = 0,
|
||||
|
||||
|
||||
on_activate = function(self, staticdata)
|
||||
local texture = textures_b[math.random(#textures_b)]
|
||||
self.object:set_properties({textures = {texture}})
|
||||
|
||||
self.object:set_yaw(math.random() * 2 * math.pi)
|
||||
self.rotation_direction = math.random(-1, 1)
|
||||
self.min_max_jump_force_diff = self.max_jump_force - self.min_jump_force
|
||||
end,
|
||||
|
||||
-- on rightclick open formspec
|
||||
on_rightclick = function(self, clicker)
|
||||
minetest.show_formspec(clicker:get_player_name(), "amogus_entities:amogus", "size[8,8]label[0,0;Hello, I'm Amogus]")
|
||||
end,
|
||||
|
||||
|
||||
on_step = function(self, dtime)
|
||||
|
||||
-- play amogus sound randomly
|
||||
if math.random(400) == 1 then
|
||||
--minetest.sound_play("amogus_sound", {
|
||||
-- pos = self.object:get_pos(),
|
||||
-- gain = 1.0,
|
||||
-- max_hear_distance = 50
|
||||
--})
|
||||
|
||||
amogus_general.play_random_sound(
|
||||
"amogus_sound",
|
||||
self.object:get_pos(),
|
||||
1.0, -- gain
|
||||
40, -- max_hear_distance
|
||||
1.0 -- pitch
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
-- random changing between walking and standing still
|
||||
if math.random(200) == 1 then
|
||||
self.is_going_forward = not self.is_going_forward
|
||||
end
|
||||
|
||||
-- perform calculations on direction
|
||||
local dir = self.object:get_yaw()
|
||||
local dir_cos = math.cos(dir)
|
||||
local dir_sin = math.sin(dir)
|
||||
|
||||
-- Go forward if "is_going_forward" is true
|
||||
if self.is_going_forward then
|
||||
--local pos = self.object:get_pos()
|
||||
local vel = self.object:get_velocity()
|
||||
vel.x = vel.x + dir_cos * self.walk_acceleration_speed
|
||||
vel.z = vel.z + dir_sin * self.walk_acceleration_speed
|
||||
self.object:set_velocity(vel)
|
||||
end
|
||||
|
||||
|
||||
-- some chance of chaning rotation_direction to random value
|
||||
if math.random(10) == 1 then
|
||||
--self.rotation_direction = math.random(-1, 1)
|
||||
local rand = math.random()
|
||||
|
||||
if rand < 0.2 then
|
||||
self.rotation_direction = 1
|
||||
elseif rand < 0.4 then
|
||||
self.rotation_direction = -1
|
||||
else
|
||||
self.rotation_direction = 0
|
||||
end
|
||||
end
|
||||
|
||||
-- update rotation_velocity
|
||||
self.rotation_velocity = self.rotation_velocity + self.rotation_direction * self.rotation_acceleration_speed * dtime
|
||||
|
||||
-- update rotation
|
||||
self.object:set_yaw(self.object:get_yaw() + self.rotation_velocity * dtime)
|
||||
|
||||
-- apply rotation_friction
|
||||
self.rotation_velocity = self.rotation_velocity * (1 - self.rotation_friction * dtime)
|
||||
|
||||
|
||||
-- Make it also jump when some block is in front of it
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
pos.x = pos.x + dir_cos
|
||||
pos.z = pos.z + dir_sin
|
||||
|
||||
local bnode = minetest.get_node(pos)
|
||||
--if bnode.name == "air" or bnode.name == "amogus_blocks:water_source" or bnode.name == "amogus_blocks:water_flowing" then
|
||||
-- if node is not solid OR is a liquid
|
||||
if minetest.registered_nodes[bnode.name].walkable == false or minetest.registered_nodes[bnode.name].liquidtype ~= "none" then
|
||||
self.block_lastly_in_front = false
|
||||
-- if node next to the entity is a solid block
|
||||
else
|
||||
if self.block_lastly_in_front == false then
|
||||
self.block_lastly_in_front = true
|
||||
local vel = self.object:get_velocity()
|
||||
vel.y = vel.y + (math.random() * self.min_max_jump_force_diff + self.min_jump_force)
|
||||
self.object:set_velocity(vel)
|
||||
-- randomly jump in the next iteration even if theres still a block in front
|
||||
elseif math.random(10) == 1 then
|
||||
self.block_lastly_in_front = false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
local vel = self.object:get_velocity()
|
||||
|
||||
-- apply bounciness if last_y_velocity was negative and now is 0
|
||||
if self.last_y_velocity < 0 and vel.y == 0 then
|
||||
vel.y = vel.y - self.last_y_velocity * self.bounciness
|
||||
end
|
||||
|
||||
-- change velocity by gravity
|
||||
vel.y = vel.y - self.gravity * dtime * 2
|
||||
|
||||
-- change velocity by friction
|
||||
vel.x = vel.x * (1 - self.friction * dtime)
|
||||
vel.z = vel.z * (1 - self.friction * dtime)
|
||||
|
||||
self.object:set_velocity(vel)
|
||||
|
||||
self.last_y_velocity = vel.y
|
||||
end
|
||||
}
|
||||
|
||||
minetest.register_entity("amogus_entities:amogus_villager", entity)
|
||||
|
||||
-- create an item for spawning the entity
|
||||
minetest.register_craftitem("amogus_entities:amogus_villager_item", {
|
||||
description = "Amogus Villager",
|
||||
inventory_image = "amogus_villager_item.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
local pos = user:get_pos()
|
||||
pos.y = pos.y + 1.5
|
||||
minetest.add_entity(pos, "amogus_entities:amogus_villager")
|
||||
end
|
||||
})
|
@ -1,5 +1,4 @@
|
||||
-- Load the entity's lua file
|
||||
dofile(minetest.get_modpath("amogus_entities") .. "/entities/amogus_entity.lua")
|
||||
dofile(minetest.get_modpath("amogus_entities") .. "/entities/mini_crewmate_entity.lua")
|
||||
dofile(minetest.get_modpath("amogus_entities") .. "/entities/sussy_imposter_entity.lua")
|
||||
dofile(minetest.get_modpath("amogus_entities") .. "/entities/villager_amogus.lua")
|
||||
dofile(minetest.get_modpath("amogus_entities") .. "/entities/sussy_imposter_entity.lua")
|
Loading…
Reference in New Issue
Block a user