1491 | | z = GetPositionZ(); |
1492 | | |
1493 | | UpdateGroundPositionZ(x,y,z); |
1494 | | } |
| 1491 | z = GetPositionZ(); |
| 1492 | |
| 1493 | UpdateGroundPositionZ(x,y,z); |
| 1494 | } |
| 1495 | |
| 1496 | void WorldObject::GetRandomContactPoint( const WorldObject* obj, float &x, float &y, float &z, float distance2dMin, float distance2dMax ) const |
| 1497 | { |
| 1498 | float object_size = obj->GetObjectSize();//here we use object_size to determine the angle offset, the bigger object the smaller angle offset, then this makes mob move naturally in visual. |
| 1499 | //let assume 12.0f is the max size for object to have 0 angle offset. |
| 1500 | float angle_offset_ratio = 1 - object_size/12.0f; |
| 1501 | if (angle_offset_ratio < 0.05) angle_offset_ratio = 0.05; |
| 1502 | // angle to face `obj` to `this`plus a random angle offset(from -90 degree to 90 degree)*angle_offset_ratio using distance from distance2dMin to distance2dMax includes size of `obj` |
| 1503 | GetNearPoint(obj,x,y,z,object_size,distance2dMin+(distance2dMax-distance2dMin)*rand_norm(), GetAngle( obj ) + (M_PI_2 - M_PI * rand_norm()) * angle_offset_ratio); |
| 1504 | } |