From 4db1ebe2ed90bfa00fd3a24f21387de072424760 Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 15 Mar 2014 17:15:46 +0200 Subject: [PATCH] Add Turret --- src/com/annimon/turrets/Turret.java | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/com/annimon/turrets/Turret.java diff --git a/src/com/annimon/turrets/Turret.java b/src/com/annimon/turrets/Turret.java new file mode 100644 index 0000000..dd00488 --- /dev/null +++ b/src/com/annimon/turrets/Turret.java @@ -0,0 +1,49 @@ +package com.annimon.turrets; + +import java.awt.Color; +import java.awt.Graphics2D; + +/** + * + * @author aNNiMON + */ +public class Turret implements Constants { + + public static final boolean SERVER = true, CLIENT = false; + + private static final double ANGLE_45 = Math.PI / 4d; + private static final double ANGLE_90 = Math.PI / 2d; + private static final int TURRET_WIDTH = PLAYERS_BLOCK_COUNT; + private static final int TURRET_HEIGHT = PLAYERS_BLOCK_COUNT; + + private final int turretX, turretY; + private final int barrelRadius; + private final boolean server; + private int barrelX, barrelY; + private double barrelAngle; + private double shotPower; + + public Turret(boolean server, int turretY) { + this.server = server; + this.turretX = (server ? 5 : Constants.WIDTH - 5); + this.turretY = turretY; + barrelAngle = ANGLE_45; + shotPower = 0.5d; + barrelRadius = Constants.WIDTH / 20; + calculateBarrelPosition(); + } + + public void draw(Graphics2D g) { + g.setColor(Color.WHITE); + g.drawLine(turretX, Constants.HEIGHT - turretY - 1, barrelX, Constants.HEIGHT - barrelY); + g.setColor(server ? Color.BLUE : Color.RED); + g.fillArc(turretX - TURRET_WIDTH / 2, Constants.HEIGHT - turretY - TURRET_HEIGHT / 2, + TURRET_WIDTH, TURRET_HEIGHT, 0, 180); + } + + private void calculateBarrelPosition() { + final int sign = (server ? 1 : -1); + barrelX = (int) (turretX + sign * barrelRadius * shotPower * Math.cos(barrelAngle)); + barrelY = (int) (turretY + barrelRadius * shotPower * Math.sin(barrelAngle)); + } +}