32
32
33
33
local boat = {
34
34
physical = true ,
35
- collisionbox = {- 0.6 , - 0.4 , - 0.6 , 0.6 , 0.3 , 0.6 },
35
+ collisionbox = {- 0.5 , - 0.4 , - 0.5 , 0.5 , 0.3 , 0.5 },
36
36
visual = " mesh" ,
37
37
mesh = " boat.x" ,
38
38
textures = {" default_wood.png" },
@@ -104,19 +104,17 @@ function boat.on_step(self, dtime)
104
104
local yaw = self .object :getyaw ()
105
105
if ctrl .up then
106
106
self .v = self .v + 0.1
107
- end
108
- if ctrl .down then
109
- self .v = self .v - 0.08
107
+ elseif ctrl .down then
108
+ self .v = self .v - 0.1
110
109
end
111
110
if ctrl .left then
112
- if ctrl . down then
111
+ if self . v < 0 then
113
112
self .object :setyaw (yaw - (1 + dtime ) * 0.03 )
114
113
else
115
114
self .object :setyaw (yaw + (1 + dtime ) * 0.03 )
116
115
end
117
- end
118
- if ctrl .right then
119
- if ctrl .down then
116
+ elseif ctrl .right then
117
+ if self .v < 0 then
120
118
self .object :setyaw (yaw + (1 + dtime ) * 0.03 )
121
119
else
122
120
self .object :setyaw (yaw - (1 + dtime ) * 0.03 )
@@ -125,6 +123,7 @@ function boat.on_step(self, dtime)
125
123
end
126
124
local velo = self .object :getvelocity ()
127
125
if self .v == 0 and velo .x == 0 and velo .y == 0 and velo .z == 0 then
126
+ self .object :setpos (self .object :getpos ())
128
127
return
129
128
end
130
129
local s = get_sign (self .v )
@@ -148,30 +147,33 @@ function boat.on_step(self, dtime)
148
147
self .v = 0
149
148
new_acce = {x = 0 , y = 1 , z = 0 }
150
149
else
151
- new_acce = {x = 0 , y = - 9.8 , z = 0 } -- freefall in air -9.81
150
+ new_acce = {x = 0 , y = - 9.8 , z = 0 }
152
151
end
153
152
new_velo = get_velocity (self .v , self .object :getyaw (), self .object :getvelocity ().y )
153
+ self .object :setpos (self .object :getpos ())
154
154
else
155
155
p .y = p .y + 1
156
156
if is_water (p ) then
157
- new_acce = {x = 0 , y = 3 , z = 0 }
158
157
local y = self .object :getvelocity ().y
159
- if y > 2 then
160
- y = 2
161
- end
162
- if y < 0 then
163
- self .object :setacceleration ({x = 0 , y = 10 , z = 0 })
158
+ if y >= 4.5 then
159
+ y = 4.5
160
+ elseif y < 0 then
161
+ new_acce = {x = 0 , y = 20 , z = 0 }
162
+ else
163
+ new_acce = {x = 0 , y = 5 , z = 0 }
164
164
end
165
165
new_velo = get_velocity (self .v , self .object :getyaw (), y )
166
+ self .object :setpos (self .object :getpos ())
166
167
else
167
168
new_acce = {x = 0 , y = 0 , z = 0 }
168
- if math.abs (self .object :getvelocity ().y ) <= 2 then
169
+ if math.abs (self .object :getvelocity ().y ) < 1 then
169
170
local pos = self .object :getpos ()
170
171
pos .y = math.floor (pos .y ) + 0.5
171
172
self .object :setpos (pos )
172
173
new_velo = get_velocity (self .v , self .object :getyaw (), 0 )
173
174
else
174
175
new_velo = get_velocity (self .v , self .object :getyaw (), self .object :getvelocity ().y )
176
+ self .object :setpos (self .object :getpos ())
175
177
end
176
178
end
177
179
end
181
183
182
184
minetest .register_entity (" boats:boat" , boat )
183
185
184
-
185
186
minetest .register_craftitem (" boats:boat" , {
186
187
description = " Boat" ,
187
188
inventory_image = " boat_inventory.png" ,
@@ -213,3 +214,4 @@ minetest.register_craft({
213
214
{" group:wood" , " group:wood" , " group:wood" },
214
215
},
215
216
})
217
+
0 commit comments