From 4bc466a9a64ba34cc361d29b7a733d48f65b4a50 Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 15 Mar 2014 15:46:52 +0200 Subject: [PATCH] Add gradient terrain --- src/com/annimon/turrets/Terrain.java | 30 ++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/com/annimon/turrets/Terrain.java b/src/com/annimon/turrets/Terrain.java index 53801c0..46f2210 100644 --- a/src/com/annimon/turrets/Terrain.java +++ b/src/com/annimon/turrets/Terrain.java @@ -1,7 +1,8 @@ package com.annimon.turrets; import java.awt.Color; -import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.LinearGradientPaint; import java.util.Random; /** @@ -10,12 +11,16 @@ import java.util.Random; */ public class Terrain implements Constants { - private static final Color TERRAIN_COLOR = new Color(0xFF269920); + private static final Color[] TERRAIN_COLOR = { + new Color(0xFF33CE2B), new Color(0xFF1C7317) + }; private static final int SMOOTH_ITERATIONS = 10; - + private final int blocksCount; private final int blockSize; private final int[] blockHeights; + + private LinearGradientPaint gradientPaint; public Terrain(int blocksCount) { this.blocksCount = blocksCount; @@ -23,8 +28,8 @@ public class Terrain implements Constants { blockHeights = new int[blocksCount]; } - public void draw(Graphics g) { - g.setColor(TERRAIN_COLOR); + public void draw(Graphics2D g) { + g.setPaint(gradientPaint); for (int i = 0; i < blocksCount; i++) { final int blockHeight = blockHeights[i]; g.fillRect(i * blockSize, HEIGHT - blockHeight, blockSize, blockHeight); @@ -65,11 +70,15 @@ public class Terrain implements Constants { final int maxHeight = HEIGHT / 2; final int stepHeight = maxHeight / 75 * blockSize; + int maxBlockHeight = 0; blockHeights[0] = rnd.nextInt(maxHeight); for (int i = 1; i < blocksCount; i++) { - blockHeights[i] = blockHeights[i - 1] + rnd.nextInt(2 * stepHeight + 1) - stepHeight; - if (blockHeights[i] > maxHeight) blockHeights[i] = maxHeight; - else if (blockHeights[i] < 0) blockHeights[i] = 0; + int value = blockHeights[i - 1] + rnd.nextInt(2 * stepHeight + 1) - stepHeight; + if (value > maxHeight) value = maxHeight; + else if (blockHeights[i] < 0) value = 0; + blockHeights[i] = value; + // Detect max block height + if (maxBlockHeight < value) maxBlockHeight = value; } // Flatten out left and right blocks for turrets. for (int i = 0; i < PLAYERS_BLOCK_COUNT; i++) { @@ -83,5 +92,10 @@ public class Terrain implements Constants { blockHeights[i] = (blockHeights[i - 1] + blockHeights[i + 1]) / 2; } } + + gradientPaint = new LinearGradientPaint( + 0, Constants.HEIGHT - maxBlockHeight, + 0, Constants.HEIGHT, + new float[] {0f, 1f}, TERRAIN_COLOR); } }