Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.11 KB | None | 0 0
  1. public void moveRiders(Entity rider)
  2. {
  3. if(isPartOfThis(rider)) return;
  4. boolean isHuman = false;
  5. boolean isDriveable = false;
  6. if(!(rider instanceof EntityPlayer)) return;
  7. Vector3f riderPos = new Vector3f (rider.posX, rider.posY, rider.posZ);
  8. Vector3f riderMotion = new Vector3f(rider.motionX, rider.motionY, rider.motionY);
  9. Vector3f vehicleMotion = new Vector3f(posX - lastPos.x, posY - lastPos.y, posZ - lastPos.z);
  10. if(rider instanceof EntityVehicle) vehicleMotion = ((EntityVehicle)rider).lastPos;
  11. //riderMotion = Vector3f.sub(riderMotion, vehicleMotion, riderMotion);
  12. Vector3f vehiclePos = new Vector3f(this.posX, this.posY, this.posZ);
  13. Vector3f relativePos = Vector3f.sub(riderPos, vehiclePos, null);
  14. if(rider instanceof EntityPlayer) isHuman = true;
  15. if(rider instanceof EntityDriveable) isDriveable = true;
  16. relativePos = new Vector3f(relativePos.x, relativePos.y - ((isHuman)?0.55F:0), relativePos.z);
  17.  
  18. Vector3f rotatedPosVector = axes.findGlobalVectorLocally(relativePos);
  19. Vector3f rotatedMotionVector = axes.findGlobalVectorLocally(riderMotion);
  20.  
  21. Vector3f ellipsoid = new Vector3f(rider.width/2, rider.height, rider.width/2);
  22.  
  23. CollisionTest test = new CollisionTest(ellipsoid, new Vector3f(relativePos.x, relativePos.y, relativePos.z), riderMotion);
  24. test.collisionRecursiveDepth = 0;
  25.  
  26. Vector3f eSpacePosition = test.ConvertR3ToESpace(test.R3Position);
  27. Vector3f eSpaceVelocity = test.velocity;
  28.  
  29. //Vector3f finalPos = collideWithDriveable(test, eSpacePosition, eSpaceVelocity);
  30. DriveableType type = getDriveableType();
  31. //Check parts for collision
  32. if(type.fancyCollision)
  33. {
  34. //checkCollision(test, getDriveableType().colbox);
  35. for(CollisionShapeBox sbox: type.collisionBox)
  36. {
  37. checkCollision(test, sbox);
  38. }
  39. } else {
  40. for(DriveablePart ppart : getDriveableData().parts.values())
  41. {
  42. ppart.rayTraceRider(this, test);
  43. }
  44. }
  45.  
  46. if(test.didCollide){
  47. Vector3f finalPos = collideWithDriveable(test, eSpacePosition, eSpaceVelocity);
  48. if(rider instanceof EntityAnimal) return;
  49. Vector3f velocity = Vector3f.sub(finalPos, test.basePoint, null);
  50. test.ConvertESpaceToR3(velocity);
  51. finalPos = new Vector3f(finalPos.x * test.eRad.x, finalPos.y * test.eRad.y, finalPos.z * test.eRad.z);
  52. Vector3f diff = Vector3f.sub(finalPos, vehiclePos, null);
  53.  
  54.  
  55. if(rider.onGround && (posY + finalPos.y + 10/16F) < riderPos.y)
  56. {
  57. //finalPos = new Vector3f(finalPos.x, 0, finalPos.z);
  58. }
  59. //boolean onTop = (rider.posY + 0.65 > test.intersectionPoint.y);
  60.  
  61. boolean stationary = (throttle == 0);
  62.  
  63. //If finalPos returns null, do something about it. Probably not the best way to handle this.
  64. if(finalPos == null) finalPos = new Vector3f(0,0,0);
  65. test.ConvertESpaceToR3(finalPos);
  66. boolean onTop = (test.collisionPlaneNormal.y >= 0.5F);
  67. if(!hugeBoat)
  68. rider.setPosition((!onTop)?riderPos.x + finalPos.x/(48*Math.abs(relativePos.x)): riderPos.x,(onTop)?posY + finalPos.y + 10/16F:riderPos.y,(!onTop)?riderPos.z + finalPos.z/(48*Math.abs(relativePos.z)): riderPos.z);
  69. //test.ConvertESpaceToR3(test.intersectionPoint);
  70. //FlansMod.proxy.spawnParticle("flame", test.intersectionPoint.x + posX, test.intersectionPoint.y + posY - 1, test.intersectionPoint.z + posZ, 0, 0, 0);
  71.  
  72. if(hugeBoat && !stationary){
  73. rider.setPosition(riderPos.x, posY + finalPos.y + 9.5/16F,riderPos.z);
  74. } else if (hugeBoat && stationary) {
  75. rider.setPosition(riderPos.x, posY + finalPos.y + 10/16F,riderPos.z);
  76. }
  77. finalPos = Vector3f.sub(finalPos, riderPos, null);
  78. finalPos.normalise();
  79.  
  80. //rider.motionX = rider.motionX * finalPos.x;
  81. rider.motionY = 0;
  82. //rider.motionZ = rider.motionZ * finalPos.z;
  83.  
  84.  
  85. //Vector3f intersect = test.intersectionPoint;
  86. //worldObj.spawnParticle((test.isOnTop)?"fireworksSpark":"explode", posX + intersect.x, posY + intersect.y, posZ + intersect.z, 0,1,0);
  87. //worldObj.spawnParticle((test.isOnTop)?"fireworksSpark":"explode", posX, posY, posZ, 0,1,0);
  88. //worldObj.spawnParticle((test.isOnTop)?"fireworksSpark":"explode", riderPos.x, riderPos.y, riderPos.z, 0,1,0);
  89.  
  90. //worldObj.spawnParticle("crit", posX + finalPos.x, posY + finalPos.y, posZ + finalPos.z, 0,0,0);
  91. //worldObj.spawnParticle("reddust", riderPos.x, riderPos.y - 0.65, riderPos.z, 0,0,0);
  92.  
  93.  
  94. updateRiderPos(rider, test, finalPos, riderMotion);
  95.  
  96. if(getDriveableType().collisionDamageEnable && !test.isOnTop)
  97. {
  98. if(throttle > getDriveableType().collisionDamageThrottle)
  99. {
  100. boolean canDamage = true;
  101. if(TeamsManager.getInstance() != null && TeamsManager.getInstance().currentRound != null && rider instanceof EntityPlayerMP && seats[0].riddenByEntity instanceof EntityPlayer)
  102. {
  103. EntityPlayerMP attacker = (EntityPlayerMP)seats[0].riddenByEntity;
  104. EntityPlayerMP player = (EntityPlayerMP)rider;
  105. if(TeamsManager.getInstance().currentRound.gametype.getPlayerData(attacker) != null && TeamsManager.getInstance().currentRound.gametype.getPlayerData(attacker).team != null)
  106. {
  107. if(TeamsManager.getInstance().currentRound.gametype.getPlayerData(player) != null && TeamsManager.getInstance().currentRound.gametype.getPlayerData(player).team != null)
  108. {
  109. if(TeamsManager.getInstance().currentRound.gametype.getPlayerData(player).team == TeamsManager.getInstance().currentRound.gametype.getPlayerData(attacker).team)
  110. {
  111. canDamage = false;
  112. }
  113. }
  114. }
  115. }
  116. for(EntitySeat seat : seats)
  117. {
  118. if(rider == seat.lastRiddenByEntity)
  119. canDamage = false;
  120. }
  121.  
  122.  
  123.  
  124. if(canDamage){
  125. if(rider instanceof EntityLiving){
  126. rider.attackEntityFrom(DamageSource.generic, throttle*getDriveableType().collisionDamageTimes);
  127. }else if(rider instanceof EntityPlayer){
  128. rider.attackEntityFrom(DamageSource.generic, throttle*getDriveableType().collisionDamageTimes);
  129. }
  130. }
  131. }
  132. }
  133. if(rider instanceof EntityPlayer){
  134. EntityPlayer player = (EntityPlayer)rider;
  135. //playerIDs.add(player);
  136. player.onGround = true;
  137. player.isAirBorne = false;
  138. player.fallDistance = 0;
  139. }
  140.  
  141. }
  142.  
  143. else
  144. {
  145. if(rider instanceof EntityDriveable)
  146. {
  147. //((EntityDriveable)rider).onDeck = false;
  148. ((EntityDriveable)rider).deckHeight = 0;
  149. }
  150. }
  151.  
  152.  
  153. }
  154. /**
  155. @SubscribeEvent
  156. public void updateRiders(LivingUpdateEvent event){
  157.  
  158. for(EntityPlayer player: playerIDs){
  159. Entity p = (Entity)player;
  160. if(p == event.entity){
  161. player.onGround = true;
  162. player.isAirBorne = false;
  163. player.fallDistance = 0;
  164. playerIDs.remove(player);
  165. }
  166. }
  167. }
  168. */
  169. public void checkCollision(CollisionTest tester, CollisionShapeBox box)
  170. {
  171. {
  172. double distance = tester.nearestDistance;
  173. Vector3f collisionPoint = new Vector3f(0,0,0);
  174. int surface = 0;
  175.  
  176. Vector3f pos = new Vector3f(this.posX, this.posY, this.posZ);
  177.  
  178. RotatedAxes shift = axes;
  179.  
  180. float f4 = box.pos.x + box.size.x;
  181. float f5 = -box.pos.y + box.size.y;
  182. float f6 = box.pos.z + box.size.z;
  183.  
  184. box.pos = new Vector3f(box.pos.x, box.pos.y, box.pos.z);
  185. //if(EnumDriveablePart.getPart(box.part) == EnumDriveablePart.turret) return;
  186. //Define box verticies, where z > 0 is right. See shapeboxes in the toolbox for a visual reference
  187. Vector3f p1 = new Vector3f(box.pos.x - box.p1.x, box.pos.y + box.size.y + box.p1.y - box.size.y + 0.625F, box.pos.z - box.p1.z);
  188. Vector3f p2 = new Vector3f(box.pos.x + box.size.x + box.p2.x,box.pos.y + box.size.y + box.p2.y - box.size.y + 0.625F, box.pos.z - box.p2.z);
  189. Vector3f p3 = new Vector3f(box.pos.x + box.size.x + box.p3.x, box.pos.y + box.size.y + box.p3.y - box.size.y + 0.625F, box.pos.z + box.size.z + box.p3.z);
  190. Vector3f p4 = new Vector3f(box.pos.x - box.p4.x, box.pos.y + box.size.y + box.p4.y - box.size.y + 0.625F, box.pos.z + box.size.z + box.p4.z);
  191. Vector3f p5 = new Vector3f(box.pos.x - box.p5.x, box.pos.y - box.p5.y - box.size.y + 0.625F, box.pos.z - box.p5.z);
  192. Vector3f p6 = new Vector3f(box.pos.x + box.size.x + box.p6.x, box.pos.y - box.p6.y - box.size.y + 0.625F, box.pos.z - box.p6.z);
  193. Vector3f p7 = new Vector3f(box.pos.x + box.size.x + box.p7.x, box.pos.y - box.p7.y - box.size.y + 0.625F, box.pos.z + box.size.z + box.p7.z);
  194. Vector3f p8 = new Vector3f(box.pos.x - box.p8.x, box.pos.y - box.p8.y - box.size.y + 0.625F, box.pos.z + box.size.z + box.p8.z);
  195.  
  196. if(EnumDriveablePart.getPart(box.part) == EnumDriveablePart.turret && seats[0] != null)
  197. {
  198. p1 = getPositionOnTurret(p1, false); //Front upper left
  199. p2 = getPositionOnTurret(p2, false); //Front upper right
  200. p3 = getPositionOnTurret(p3, false); //Rear upper right
  201. p4 = getPositionOnTurret(p4, false); //Rear upper left
  202. p5 = getPositionOnTurret(p5, false); //Front lower left
  203. p6 = getPositionOnTurret(p6, false); //Front lower right
  204. p7 = getPositionOnTurret(p7, false); //Rear lower right
  205. p8 = getPositionOnTurret(p8, false); //Rear lower left
  206. } else {
  207. p1 = shift.findLocalVectorGlobally(p1);
  208. p2 = shift.findLocalVectorGlobally(p2);
  209. p3 = shift.findLocalVectorGlobally(p3);
  210. p4 = shift.findLocalVectorGlobally(p4);
  211. p5 = shift.findLocalVectorGlobally(p5);
  212. p6 = shift.findLocalVectorGlobally(p6);
  213. p7 = shift.findLocalVectorGlobally(p7);
  214. p8 = shift.findLocalVectorGlobally(p8);
  215. }
  216.  
  217.  
  218. //Check top face
  219. double topFaceDist = 100;
  220.  
  221. tester.checkTriangle(tester, p3, p2, p1);
  222. if(tester.didCollide && tester.nearestDistance < distance)
  223. {
  224. collisionPoint = tester.intersectionPoint;
  225. surface = 1;
  226. tester.part = EnumDriveablePart.getPart(box.part);
  227. }
  228.  
  229. tester.checkTriangle(tester, p4, p3, p1);
  230. if(tester.didCollide && tester.nearestDistance < distance)
  231. {
  232. collisionPoint = tester.intersectionPoint;
  233. surface = 1;
  234. tester.part = EnumDriveablePart.getPart(box.part);
  235. }
  236.  
  237. if(tester.didCollide){
  238. tester.isOnTop = true;
  239. topFaceDist = tester.nearestDistance;
  240. }
  241.  
  242. //Check front face
  243. tester.checkTriangle(tester, p6, p7, p3);
  244. if(tester.didCollide && tester.nearestDistance < distance)
  245. {
  246. distance = tester.nearestDistance;
  247. collisionPoint = tester.intersectionPoint;
  248. surface = 2;
  249. tester.part = EnumDriveablePart.getPart(box.part);
  250. }
  251. tester.checkTriangle(tester, p3, p2, p6);
  252. if(tester.didCollide && tester.nearestDistance < distance)
  253. {
  254. distance = tester.nearestDistance;
  255. collisionPoint = tester.intersectionPoint;
  256. surface = 2;
  257. tester.part = EnumDriveablePart.getPart(box.part);
  258. }
  259.  
  260.  
  261. //Check rear face
  262. tester.checkTriangle(tester, p4, p1, p5);
  263. if(tester.didCollide && tester.nearestDistance < distance)
  264. {
  265. distance = tester.nearestDistance;
  266. collisionPoint = tester.intersectionPoint;
  267. surface = 3;
  268. tester.part = EnumDriveablePart.getPart(box.part);
  269. }
  270. tester.checkTriangle(tester, p5, p8, p4);
  271. if(tester.didCollide && tester.nearestDistance < distance)
  272. {
  273. distance = tester.nearestDistance;
  274. collisionPoint = tester.intersectionPoint;
  275. surface = 3;
  276. tester.part = EnumDriveablePart.getPart(box.part);
  277. }
  278.  
  279. //Check Left Face
  280. tester.checkTriangle(tester, p6, p5, p1);
  281. if(tester.didCollide && tester.nearestDistance < distance)
  282. {
  283. distance = tester.nearestDistance;
  284. collisionPoint = tester.intersectionPoint;
  285. surface = 4;
  286. tester.part = EnumDriveablePart.getPart(box.part);
  287. }
  288. tester.checkTriangle(tester, p1, p2, p6);
  289. if(tester.didCollide && tester.nearestDistance < distance)
  290. {
  291. distance = tester.nearestDistance;
  292. collisionPoint = tester.intersectionPoint;
  293. surface = 4;
  294. tester.part = EnumDriveablePart.getPart(box.part);
  295. }
  296.  
  297. //Check right face
  298. tester.checkTriangle(tester, p8, p7, p3);
  299. if(tester.didCollide && tester.nearestDistance < distance)
  300. {
  301. distance = tester.nearestDistance;
  302. collisionPoint = tester.intersectionPoint;
  303. surface = 5;
  304. tester.part = EnumDriveablePart.getPart(box.part);
  305. }
  306. tester.checkTriangle(tester, p3, p4, p8);
  307. if(tester.didCollide && tester.nearestDistance < distance)
  308. {
  309. distance = tester.nearestDistance;
  310. collisionPoint = tester.intersectionPoint;
  311. surface = 5;
  312. tester.part = EnumDriveablePart.getPart(box.part);
  313. }
  314.  
  315. //Check bottom face
  316. tester.checkTriangle(tester, p5, p6, p7);
  317. if(tester.didCollide && tester.nearestDistance < distance)
  318. {
  319. collisionPoint = tester.intersectionPoint;
  320. surface = 1;
  321. tester.part = EnumDriveablePart.getPart(box.part);
  322. }
  323.  
  324. tester.checkTriangle(tester, p8, p7, p5);
  325. if(tester.didCollide && tester.nearestDistance < distance)
  326. {
  327. collisionPoint = tester.intersectionPoint;
  328. surface = 1;
  329. tester.part = EnumDriveablePart.getPart(box.part);
  330. }
  331.  
  332. if(tester.didCollide){
  333. tester.isOnTop = true;
  334. topFaceDist = tester.nearestDistance;
  335. }
  336.  
  337. Vector3f.add(p1, pos, p1);
  338. Vector3f.add(p2, pos, p2);
  339. Vector3f.add(p3, pos, p3);
  340. Vector3f.add(p4, pos, p4);
  341. Vector3f.add(p5, pos, p5);
  342. Vector3f.add(p6, pos, p6);
  343. Vector3f.add(p7, pos, p7);
  344. Vector3f.add(p8, pos, p8);
  345.  
  346. boolean muff = true;
  347. String wank = "crit";
  348.  
  349.  
  350. /**
  351. FlansMod.proxy.spawnParticle(wank, p1.x,p1.y,p1.z, 0,0,0);
  352. FlansMod.proxy.spawnParticle(wank, p2.x,p2.y,p2.z, 0,0,0);
  353. FlansMod.proxy.spawnParticle(wank, p3.x,p3.y,p3.z, 0,0,0);
  354. FlansMod.proxy.spawnParticle(wank, p4.x,p4.y,p4.z, 0,0,0);
  355. FlansMod.proxy.spawnParticle(wank, p5.x,p5.y,p5.z, 0,0,0);
  356. FlansMod.proxy.spawnParticle(wank, p6.x,p6.y,p6.z, 0,0,0);
  357. FlansMod.proxy.spawnParticle(wank, p7.x,p7.y,p7.z, 0,0,0);
  358. FlansMod.proxy.spawnParticle(wank, p8.x,p8.y,p8.z, 0,0,0);
  359. */
  360. //renderTri(p1,p2,p3);
  361. //renderTri(p3,p4,p1);
  362. if(tester.nearestDistance < topFaceDist) tester.isOnTop = false;
  363.  
  364.  
  365. if(surface == 1) tester.isOnTop = true;
  366. }
  367.  
  368. }
  369.  
  370. public void renderTri(Vector3f p1, Vector3f p2, Vector3f p3)
  371. {
  372. Vector3f pos = new Vector3f (posX, posY, posZ);
  373. Vector3f p1a = Vector3f.add(p1, pos, null);
  374. Vector3f p2a = Vector3f.add(p2, pos, null);
  375. Vector3f p3a = Vector3f.add(p3, pos, null);
  376.  
  377. renderLine(p1a,p2a);
  378. renderLine(p2a,p3a);
  379. renderLine(p3a,p1a);
  380. }
  381.  
  382. public void renderLine(Vector3f in, Vector3f out)
  383. {
  384. float dx = out.x - in.x;
  385. float dy = out.y - in.y;
  386. float dz = out.z - in.z;
  387. Vector3f diff = Vector3f.sub(out, in, null);
  388. diff.normalise();
  389. float distance = (float)Math.sqrt((dx * dx) + (dy * dy) + (dz * dz));
  390. for(int i = 0; i < 10; i++)
  391. {
  392. float dist2 = (distance/10) * i;
  393. Vector3f newVec = new Vector3f(in.x + (dist2*diff.x),in.y + (dist2*diff.y), in.z + (dist2*diff.z));
  394. FlansMod.proxy.spawnParticle("reddust", newVec.x, newVec.y, newVec.z, 0, 0, 0);
  395. }
  396. }
  397.  
  398.  
  399. public Vector3f collideWithDriveable(CollisionTest tester, Vector3f Pos, Vector3f vel)
  400. {
  401. float unitScale = 1/16F;
  402. float veryCloseDistance = 0.005F * unitScale;
  403.  
  404. if(tester.collisionRecursiveDepth > 2) return Pos;
  405.  
  406. tester.basePoint = Pos;
  407. tester.didCollide = false;
  408.  
  409. if(getDriveableType().fancyCollision)
  410. {
  411. //checkCollision(tester, getDriveableType().colbox);
  412. for(CollisionShapeBox sbox: getDriveableType().collisionBox)
  413. {
  414. checkCollision(tester, sbox);
  415. }
  416. } else {
  417. for(DriveablePart ppart : getDriveableData().parts.values())
  418. {
  419. ppart.rayTraceRider(this, tester);
  420. }
  421. }
  422.  
  423. //If no collision, we just move along the velocity
  424. if(tester.didCollide = false) return Vector3f.add(Pos, vel, null);
  425.  
  426.  
  427. //Collision occured, time to sort this out
  428. Vector3f destinationPoint = Vector3f.add(Pos, vel, null);
  429. Vector3f newBasePoint = Pos;
  430.  
  431. if(tester.nearestDistance >= veryCloseDistance)
  432. {
  433. Vector3f V = vel;
  434. V.normalise();
  435. V.scale((float)(tester.nearestDistance - veryCloseDistance));
  436. newBasePoint = Vector3f.add(tester.basePoint, V, null);
  437.  
  438. if(V.normalise() == new Vector3f(0,0,0)) return Vector3f.add(Pos, vel, null);
  439.  
  440. V.normalise();
  441.  
  442. //Change polygon intersection point so that the sliding plane is unaffected by the fact we move slightly less than collision tells us
  443. Vector3f.sub(tester.intersectionPoint, new Vector3f(V.x * veryCloseDistance, V.y * veryCloseDistance, V.z * veryCloseDistance), tester.intersectionPoint);
  444. }
  445.  
  446. //Determine the sliding plane
  447. Vector3f slidePlaneOrigin = tester.intersectionPoint;
  448. if(tester.intersectionPoint == null) return Vector3f.add(Pos, vel, null);
  449. Vector3f slidePlaneNormal = Vector3f.sub(newBasePoint, tester.intersectionPoint, null);
  450. slidePlaneNormal.normalise();
  451.  
  452. tester.collisionPlaneNormal = slidePlaneNormal;
  453. CollisionPlane plane = new CollisionPlane(slidePlaneOrigin, slidePlaneNormal);
  454.  
  455. double sDV = plane.signedDistanceTo(destinationPoint);
  456. Vector3f scaledNormal = new Vector3f(slidePlaneNormal.x * sDV, slidePlaneNormal.y * sDV, slidePlaneNormal.z * sDV);
  457. Vector3f newDestPoint = Vector3f.sub(destinationPoint, scaledNormal, null);
  458.  
  459. //Generate slide vector
  460. Vector3f newVelocityVector = Vector3f.sub(newDestPoint, tester.intersectionPoint, null);
  461.  
  462. if(newVelocityVector.length() < veryCloseDistance)
  463. {
  464. return newBasePoint;
  465. }
  466.  
  467. tester.collisionRecursiveDepth++;
  468.  
  469. return collideWithDriveable(tester, newBasePoint, newVelocityVector);
  470. }
  471.  
  472. public void updateRiderPos (Entity rider, CollisionTest test, Vector3f pos, Vector3f motion)
  473. {
  474. boolean isDriveable = false;
  475. if(rider instanceof EntityDriveable) isDriveable = true;
  476. Vector3f vehicleMotion = lastPos;
  477.  
  478. Vector3f riderMountPoint = new Vector3f(rider.posX - posX, rider.posY - posY, rider.posZ - posZ);
  479.  
  480. float yawDiff = axes.getYaw() - prevAxes.getYaw();
  481. float pitchDiff = axes.getPitch() - prevAxes.getPitch();
  482. float rollDiff = axes.getRoll() - prevAxes.getRoll();
  483.  
  484. RotatedAxes velAxes = new RotatedAxes(axes.getYaw() + yawDiff, axes.getPitch() + pitchDiff, axes.getRoll() + rollDiff);
  485.  
  486. Vector3f currentLocalPos = axes.findGlobalVectorLocally(riderMountPoint);
  487. Vector3f nextGlobalPos = velAxes.findLocalVectorGlobally(currentLocalPos);
  488.  
  489. Vector3f diff = new Vector3f(0,0,0);
  490.  
  491. //Some rubbish null checks
  492. if(nextGlobalPos == null) nextGlobalPos = new Vector3f(0,0,0);
  493. if(diff == null) diff = new Vector3f(0,0,0);
  494.  
  495. Vector3f.add(vehicleMotion, diff, diff);
  496. rider.setPosition(nextGlobalPos.x + posX + ((hugeBoat)?diff.x/(1.5):0), (!isDriveable)?rider.posY:((EntityDriveable)rider).deckHeight, nextGlobalPos.z + posZ + ((hugeBoat)?diff.z/(1.5):0));
  497.  
  498.  
  499. if(hugeBoat){
  500. if(lastPos.x == 0 && lastPos.y == 0 && lastPos.z == 0)
  501. {
  502. rider.motionX = rider.motionX;
  503. rider.motionY = rider.motionY;
  504. rider.motionZ = rider.motionZ;
  505. }
  506. else
  507. {
  508. //rider.motionX = -rider.motionX + diff.x;
  509. //rider.motionY = 0;
  510. //rider.motionZ = -rider.motionZ + diff.z;
  511. }
  512.  
  513. }
  514. else
  515. {
  516. if(lastPos.x == 0 && lastPos.y == 0 && lastPos.z == 0)
  517. {
  518. rider.motionX = rider.motionX;
  519. rider.motionY = rider.motionY;
  520. rider.motionZ = rider.motionZ;
  521. }
  522. else
  523. {
  524. rider.motionX = diff.x;
  525. rider.motionY = diff.y;
  526. rider.motionZ = diff.z;
  527. }
  528.  
  529. }
  530.  
  531. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement