]> git.lizzy.rs Git - Crafter.git/blob - mods/mob/movement_code.lua
Rebalance EVERYTHING
[Crafter.git] / mods / mob / movement_code.lua
1 --this is where all the movement code is stored for the pig mob
2
3 --This makes the mob walk at a certain speed and jump
4 pig.move = function(self,dtime)
5         self.manage_jump_timer(self,dtime)
6         self.timer = self.timer - dtime
7         
8         --jump
9         self.jump(self)
10         
11         --swim
12         self.swim(self,dtime)
13         
14         --print(self.timer)
15         --direction state change
16         if self.timer <= 0 and not self.following == true then
17                 --print("changing direction")
18                 self.timer = math.random(2,7)
19                 self.direction = vector.new(math.random()*math.random(-1,1),0,math.random()*math.random(-1,1))
20                 --local yaw = self.object:get_yaw() + dtime
21                 self.speed = math.random(0,6)
22                 --self.object:set_yaw(yaw)
23         end
24
25         local currentvel = self.object:getvelocity()
26         local goal = vector.multiply(self.direction,self.speed)
27         local acceleration = vector.new(goal.x-currentvel.x,0,goal.z-currentvel.z)
28         acceleration = vector.multiply(acceleration, 0.05)
29         self.object:add_velocity(acceleration)
30 end
31
32 --use raycasting to jump
33 pig.jump = function(self)
34         if self.jump_timer <= 0 then
35                 local vel = self.object:get_velocity()
36                 if (self.direction.x ~= 0 and vel.x == 0) or (self.direction.z ~= 0 and vel.z == 0) then
37                         local pos = self.object:get_pos()
38                         local ground_distance = self.object:get_properties().collisionbox[2]
39                         local ray = minetest.raycast(pos, vector.add(pos, vector.new(0,ground_distance*1.1,0)), false, false)   
40                         if ray then
41                                 for pointed_thing in ray do
42                                         local collision_point = pointed_thing.under
43                                         if collision_point then
44                                                 local walkable = minetest.registered_nodes[minetest.get_node(collision_point).name].walkable
45                                                 if walkable then
46                                                         local distance = vector.subtract(collision_point,pos).y-self.object:get_properties().collisionbox[2]+0.4
47                                                         if distance >= -0.11 then
48                                                                 local vel = self.object:get_velocity()
49                                                                 self.jump_timer = 0.5
50                                                                 self.object:add_velocity(vector.new(vel.x,5,vel.z))
51                                                         end
52                                                 end
53                                         end
54                                 end
55                         end
56                 end
57         end
58 end
59
60 --makes the mob swim
61 pig.swim = function(self,dtime)
62         local pos = self.object:getpos()
63         pos.y = pos.y + 0.3
64         local node = minetest.get_node(pos).name
65         self.swimming = false
66         if node == "main:water" or node =="main:waterflow" then
67                 local vel = self.object:getvelocity()
68                 local goal = 3
69                 local acceleration = vector.new(0,goal-vel.y,0)
70                 --jump out of the water
71                 if (vel.x == 0 and self.direction.x ~= 0) or (vel.z == 0 and self.direction.z ~= 0) then
72                         self.object:set_velocity(vector.new(vel.x,5,vel.z))
73                 --else swim
74                 else
75                         self.object:add_velocity(acceleration)
76                 end
77                 self.swimming = true
78         end
79 end