private void updatePosition(Projectile projectile) { double distance = projectile.getRadius() * Context.TICK_DELAY / projectile.getLifeTime(); double angle = projectile.getAngle() * Math.PI / 180; double y = distance * Math.sin(angle); double x = distance * Math.cos(angle); projectile.setxStart(projectile.getxStart() + x); projectile.setyStart(projectile.getyStart() + y); }
private void fire(Person person, Room room) { AbstractWeapon gun = person.getWeapon(); person.setShotCooldown(System.currentTimeMillis() + gun.getShotTimeout()); gun.setTotalClip(gun.getTotalClip() - 1); gun.setCurrentClip(gun.getCurrentClip() - 1); Integer id = gameContext.getProjectilesIds().getAndIncrement(); Projectile[] projectilesBatch = new Projectile[gun.getBulletsPerShot()]; for (int i = 0; i < projectilesBatch.length; i++) { Projectile projectile = getCompatibleProjectile(person); projectile.setId(i); projectilesBatch[i] = projectile; float angle = projectile.getAngle(); if (angle == 90) { projectile.setxEnd((int) person.getX()); int gunLimit = (int) (projectile.getRadius() + person.getY()); projectile.setyEnd(gunLimit > room.getMap().getY() ? room.getMap().getY() : gunLimit); } else if (angle == 180) { projectile.setyEnd((int) person.getY()); int gunLimit = (int) person.getX() - (int) projectile.getRadius(); projectile.setyEnd(gunLimit > 0 ? gunLimit : 0); } else if (angle == 270) { projectile.setxEnd((int) person.getX()); int gunLimit = (int) person.getY() - (int) projectile.getRadius(); projectile.setyEnd(gunLimit > 0 ? gunLimit : 0); } else if (angle == 0) { projectile.setyEnd((int) person.getY()); int gunLimit = (int) person.getX() + (int) projectile.getRadius(); projectile.setyEnd(gunLimit > room.getMap().getX() ? room.getMap().getX() : gunLimit); } else { double y = projectile.getRadius() * Math.sin(angle * Math.PI / 180); double x = projectile.getRadius() * Math.cos(angle * Math.PI / 180); projectile.setxEnd((int) x + (int) person.getX()); projectile.setyEnd((int) y + (int) person.getY()); } if (projectile.isInstant()) { calculateInstantImpacts(person, projectile, room); } } room.getProjectiles().put(id, projectilesBatch); }
private Point isMoreClose(int x, int y, Point closestPoint, Point[] intersectionPoints) { double clothestDistance = closestPoint != null ? Math.sqrt(Math.pow(x - closestPoint.getX(), 2) + Math.pow(y - closestPoint.getY(), 2)) : -1; Point selectedPoint = null; for (Point point : intersectionPoints) { if (point == null) { continue; } double distance = Math.sqrt(Math.pow(x - point.getX(), 2) + Math.pow(y - point.getY(), 2)); if (distance < clothestDistance || clothestDistance == -1) { clothestDistance = distance; selectedPoint = point; } } return selectedPoint; }