Added Sussy Imposter (he's very sussy and he wants to kill you) and improved jumping of every entity
This commit is contained in:
@@ -66,11 +66,11 @@ local entity = {
|
||||
|
||||
player = nil,
|
||||
player_pos = nil,
|
||||
mini_crewmate_pos = nil,
|
||||
crewmate_player_vector = nil,
|
||||
entity_pos = nil,
|
||||
entity_player_vector = nil,
|
||||
distance = nil,
|
||||
current_distance = nil,
|
||||
current_crewmate_player_vector = nil,
|
||||
current_entity_player_vector = nil,
|
||||
|
||||
|
||||
|
||||
@@ -136,30 +136,29 @@ local entity = {
|
||||
self.player = minetest.get_connected_players()[1]
|
||||
|
||||
self.player_pos = self.player:get_pos()
|
||||
self.mini_crewmate_pos = self.object:get_pos()
|
||||
self.crewmate_player_vector = vector.subtract(self.player_pos, self.mini_crewmate_pos)
|
||||
self.distance = vector.length(self.crewmate_player_vector)
|
||||
self.entity_pos = self.object:get_pos()
|
||||
self.entity_player_vector = vector.subtract(self.player_pos, self.entity_pos)
|
||||
self.distance = vector.length(self.entity_player_vector)
|
||||
-- if on multiplayer mode, calculate distance between nearest player and mini crewmate
|
||||
else
|
||||
self.player = minetest.get_connected_players()
|
||||
|
||||
self.distance = nil
|
||||
self.crewmate_player_vector = nil
|
||||
self.entity_player_vector = nil
|
||||
|
||||
self.mini_crewmate_pos = self.object:get_pos()
|
||||
self.entity_pos = self.object:get_pos()
|
||||
|
||||
-- iterate over all players
|
||||
for i = 1, #self.player do
|
||||
minetest.chat_send_all("player " .. i)
|
||||
self.player_pos = self.player[i]:get_pos()
|
||||
--self.crewmate_player_vector = vector.subtract(self.player_pos, self.mini_crewmate_pos)
|
||||
self.current_crewmate_player_vector = vector.subtract(self.player_pos, self.mini_crewmate_pos)
|
||||
self.current_distance = vector.length(self.current_crewmate_player_vector)
|
||||
--self.entity_player_vector = vector.subtract(self.player_pos, self.entity_pos)
|
||||
self.current_entity_player_vector = vector.subtract(self.player_pos, self.entity_pos)
|
||||
self.current_distance = vector.length(self.current_entity_player_vector)
|
||||
|
||||
-- if distance is nil or current_distance is smaller than distance, set distance to current_distance
|
||||
if self.distance == nil or self.current_distance < self.distance then
|
||||
self.distance = self.current_distance
|
||||
self.crewmate_player_vector = self.current_crewmate_player_vector
|
||||
self.entity_player_vector = self.current_entity_player_vector
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -240,10 +239,10 @@ local entity = {
|
||||
-- if mode is 3 (run away) set rotation so mini crewmate is facing either at the player or away from the player depending on situation
|
||||
if self.mode == 3 then
|
||||
-- look away from the player
|
||||
self.object:set_yaw(math.atan2(-self.crewmate_player_vector.z, -self.crewmate_player_vector.x))
|
||||
self.object:set_yaw(math.atan2(-self.entity_player_vector.z, -self.entity_player_vector.x))
|
||||
else
|
||||
-- look at the player
|
||||
self.object:set_yaw(math.atan2(self.crewmate_player_vector.z, self.crewmate_player_vector.x))
|
||||
self.object:set_yaw(math.atan2(self.entity_player_vector.z, self.entity_player_vector.x))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -281,14 +280,20 @@ local entity = {
|
||||
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 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 + self.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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user