@@ -37,6 +37,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
37
37
#include " script/scripting_client.h"
38
38
39
39
#define CAMERA_OFFSET_STEP 200
40
+ #define WIELDMESH_OFFSET_X 55 .0f
41
+ #define WIELDMESH_OFFSET_Y -35 .0f
40
42
41
43
Camera::Camera (MapDrawControl &draw_control, Client *client):
42
44
m_draw_control(draw_control),
@@ -192,8 +194,8 @@ void Camera::step(f32 dtime)
192
194
193
195
static inline v2f dir (const v2f &pos_dist)
194
196
{
195
- f32 x = pos_dist.X - 55 . 0f ;
196
- f32 y = pos_dist.Y + 35 . 0f ;
197
+ f32 x = pos_dist.X - WIELDMESH_OFFSET_X ;
198
+ f32 y = pos_dist.Y - WIELDMESH_OFFSET_Y ;
197
199
198
200
f32 x_abs = std::fabs (x);
199
201
f32 y_abs = std::fabs (y);
@@ -211,10 +213,12 @@ static inline v2f dir(const v2f &pos_dist)
211
213
return v2f (std::fabs (x), std::fabs (y));
212
214
}
213
215
214
- void Camera::addArmInertia (f32 player_yaw, f32 frametime )
216
+ void Camera::addArmInertia (f32 player_yaw)
215
217
{
216
- m_cam_vel.X = std::fabs ((m_last_cam_pos.X - player_yaw) / frametime) * 0 .01f ;
217
- m_cam_vel.Y = std::fabs ((m_last_cam_pos.Y - m_camera_direction.Y ) / frametime);
218
+ m_cam_vel.X = std::fabs ((m_last_cam_pos.X - player_yaw) / 0 .016f ) * 0 .01f ;
219
+ m_cam_vel.Y = std::fabs ((m_last_cam_pos.Y - m_camera_direction.Y ) / 0 .016f );
220
+ f32 gap_X = std::fabs (WIELDMESH_OFFSET_X - m_wieldmesh_offset.X );
221
+ f32 gap_Y = std::fabs (WIELDMESH_OFFSET_Y - m_wieldmesh_offset.Y );
218
222
219
223
if (m_cam_vel.X > 1 .0f || m_cam_vel.Y > 1 .0f ) {
220
224
/*
@@ -226,40 +230,29 @@ void Camera::addArmInertia(f32 player_yaw, f32 frametime)
226
230
if (m_cam_vel.X > m_cam_vel_old.X )
227
231
m_cam_vel_old.X = m_cam_vel.X ;
228
232
229
- if (m_last_cam_pos.X > player_yaw) {
230
- // right
231
- m_cam_vel.X -= std::fabs (55 .0f - m_wieldmesh_offset.X ) * 0 .1f ;
232
- m_wieldmesh_offset.X -= (0 .1f + frametime) * m_cam_vel.X ;
233
- } else {
234
- // left
235
- m_cam_vel.X += std::fabs (55 .0f - m_wieldmesh_offset.X ) * 0 .1f ;
236
- m_wieldmesh_offset.X += (0 .1f + frametime) * m_cam_vel.X ;
237
- }
233
+ f32 acc_X = 0 .12f * (m_cam_vel.X - (gap_X * 0 .1f ));
234
+ m_wieldmesh_offset.X += m_last_cam_pos.X < player_yaw ? acc_X : -acc_X;
238
235
239
236
if (m_last_cam_pos.X != player_yaw)
240
237
m_last_cam_pos.X = player_yaw;
241
238
242
- m_wieldmesh_offset.X = rangelim (m_wieldmesh_offset.X , 48 .0f , 62 .0f );
239
+ m_wieldmesh_offset.X = rangelim (m_wieldmesh_offset.X ,
240
+ WIELDMESH_OFFSET_X - 7 .0f , WIELDMESH_OFFSET_X + 7 .0f );
243
241
}
244
242
245
243
if (m_cam_vel.Y > 1 .0f ) {
246
244
if (m_cam_vel.Y > m_cam_vel_old.Y )
247
245
m_cam_vel_old.Y = m_cam_vel.Y ;
248
246
249
- if (m_last_cam_pos.Y > m_camera_direction.Y ) {
250
- // down
251
- m_cam_vel.Y -= std::fabs (-35 .0f - m_wieldmesh_offset.Y ) * 0 .1f ;
252
- m_wieldmesh_offset.Y += (0 .1f + frametime) * m_cam_vel.Y ;
253
- } else {
254
- // up
255
- m_cam_vel.Y += std::fabs (-35 .0f - m_wieldmesh_offset.Y ) * 0 .1f ;
256
- m_wieldmesh_offset.Y -= (0 .1f + frametime) * m_cam_vel.Y ;
257
- }
247
+ f32 acc_Y = 0 .12f * (m_cam_vel.Y - (gap_Y * 0 .1f ));
248
+ m_wieldmesh_offset.Y +=
249
+ m_last_cam_pos.Y > m_camera_direction.Y ? acc_Y : -acc_Y;
258
250
259
251
if (m_last_cam_pos.Y != m_camera_direction.Y )
260
252
m_last_cam_pos.Y = m_camera_direction.Y ;
261
253
262
- m_wieldmesh_offset.Y = rangelim (m_wieldmesh_offset.Y , -45 .0f , -30 .0f );
254
+ m_wieldmesh_offset.Y = rangelim (m_wieldmesh_offset.Y ,
255
+ WIELDMESH_OFFSET_Y - 10 .0f , WIELDMESH_OFFSET_Y + 5 .0f );
263
256
}
264
257
265
258
m_arm_dir = dir (m_wieldmesh_offset);
@@ -269,28 +262,23 @@ void Camera::addArmInertia(f32 player_yaw, f32 frametime)
269
262
following a vector, with a smooth deceleration factor.
270
263
*/
271
264
272
- f32 acc_X = (m_cam_vel_old.X * (1 .0f + (1 .0f - m_arm_dir.X ))) /
273
- (20 .0f / std::fabs (55 .0f - m_wieldmesh_offset.X ));
274
- f32 acc_Y = (m_cam_vel_old.Y * (1 .0f + (1 .0f - m_arm_dir.Y ))) /
275
- (15 .0f / std::fabs (-35 .0f - m_wieldmesh_offset.Y ));
265
+ f32 dec_X = 0 .12f * (m_cam_vel_old.X * (1 .0f +
266
+ (1 .0f - m_arm_dir.X ))) * (gap_X / 20 .0f );
276
267
277
- if ( std::fabs ( 55 . 0f - m_wieldmesh_offset. X ) < 0 . 1f )
278
- m_cam_vel_old. X = 0 . 0f ;
268
+ f32 dec_Y = 0 . 06f * (m_cam_vel_old. Y * ( 1 . 0f +
269
+ ( 1 . 0f - m_arm_dir. Y ))) * (gap_Y / 15 . 0f ) ;
279
270
280
- if (m_wieldmesh_offset. X > 55 . 0f )
281
- m_wieldmesh_offset .X -= ( 0 . 2f + frametime) * acc_X ;
271
+ if (gap_X < 0 . 1f )
272
+ m_cam_vel_old .X = 0 . 0f ;
282
273
283
- if ( m_wieldmesh_offset.X < 55 . 0f )
284
- m_wieldmesh_offset.X += ( 0 . 2f + frametime) * acc_X ;
274
+ m_wieldmesh_offset.X -=
275
+ m_wieldmesh_offset.X > WIELDMESH_OFFSET_X ? dec_X : -dec_X ;
285
276
286
- if (std::fabs (- 35 . 0f - m_wieldmesh_offset. Y ) < 0 .1f )
277
+ if (gap_Y < 0 .1f )
287
278
m_cam_vel_old.Y = 0 .0f ;
288
279
289
- if (m_wieldmesh_offset.Y > -35 .0f )
290
- m_wieldmesh_offset.Y -= (0 .1f + frametime) * acc_Y;
291
-
292
- if (m_wieldmesh_offset.Y < -35 .0f )
293
- m_wieldmesh_offset.Y += (0 .1f + frametime) * acc_Y;
280
+ m_wieldmesh_offset.Y -=
281
+ m_wieldmesh_offset.Y > WIELDMESH_OFFSET_Y ? dec_Y : -dec_Y;
294
282
}
295
283
}
296
284
@@ -482,8 +470,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime,
482
470
m_cameranode->setAspectRatio (m_aspect);
483
471
m_cameranode->setFOV (m_fov_y);
484
472
485
- if (m_arm_inertia && frametime > 0 . 0f )
486
- addArmInertia (player->getYaw (), frametime );
473
+ if (m_arm_inertia)
474
+ addArmInertia (player->getYaw ());
487
475
488
476
// Position the wielded item
489
477
// v3f wield_position = v3f(45, -35, 65);
0 commit comments