Add original project.
38
.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
# Gradle files
|
||||
.gradle/
|
||||
build/
|
||||
|
||||
# Local configuration file (sdk path, etc)
|
||||
local.properties
|
||||
|
||||
# Log/OS Files
|
||||
*.log
|
||||
|
||||
# Android Studio generated files and folders
|
||||
captures/
|
||||
.externalNativeBuild/
|
||||
.cxx/
|
||||
*.apk
|
||||
output.json
|
||||
|
||||
# IntelliJ
|
||||
*.iml
|
||||
.idea/
|
||||
misc.xml
|
||||
deploymentTargetDropDown.xml
|
||||
render.experimental.xml
|
||||
|
||||
# Keystore files
|
||||
*.jks
|
||||
*.keystore
|
||||
|
||||
# Google Services (e.g. APIs or Firebase)
|
||||
google-services.json
|
||||
|
||||
# Android Profiling
|
||||
*.hprof
|
||||
/app/debug/output-metadata.json
|
||||
|
||||
# Ha!
|
||||
keystore/*
|
||||
release
|
BIN
DesignMaterials/Screenshots/Phone/Screenshot_2014-12-12-16-58-02.png
Executable file
After Width: | Height: | Size: 76 KiB |
BIN
DesignMaterials/Screenshots/Phone/Screenshot_2014-12-12-16-58-15.png
Executable file
After Width: | Height: | Size: 84 KiB |
BIN
DesignMaterials/Screenshots/Phone/Screenshot_2014-12-12-16-59-37.png
Executable file
After Width: | Height: | Size: 66 KiB |
BIN
DesignMaterials/Screenshots/Tablet_07/Screenshot1.png
Executable file
After Width: | Height: | Size: 56 KiB |
BIN
DesignMaterials/Screenshots/Tablet_07/Screenshot2.png
Executable file
After Width: | Height: | Size: 27 KiB |
BIN
DesignMaterials/Screenshots/Tablet_07/Screenshot3.png
Executable file
After Width: | Height: | Size: 29 KiB |
BIN
DesignMaterials/Screenshots/Tablet_07/Screenshot4.png
Executable file
After Width: | Height: | Size: 30 KiB |
BIN
DesignMaterials/Screenshots/Tablet_07/Screenshot5.png
Executable file
After Width: | Height: | Size: 45 KiB |
BIN
DesignMaterials/Screenshots/Tablet_07/Screenshot6.png
Executable file
After Width: | Height: | Size: 24 KiB |
BIN
DesignMaterials/Screenshots/Tablet_07/Screenshot7.png
Executable file
After Width: | Height: | Size: 34 KiB |
BIN
DesignMaterials/bullet_2.png
Executable file
After Width: | Height: | Size: 541 B |
BIN
DesignMaterials/bullet_3.png
Executable file
After Width: | Height: | Size: 2.8 KiB |
BIN
DesignMaterials/bullet_cc.png
Executable file
After Width: | Height: | Size: 335 B |
BIN
DesignMaterials/bullet_cc2.png
Executable file
After Width: | Height: | Size: 332 B |
BIN
DesignMaterials/bullet_cc2_100x100.png
Executable file
After Width: | Height: | Size: 6.9 KiB |
BIN
DesignMaterials/bullet_default.png
Executable file
After Width: | Height: | Size: 327 B |
BIN
DesignMaterials/cctd_bgimage.png
Executable file
After Width: | Height: | Size: 38 KiB |
BIN
DesignMaterials/cctd_image.png
Executable file
After Width: | Height: | Size: 10 KiB |
BIN
DesignMaterials/demon_king.png
Executable file
After Width: | Height: | Size: 3.0 KiB |
BIN
DesignMaterials/sprite_green01.png
Executable file
After Width: | Height: | Size: 3.3 KiB |
BIN
DesignMaterials/startmenu_20141221_1117.png
Executable file
After Width: | Height: | Size: 1.4 KiB |
BIN
DesignMaterials/startmenu_button_20141221_1148.png
Executable file
After Width: | Height: | Size: 458 B |
BIN
DesignMaterials/startmenu_empty_20141221_1148.png
Executable file
After Width: | Height: | Size: 1.2 KiB |
1
app/_gitignore
Executable file
@ -0,0 +1 @@
|
||||
/build
|
25
app/build.gradle
Executable file
@ -0,0 +1,25 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 21
|
||||
buildToolsVersion "21.1.1"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.hyperling.examplegame_practice"
|
||||
minSdkVersion 8
|
||||
targetSdkVersion 21
|
||||
versionCode 5
|
||||
versionName "1.04"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||
compile 'com.android.support:appcompat-v7:21.0.3'
|
||||
}
|
71
app/manifest-merger-release-report.txt
Executable file
@ -0,0 +1,71 @@
|
||||
-- Merging decision tree log ---
|
||||
manifest
|
||||
ADDED from AndroidManifest.xml:2:1
|
||||
xmlns:android
|
||||
ADDED from AndroidManifest.xml:2:11
|
||||
package
|
||||
ADDED from AndroidManifest.xml:3:5
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
android:versionName
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
android:versionCode
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
application
|
||||
ADDED from AndroidManifest.xml:5:5
|
||||
MERGED from com.android.support:appcompat-v7:21.0.3:16:5
|
||||
MERGED from com.android.support:support-v4:21.0.3:16:5
|
||||
android:label
|
||||
ADDED from AndroidManifest.xml:8:9
|
||||
android:allowBackup
|
||||
ADDED from AndroidManifest.xml:6:9
|
||||
android:icon
|
||||
ADDED from AndroidManifest.xml:7:9
|
||||
android:theme
|
||||
ADDED from AndroidManifest.xml:9:9
|
||||
activity#com.hyperling.examplegame_practice.MainActivity
|
||||
ADDED from AndroidManifest.xml:11:9
|
||||
android:screenOrientation
|
||||
ADDED from AndroidManifest.xml:14:13
|
||||
android:label
|
||||
ADDED from AndroidManifest.xml:13:13
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:12:13
|
||||
intent-filter#android.intent.action.MAIN+android.intent.category.LAUNCHER
|
||||
ADDED from AndroidManifest.xml:15:13
|
||||
action#android.intent.action.MAIN
|
||||
ADDED from AndroidManifest.xml:16:17
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:16:25
|
||||
category#android.intent.category.LAUNCHER
|
||||
ADDED from AndroidManifest.xml:18:17
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:18:27
|
||||
activity#com.hyperling.examplegame_practice.Help
|
||||
ADDED from AndroidManifest.xml:22:9
|
||||
android:screenOrientation
|
||||
ADDED from AndroidManifest.xml:25:13
|
||||
android:label
|
||||
ADDED from AndroidManifest.xml:24:13
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:23:13
|
||||
activity#com.hyperling.examplegame_practice.Game
|
||||
ADDED from AndroidManifest.xml:28:9
|
||||
android:screenOrientation
|
||||
ADDED from AndroidManifest.xml:31:13
|
||||
android:label
|
||||
ADDED from AndroidManifest.xml:30:13
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:29:13
|
||||
uses-sdk
|
||||
INJECTED from AndroidManifest.xml:0:0 reason: use-sdk injection requested
|
||||
MERGED from com.android.support:appcompat-v7:21.0.3:15:5
|
||||
MERGED from com.android.support:support-v4:21.0.3:15:5
|
||||
android:targetSdkVersion
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
android:minSdkVersion
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
17
app/proguard-rules.pro
vendored
Executable file
@ -0,0 +1,17 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in /home/usb/android-sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
@ -0,0 +1,13 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.app.Application;
|
||||
import android.test.ApplicationTestCase;
|
||||
|
||||
/**
|
||||
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
|
||||
*/
|
||||
public class ApplicationTest extends ApplicationTestCase<Application> {
|
||||
public ApplicationTest() {
|
||||
super(Application.class);
|
||||
}
|
||||
}
|
35
app/src/main/AndroidManifest.xml
Executable file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.hyperling.examplegame_practice" >
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/cctd_image"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme" >
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="landscape" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".Help"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="landscape" >
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".Game"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="landscape" >
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
110
app/src/main/java/com/hyperling/examplegame_practice/Bullet.java
Executable file
@ -0,0 +1,110 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
|
||||
/**
|
||||
* Created by usb on 12/19/14.
|
||||
*/
|
||||
public class Bullet {
|
||||
|
||||
int speed = 100;
|
||||
int pauseSpeed = 1;
|
||||
int xSpeed, ySpeed;
|
||||
int damage;
|
||||
|
||||
Bitmap bmp;
|
||||
|
||||
int width, height;
|
||||
|
||||
int centerX, centerY;
|
||||
|
||||
int startX, startY;
|
||||
int x, y;
|
||||
|
||||
Minion minion;
|
||||
|
||||
boolean xLocked, yLocked;
|
||||
boolean spent = false;
|
||||
|
||||
public Bullet(GameView gv, Bitmap bmp, int damage, int startX, int startY, Minion minion){
|
||||
width = bmp.getWidth();
|
||||
height = bmp.getHeight();
|
||||
|
||||
centerX = startX;
|
||||
centerY = startY;
|
||||
|
||||
this.startX = centerX - width/2;
|
||||
this.startY = centerY - height/2;
|
||||
|
||||
x = this.startX;
|
||||
y = this.startY;
|
||||
|
||||
this.minion = minion;
|
||||
|
||||
this.bmp = bmp;
|
||||
|
||||
this.damage = damage;
|
||||
|
||||
xSpeed = gv.getWidth()/speed;
|
||||
ySpeed = gv.getHeight()/speed;
|
||||
xLocked = false;
|
||||
yLocked = false;
|
||||
}
|
||||
|
||||
public void update(){
|
||||
|
||||
// Minion location towards minion
|
||||
int x2 = minion.centerX;
|
||||
int y2 = minion.centerY;
|
||||
|
||||
// Which direction do we need to move?
|
||||
// Find the sign on the direction, then multiply by the speed
|
||||
if(xLocked){
|
||||
x = minion.centerX - width/2;
|
||||
}
|
||||
else {
|
||||
try {
|
||||
x = x + (((x2 - centerX) / Math.abs(x2 - centerX)) * xSpeed * pauseSpeed);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if(yLocked) {
|
||||
y = minion.centerY - height / 2;
|
||||
}
|
||||
else {
|
||||
try {
|
||||
y = y + (((y2 - centerY) / Math.abs(y2 - centerY)) * ySpeed * pauseSpeed);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
centerX = x + width/2;
|
||||
centerY = y + height/2;
|
||||
}
|
||||
|
||||
public void onDraw(Canvas canvas){
|
||||
update();
|
||||
|
||||
Rect src = new Rect(startX, startY, startX + width, startY + height);
|
||||
|
||||
Rect dest = new Rect(x, y, x + width, y + height);
|
||||
|
||||
canvas.drawBitmap(bmp, src, dest, null);
|
||||
}
|
||||
|
||||
public boolean isCollision(){
|
||||
boolean collide = false;
|
||||
|
||||
if((x + width >= minion.x || x < minion.x + minion.width) && (y + height > y || y <= minion.y + minion.height)){
|
||||
collide = true;
|
||||
}
|
||||
|
||||
return collide;
|
||||
}
|
||||
}
|
13
app/src/main/java/com/hyperling/examplegame_practice/Changelog
Executable file
@ -0,0 +1,13 @@
|
||||
v1.04
|
||||
Got onto git!
|
||||
|
||||
v1.03
|
||||
|
||||
v1.02
|
||||
Fixed pause button
|
||||
Added Help menu
|
||||
Added graphics to start menu
|
||||
Note: Do not hit the back button while in game
|
||||
|
||||
v1.01
|
||||
Added the icon!
|
112
app/src/main/java/com/hyperling/examplegame_practice/Game.java
Executable file
@ -0,0 +1,112 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
|
||||
public class Game extends ActionBarActivity {
|
||||
|
||||
public String filename = "/data/data/com.hyperling.examplegame_practice/savedata";
|
||||
|
||||
public SAL sal;
|
||||
|
||||
public boolean contin = true;
|
||||
public boolean exists = false;
|
||||
|
||||
public boolean mainPause = false;
|
||||
|
||||
public static GameView gameview;
|
||||
|
||||
public Game(){
|
||||
//Empty
|
||||
}
|
||||
|
||||
public Game(boolean bool){
|
||||
this.contin = bool;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_load);
|
||||
|
||||
gameview = new GameView(Game.this);
|
||||
|
||||
sal = new SAL(filename);
|
||||
|
||||
if(contin){
|
||||
//try{
|
||||
// exists = sal.check();
|
||||
//} catch(Exception e){System.out.println("Error checking in file exists in Continue Game");}
|
||||
|
||||
//if(exists){
|
||||
System.out.println("Loading continue..");
|
||||
//sal.load(gameview);
|
||||
onRestart();
|
||||
//}
|
||||
}
|
||||
|
||||
setContentView(gameview);
|
||||
}
|
||||
|
||||
public void onStart(){
|
||||
super.onStart();
|
||||
}
|
||||
|
||||
protected void onStop(){
|
||||
super.onStop();
|
||||
|
||||
sal.save(gameview);
|
||||
//gameview.stopThreads();
|
||||
}
|
||||
|
||||
protected void onRestart(){
|
||||
super.onRestart();
|
||||
|
||||
sal.load(gameview);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
getMenuInflater().inflate(R.menu.menu_game, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
int id = item.getItemId();
|
||||
if (id == R.id.action_reset) {
|
||||
gameview = new GameView(Game.this);
|
||||
setContentView(gameview);
|
||||
return true;
|
||||
}
|
||||
else if (id == R.id.action_pause) {
|
||||
mainPause = !mainPause;
|
||||
if(mainPause){
|
||||
//gameview.stopThreads();
|
||||
item.setTitle("Resume");
|
||||
}
|
||||
else{
|
||||
//gameview.startThreads();
|
||||
item.setTitle("Pause");
|
||||
}
|
||||
try {
|
||||
gameview.setMainPause(mainPause);
|
||||
}
|
||||
catch(Exception e){
|
||||
e.printStackTrace();
|
||||
System.out.println(e.toString());
|
||||
System.out.println(mainPause);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
262
app/src/main/java/com/hyperling/examplegame_practice/GameGrid.java
Executable file
@ -0,0 +1,262 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by usb on 11/9/14.
|
||||
*/
|
||||
public class GameGrid {
|
||||
GameView gv;
|
||||
Paint paint = new Paint();
|
||||
|
||||
static int ROWS;
|
||||
static int COLUMNS;
|
||||
|
||||
static GridCell[][] CELL;
|
||||
|
||||
public GridCell startCell;
|
||||
public GridCell endCell;
|
||||
|
||||
public GridCell basicUpgradeCell = new GridCell();
|
||||
public GridCell slowUpgradeCell = new GridCell();
|
||||
|
||||
ArrayList<GridCell> buildCells = new ArrayList<GridCell>();
|
||||
ArrayList<GridCell> towers = new ArrayList<GridCell>();
|
||||
|
||||
//ArrayList<GridCell> pauseButton = new ArrayList<GridCell>();
|
||||
|
||||
static int CELL_COUNT;
|
||||
|
||||
static int CELL_WIDTH;
|
||||
static int CELL_HEIGHT;
|
||||
|
||||
boolean showUpgrades;
|
||||
|
||||
public GameGrid(int numRows, int numColumns, GameView gameView){
|
||||
paint.setStrokeWidth(0);
|
||||
|
||||
ROWS = numRows;
|
||||
COLUMNS = numColumns;
|
||||
|
||||
CELL = new GridCell[ROWS][COLUMNS];
|
||||
|
||||
gv = gameView;
|
||||
|
||||
CELL_COUNT = ROWS*COLUMNS;
|
||||
|
||||
CELL_WIDTH = gv.getWidth()/COLUMNS;
|
||||
CELL_HEIGHT = gv.getHeight()/ROWS;
|
||||
|
||||
int q = 0;
|
||||
for(int i = 0; i < ROWS; i++){
|
||||
for(int j = 0; j < COLUMNS; j++){
|
||||
int[] id = {j,i}; // Need to be switched for some reason
|
||||
CELL[i][j] = new GridCell(id, CELL_WIDTH, CELL_HEIGHT);
|
||||
|
||||
++q;
|
||||
if(q == CELL_COUNT){
|
||||
System.out.println("All cells created!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onDraw(Canvas canvas){
|
||||
|
||||
paintCells(canvas);
|
||||
|
||||
paintBuildableBorders(canvas);
|
||||
|
||||
paintTowers(canvas);
|
||||
|
||||
paintTowerInfo(canvas);
|
||||
|
||||
if(showUpgrades){
|
||||
paintUpgradeChoices(canvas);
|
||||
}
|
||||
else{
|
||||
basicUpgradeCell.color = new GridCell().color;
|
||||
slowUpgradeCell.color = new GridCell().color;
|
||||
|
||||
basicUpgradeCell = new GridCell();
|
||||
slowUpgradeCell = new GridCell();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void paintCells(Canvas canvas){
|
||||
for(int i = 0; i < ROWS; i++){
|
||||
for(int j = 0; j < COLUMNS; j++){
|
||||
|
||||
paint.setColor(CELL[i][j].getColor());
|
||||
|
||||
int side[] = CELL[i][j].getSides();
|
||||
|
||||
if (side[0] < 0) {
|
||||
side[0] = 0;
|
||||
}
|
||||
if (side[1] < 0) {
|
||||
side[1] = 0;
|
||||
}
|
||||
if (side[2] > gv.getWidth()) {
|
||||
side[2] = gv.getWidth();
|
||||
}
|
||||
if (side[3] > gv.getHeight()) {
|
||||
side[3] = gv.getHeight();
|
||||
}
|
||||
|
||||
canvas.drawRect(side[0], side[1], side[2], side[3], paint);
|
||||
//} catch(Exception e){
|
||||
//System.out.println("GameGrid.paintCells() threw an error at cell[" + i + "][" + j + "]: " + e.toString());
|
||||
//System.out.println("(int)Color is " + tempC);
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void paintBuildableBorders(Canvas canvas){
|
||||
for(GridCell buildCell : buildCells){
|
||||
|
||||
paint.setColor(buildCell.buildableInterior);
|
||||
|
||||
/*
|
||||
int[] temp = buildCell.id;
|
||||
int i = temp[0];
|
||||
int j = temp[1];
|
||||
*/
|
||||
|
||||
int[]side = buildCell.side;
|
||||
|
||||
int xSpace = buildCell.width/10;
|
||||
int ySpace = buildCell.height/10;
|
||||
|
||||
canvas.drawRect(side[0] + xSpace, side[1] + ySpace, side[2] - xSpace, side[3] - ySpace, paint);
|
||||
}
|
||||
}
|
||||
|
||||
public void paintTowers(Canvas canvas){
|
||||
String slow = "";
|
||||
for(GridCell tower : towers){
|
||||
|
||||
paint.setColor(tower.innerColor);
|
||||
|
||||
/*
|
||||
int[] temp = tower.id;
|
||||
int i = temp[0];
|
||||
int j = temp[1];
|
||||
*/
|
||||
int[]side = tower.side;
|
||||
|
||||
int xSpace = tower.width/4;
|
||||
int ySpace = tower.height/4;
|
||||
|
||||
canvas.drawRect(side[0] + xSpace, side[1] + ySpace, side[2] - xSpace, side[3] - ySpace, paint);
|
||||
|
||||
paint.setColor(tower.buildableInterior);
|
||||
|
||||
if(tower.isSlowTower){
|
||||
slow = "S";
|
||||
} else {
|
||||
slow = "";
|
||||
}
|
||||
|
||||
canvas.drawText(tower.towerType + slow, tower.centerForTextX, tower.centerForTextY, paint);
|
||||
}
|
||||
}
|
||||
|
||||
public void paintTowerInfo(Canvas canvas){
|
||||
GridCell fakeTower = new GridCell();
|
||||
fakeTower.setTower();
|
||||
|
||||
int firstcost = 2;
|
||||
int cost = firstcost;
|
||||
int upgradecost;
|
||||
int spent;
|
||||
|
||||
GridCell printCell = CELL[ROWS-2][0];
|
||||
|
||||
paint.setColor(Color.YELLOW);
|
||||
canvas.drawText("Tower build costs:", printCell.centerForTextX, printCell.centerForTextY, paint);
|
||||
|
||||
for(int i = 0; i < COLUMNS/2; i++){
|
||||
printCell = CELL[ROWS-1][i];
|
||||
printCell.color = Color.WHITE;
|
||||
|
||||
upgradecost = fakeTower.towerUpgradeCost;
|
||||
|
||||
paint.setColor(fakeTower.innerColor);
|
||||
canvas.drawText("" + cost, printCell.centerForTextX, printCell.centerForTextY, paint);
|
||||
|
||||
fakeTower.upgrade();
|
||||
|
||||
cost = upgradecost;
|
||||
}
|
||||
}
|
||||
|
||||
public void paintUpgradeChoices(Canvas canvas){
|
||||
GridCell printCell = CELL[ROWS-2][COLUMNS-4];
|
||||
|
||||
paint.setColor(Color.YELLOW);
|
||||
canvas.drawText("Upgrade choices:", printCell.centerForTextX, printCell.centerForTextY, paint);
|
||||
|
||||
int choice = 0;
|
||||
for(int i = COLUMNS-1; i >= COLUMNS - printCell.towerChoices; i--){
|
||||
printCell = CELL[ROWS-1][i];
|
||||
|
||||
if(choice == 0){
|
||||
printCell.color = Color.RED;
|
||||
canvas.drawText("Basic", printCell.centerForTextX, printCell.centerForTextY, paint);
|
||||
basicUpgradeCell = printCell;
|
||||
}
|
||||
else if(choice == 1){
|
||||
printCell.color = Color.BLUE;
|
||||
canvas.drawText("Slow", printCell.centerForTextX, printCell.centerForTextY, paint);
|
||||
slowUpgradeCell = printCell;
|
||||
}
|
||||
|
||||
choice = choice + 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setStartCell(int[] id){
|
||||
CELL[id[0]][id[1]].setStart();
|
||||
startCell = CELL[id[0]][id[1]];
|
||||
}
|
||||
|
||||
public void setEndCell(int[] id){
|
||||
|
||||
CELL[id[0]][id[1]].setEnd();
|
||||
endCell = CELL[id[0]][id[1]];
|
||||
}
|
||||
|
||||
public void setPathCell(int[] id){
|
||||
CELL[id[0]][id[1]].setPath();
|
||||
}
|
||||
|
||||
public void setBuildableCell(int[] id){
|
||||
CELL[id[0]][id[1]].setBuildable();
|
||||
buildCells.add(CELL[id[0]][id[1]]);
|
||||
}
|
||||
|
||||
public void setTowerCell(int[] id){
|
||||
CELL[id[0]][id[1]].setTower();
|
||||
towers.add(CELL[id[0]][id[1]]);
|
||||
//System.out.println("Tower added: " + id[0] + ", " + id[1]);
|
||||
}
|
||||
|
||||
/*
|
||||
public void setPausableCell(int[] id){
|
||||
pauseButton.add(CELL[id[0]][id[1]]);
|
||||
}
|
||||
*/
|
||||
|
||||
public void setNullCell(int[] id){
|
||||
CELL[id[0]][id[1]].setNull();
|
||||
}
|
||||
}
|
57
app/src/main/java/com/hyperling/examplegame_practice/GameLoopThread.java
Executable file
@ -0,0 +1,57 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.graphics.Canvas;
|
||||
|
||||
/**
|
||||
* Created by usb on 10/23/14.
|
||||
*/
|
||||
public class GameLoopThread extends Thread{
|
||||
|
||||
private GameView gameView;
|
||||
private boolean running = false;
|
||||
|
||||
static final long FPS = 10;
|
||||
|
||||
public GameLoopThread(GameView gv){
|
||||
gameView = gv;
|
||||
}
|
||||
|
||||
public void setRunning(boolean run){
|
||||
running = run;
|
||||
}
|
||||
|
||||
@SuppressLint("WrongCall")
|
||||
@Override
|
||||
public void run(){
|
||||
|
||||
long tick = 1000 / FPS;
|
||||
long startTime;
|
||||
long sleepTime;
|
||||
|
||||
while(running){
|
||||
Canvas c = null;
|
||||
startTime = System.currentTimeMillis();
|
||||
try {
|
||||
c = gameView.getHolder().lockCanvas();
|
||||
synchronized (gameView.getHolder()) {
|
||||
gameView.onDraw(c);
|
||||
}
|
||||
} finally {
|
||||
if (c != null) {
|
||||
gameView.getHolder().unlockCanvasAndPost(c);
|
||||
}
|
||||
}
|
||||
sleepTime = tick - (System.currentTimeMillis() - startTime);
|
||||
|
||||
try {
|
||||
if (sleepTime > 0) {
|
||||
sleep(sleepTime);
|
||||
}
|
||||
else {
|
||||
sleep(10);
|
||||
}
|
||||
} catch (Exception e) {}
|
||||
}
|
||||
}
|
||||
}
|
938
app/src/main/java/com/hyperling/examplegame_practice/GameView.java
Executable file
@ -0,0 +1,938 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.os.Looper;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.SurfaceHolder;
|
||||
import android.view.SurfaceView;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
/**
|
||||
* Created by usb on 10/16/14.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class GameView extends SurfaceView implements Serializable {
|
||||
|
||||
private SurfaceHolder holder;
|
||||
|
||||
private ArrayList<Minion> minions = new ArrayList<Minion>();
|
||||
private ArrayList<Bullet> bullets = new ArrayList<Bullet>();
|
||||
//private int [][] minionTypes = new int [3][20]; // {amount, drawable, role}
|
||||
|
||||
private GameLoopThread gameLoopThread;
|
||||
private Context baseContext;
|
||||
|
||||
Paint paint = new Paint();
|
||||
|
||||
|
||||
Timer timer = new Timer();
|
||||
TimerTask startGameTask;
|
||||
TimerTask startNextLevelTask;
|
||||
|
||||
|
||||
GameGrid gameGrid;
|
||||
|
||||
// Map specs
|
||||
int numRows = 9;
|
||||
int numColumns = 16;
|
||||
int[] startCoords = {4, 0};
|
||||
int[] endCoords = {4, 15};
|
||||
int[] pathCoordsX = {4,4,4,4,4,4,4,4,4,4 ,4 ,4, 4, 4 ,-666}; // Row
|
||||
int[] pathCoordsY = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,-666};// Column
|
||||
int[] buildableCoordsX = {5,5,5,5,5,5,5,5,5, 5, 5, 5, 3,3,3,3,3,3,3,3,3, 3, 3, 3, -666};
|
||||
int[] buildableCoordsY = {2,3,4,5,6,7,8,9,10,11,12,13,2,3,4,5,6,7,8,9,10,11,12,13,-666};
|
||||
/*
|
||||
int[] pausableCoordsX = { 1, 1, 1, 1, 2, 2, 2, 2,-666};
|
||||
int[] pausableCoordsY = {11,12,13,14,11,12,13,14,-666};
|
||||
*/
|
||||
|
||||
int startX, startY, endX, endY;
|
||||
int[] startSides, endSides;
|
||||
|
||||
int defaultLives = 10;
|
||||
int lives = defaultLives;
|
||||
|
||||
//boolean spawn = true;
|
||||
int defaultExtraSpawn = 3;
|
||||
int spawnNum = defaultExtraSpawn;
|
||||
int spawnMore = spawnNum;
|
||||
int spawnMoreBosses = 0;
|
||||
|
||||
int defaultRole = 1;
|
||||
int role = defaultRole;
|
||||
|
||||
int defaultSpeed = 250;
|
||||
int speed = defaultSpeed;
|
||||
|
||||
boolean remove;
|
||||
int livesLost;
|
||||
|
||||
GridCell selectedTower;
|
||||
|
||||
boolean gridCreated = false;
|
||||
|
||||
boolean shoot;
|
||||
int shootMinion;
|
||||
int shootTower;
|
||||
|
||||
boolean gameOver = false;
|
||||
|
||||
boolean paused = false;
|
||||
private Boolean mainPause = false;
|
||||
public long mainPauseTime = 0;
|
||||
public long mainUnPauseTime = 0;
|
||||
private int minionPauseSpeed = 0;
|
||||
int startTime = 2000;
|
||||
|
||||
int round = 1;
|
||||
int wave = 0;
|
||||
|
||||
int killCount = 0;
|
||||
|
||||
int defaultMoney = 4;
|
||||
int money = defaultMoney;
|
||||
|
||||
private long lastClick;
|
||||
|
||||
@SuppressLint("WrongCall")
|
||||
public GameView(Context context) {
|
||||
|
||||
super(context);
|
||||
|
||||
baseContext = context;
|
||||
|
||||
gameLoopThread = new GameLoopThread(this);
|
||||
|
||||
holder = getHolder();
|
||||
|
||||
holder.addCallback(new SurfaceHolder.Callback() {
|
||||
|
||||
@Override
|
||||
public void surfaceDestroyed(SurfaceHolder holder) {
|
||||
|
||||
boolean retry = true;
|
||||
|
||||
gameLoopThread.setRunning(false);
|
||||
|
||||
while (retry) {
|
||||
|
||||
try {
|
||||
|
||||
gameLoopThread.join();
|
||||
|
||||
retry = false;
|
||||
|
||||
} catch (InterruptedException e) {
|
||||
|
||||
}
|
||||
|
||||
gameLoopThread = new GameLoopThread(GameView.this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void surfaceCreated(SurfaceHolder holder) {
|
||||
/*
|
||||
Canvas c = holder.lockCanvas(null);
|
||||
onDraw(c);
|
||||
holder.unlockCanvasAndPost(c);
|
||||
*/
|
||||
paint.setColor(Color.YELLOW);
|
||||
paint.setStrokeWidth(0);
|
||||
|
||||
/*
|
||||
timer = new Timer();
|
||||
startGameTask = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
createMinions();
|
||||
|
||||
gameLoopThread.setRunning(true);
|
||||
|
||||
gameLoopThread.start();
|
||||
}
|
||||
};
|
||||
|
||||
startNextLevelTask = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
createMinions();
|
||||
}
|
||||
};
|
||||
*/
|
||||
|
||||
createGrid();
|
||||
|
||||
paused = true;
|
||||
|
||||
startGameTask = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
paused = false;
|
||||
|
||||
if(wave == 0){
|
||||
startNextLevel();
|
||||
}
|
||||
|
||||
startTime = 0;
|
||||
}
|
||||
};
|
||||
|
||||
gameLoopThread.setRunning(true);
|
||||
|
||||
gameLoopThread.start();
|
||||
|
||||
//System.out.println("Game will start in 5 seconds...");
|
||||
timer.schedule(startGameTask, startTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void surfaceChanged(SurfaceHolder holder, int format,
|
||||
int width, int height) {
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
try {
|
||||
canvas.drawColor(Color.BLACK);
|
||||
|
||||
// Display stats
|
||||
canvas.drawText("Level: Round " + round + " wave " + wave, gameGrid.CELL[0][0].x, gameGrid.CELL[0][0].centerY, paint);
|
||||
canvas.drawText("Money: " + money, gameGrid.CELL[1][0].x, gameGrid.CELL[1][0].y, paint);
|
||||
canvas.drawText("Lives left: " + lives, gameGrid.CELL[1][0].x, gameGrid.CELL[1][0].centerY, paint);
|
||||
|
||||
if (!gameOver) {
|
||||
|
||||
gameGrid.onDraw(canvas);
|
||||
|
||||
shootMinion = 0;
|
||||
|
||||
for (GridCell tower : gameGrid.towers) {
|
||||
tower.isReloading(mainPauseTime, mainUnPauseTime);
|
||||
gameGrid.paintTowers(canvas);
|
||||
}
|
||||
|
||||
if (mainPause) {
|
||||
for (Minion minion : minions) {
|
||||
if (minion.xSpeed > 0) {
|
||||
minionPauseSpeed = minion.xSpeed;
|
||||
minion.xSpeed = 0;
|
||||
}
|
||||
minion.onDraw(canvas);
|
||||
}
|
||||
for(Bullet bullet : bullets){
|
||||
if(bullet.pauseSpeed == 1){
|
||||
bullet.pauseSpeed = 0;
|
||||
}
|
||||
bullet.onDraw(canvas);
|
||||
}
|
||||
} else {
|
||||
for (Minion minion : minions) {
|
||||
if (minion.xSpeed == 0) {
|
||||
minion.xSpeed = minionPauseSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
for (Bullet bullet : bullets){
|
||||
if(bullet.pauseSpeed == 0){
|
||||
bullet.pauseSpeed = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!paused) {
|
||||
/*
|
||||
// Paint the track!
|
||||
paintSquare(canvas, startX, startY, Color.GREEN);
|
||||
paintSquare(canvas, endX, endY, Color.RED);
|
||||
paintRect(canvas, startX + trackSize / 2, startY + trackSize / 2, endX - startX - trackSize, trackSize, Color.YELLOW);
|
||||
*/
|
||||
|
||||
if (wave == 6) {
|
||||
//Spawn more bosses
|
||||
if (minions.size() == 0 && spawnMoreBosses > 0) {
|
||||
createBosses();
|
||||
--spawnMoreBosses;
|
||||
}
|
||||
} else {
|
||||
// Check if able to spawn
|
||||
if (minions.size() == 0 && spawnMore > 0) {
|
||||
createMinions();
|
||||
--spawnMore;
|
||||
}
|
||||
}
|
||||
|
||||
// Move the bullets
|
||||
for(Bullet bullet : bullets){
|
||||
bullet.onDraw(canvas);
|
||||
System.out.println("Drawing bullet for minion " + minions.indexOf(bullet.minion));
|
||||
|
||||
}
|
||||
|
||||
// See if bullet is hitting minion
|
||||
/*
|
||||
for(Bullet bullet : bullets){
|
||||
if (!bullet.spent) {
|
||||
if (bullet.minion.health > 0 && bullet.minion.isCollision(bullet.centerX, bullet.centerY)) {
|
||||
damageMinion(bullet.minion, bullet.damage);
|
||||
bullet.spent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
for(Bullet bullet : bullets){
|
||||
if (!bullet.spent) {
|
||||
if (bullet.minion.health > 0 && bullet.isCollision()) {
|
||||
damageMinion(bullet.minion, bullet.damage);
|
||||
bullet.spent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//for (int n = minions.size() - 1; n >= 0; n--) {
|
||||
for (Minion minion : minions) {
|
||||
//Minion minion = minions.get(n);
|
||||
|
||||
minion.onDraw(canvas);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
// Check if able to spawn
|
||||
if(minion.isCollision(startSides)){
|
||||
spawn = false;
|
||||
} else {
|
||||
spawn = true;
|
||||
}
|
||||
*/
|
||||
|
||||
if (wave == 6) {
|
||||
//Spawn more bosses
|
||||
if ((!minions.get(minions.size() - 1).isCollision(startSides)) && spawnMoreBosses > 0) {
|
||||
createBosses();
|
||||
--spawnMoreBosses;
|
||||
}
|
||||
} else {
|
||||
// Check if able to spawn
|
||||
if ((!minions.get(minions.size() - 1).isCollision(startSides)) && spawnMore > 0) {
|
||||
createMinions();
|
||||
--spawnMore;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
// Check if under tower fire
|
||||
int[] minionCell = minion.getCellLocation(numRows, numColumns);
|
||||
int i = minionCell[0];
|
||||
int j = minionCell[1];
|
||||
GridCell testTower;
|
||||
|
||||
// Test left cell
|
||||
if(i > 1) {
|
||||
testTower = gameGrid.CELL[i - 1][j];
|
||||
if (testTower.isTower && System.currentTimeMillis() - testTower.lastShot > 500) {
|
||||
shootMinion(testTower, minion);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Test top cell
|
||||
if(j > 1) {
|
||||
testTower = gameGrid.CELL[i][j - 1];
|
||||
if (testTower.isTower && System.currentTimeMillis() - testTower.lastShot > 500) {
|
||||
shootMinion(testTower, minion);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Test right cell
|
||||
if(i < numRows) {
|
||||
testTower = gameGrid.CELL[i + 1][j];
|
||||
if (testTower.isTower && System.currentTimeMillis() - testTower.lastShot > 500) {
|
||||
shootMinion(testTower, minion);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Test bottom cell
|
||||
if(j < numColumns) {
|
||||
testTower = gameGrid.CELL[i][j + 1];
|
||||
if (testTower.isTower && System.currentTimeMillis() - testTower.lastShot > 500) {
|
||||
shootMinion(testTower, minion);
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
for(GridCell towerCell: gameGrid.towers){
|
||||
shoot = !towerCell.isReloading();
|
||||
//System.out.println("Tower " + towerCell.id[0] + ", " + towerCell.id[1] + "is in range: " + towerCell.isInRange(minion.x, minion.y));
|
||||
if(shoot) {
|
||||
if(towerCell.isInRange(minion.x, minion.y)){
|
||||
shootMinion(towerCell, minion);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
for (GridCell towerCell : gameGrid.towers) {
|
||||
//System.out.println("Tower " + towerCell.id[0] + ", " + towerCell.id[1] + "is in range: " + towerCell.isInRange(minion.x, minion.y));
|
||||
if (!towerCell.isReloading(mainPauseTime, mainUnPauseTime)) {
|
||||
if (towerCell.isInRange(minion.x, minion.y)) {
|
||||
if (minion.x >= minions.get(shootMinion).x) {
|
||||
shoot = true;
|
||||
shootMinion = minions.indexOf(minion);
|
||||
shootTower = gameGrid.towers.indexOf(towerCell);
|
||||
//shootMinion(towerCell, minion);
|
||||
//break;
|
||||
} else {
|
||||
shoot = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
// Check if minion has reached end
|
||||
if(minion.isCollision(endSides)){
|
||||
--lives;
|
||||
remove = true;
|
||||
}
|
||||
*/
|
||||
|
||||
// Check if minion has reached end
|
||||
if (minion.isCollision(endSides)) {
|
||||
remove = true;
|
||||
livesLost = 1;
|
||||
}
|
||||
}
|
||||
|
||||
for(Bullet bullet : bullets){
|
||||
if(bullet.spent){
|
||||
bullets.remove(bullet);
|
||||
}
|
||||
}
|
||||
|
||||
if (shoot) {
|
||||
if (minions.get(shootMinion).health <= gameGrid.towers.get(shootTower).damage) { // && shootMinion == 0) {
|
||||
remove = false;
|
||||
}
|
||||
shootMinion(gameGrid.towers.get(shootTower), minions.get(shootMinion));
|
||||
shoot = false;
|
||||
}
|
||||
|
||||
|
||||
// Remove minion if needed
|
||||
if (remove) {
|
||||
for(Bullet bullet : bullets){
|
||||
if(minions.indexOf(bullet.minion) == 0){
|
||||
bullet.spent = true;
|
||||
}
|
||||
}
|
||||
minions.remove(minions.get(0));
|
||||
lives = lives - livesLost;
|
||||
//money = money + livesLost;
|
||||
remove = false;
|
||||
}
|
||||
|
||||
/*
|
||||
// Spawn more if needed
|
||||
if(spawnMore > 0 && spawn){
|
||||
createMinions();
|
||||
--spawnMore;
|
||||
}
|
||||
|
||||
// Remove minion if needed
|
||||
if(remove){
|
||||
minions.remove(minions.get(0));
|
||||
remove = false;
|
||||
}
|
||||
*/
|
||||
|
||||
// If minions have been defeated, advance levels!
|
||||
if (spawnMore == 0 && spawnMoreBosses == 0 && minions.size() == 0) {
|
||||
startNextLevel();
|
||||
}
|
||||
|
||||
// If all lives have been lost, it's game over!
|
||||
if (lives <= 0) {
|
||||
gameOver = true;
|
||||
}
|
||||
|
||||
/*
|
||||
// Update the runners
|
||||
try {
|
||||
for (Minion minion : minions) {
|
||||
minion.onDraw(canvas);
|
||||
canvas.drawText("" + minion.health, minion.x + minion.width / 8, minion.y - trackSize / 2, paint);
|
||||
|
||||
//Spawn minion after last leaves spawn
|
||||
if (minion.x > startX + trackSize / 2 && spawnMore > 0) {
|
||||
spawn = true;
|
||||
}
|
||||
else {
|
||||
spawn = false;
|
||||
}
|
||||
|
||||
// If a minion reaches the end, remove him and a life
|
||||
if (minion.isCollision(endX, endY)) {
|
||||
minions.remove(minion);
|
||||
--lives;
|
||||
|
||||
// If out of lives, game over!
|
||||
if (lives <= 0) {
|
||||
gameOver = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch(Exception e){
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
|
||||
if(spawn){
|
||||
minions.add(createMinion(R.drawable.sprite_green01, 5));
|
||||
--spawnMore;
|
||||
spawn = false;
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
} else {
|
||||
canvas.drawText("GAME OVER", getWidth() / 2, getHeight() / 2, paint);
|
||||
canvas.drawText("Round " + round + " wave " + wave, getWidth() / 2, getHeight() / 2 + 20, paint);
|
||||
}
|
||||
}
|
||||
catch(Exception e){
|
||||
System.out.println("Error in onDraw!");
|
||||
e.printStackTrace();
|
||||
System.out.println("Error in onDraw!");
|
||||
}
|
||||
}
|
||||
|
||||
private void createBosses(){
|
||||
minions.add(createMinion(R.drawable.demon_king, round*10, speed*2));
|
||||
|
||||
}
|
||||
|
||||
private void createMinions(){
|
||||
//bmp = BitmapFactory.decodeResource(getResources(), R.drawable.sprite_green01);
|
||||
/* */
|
||||
|
||||
minions.add(createMinion(R.drawable.sprite_green01, role, speed));
|
||||
|
||||
// */
|
||||
/*
|
||||
for(; minionTypes[0][level] >= 0; --minionTypes[0][level]){
|
||||
minions.add(createMinion(minionTypes[1][level], minionTypes[2][level]));
|
||||
}
|
||||
// */
|
||||
}
|
||||
|
||||
private Minion createMinion(int resource, int role, int speed) {
|
||||
|
||||
Bitmap bmp = BitmapFactory.decodeResource(getResources(), resource);
|
||||
|
||||
return new Minion(this, bmp, role, speed, startX, startY);
|
||||
|
||||
}
|
||||
|
||||
private Bullet createBullet(int bulletresource, int damage, int startX, int startY, Minion minion){
|
||||
|
||||
Bitmap bulletbmp = BitmapFactory.decodeResource(getResources(), bulletresource);
|
||||
|
||||
return new Bullet(this, bulletbmp, damage, startX, startY, minion);
|
||||
}
|
||||
|
||||
private void createGrid(){
|
||||
|
||||
if(!gridCreated) {
|
||||
gameGrid = new GameGrid(numRows, numColumns, GameView.this);
|
||||
|
||||
gameGrid.setStartCell(startCoords);
|
||||
gameGrid.setEndCell(endCoords);
|
||||
|
||||
for (int i = 0; true; i++) {
|
||||
if (pathCoordsX[i] == -666) {
|
||||
break;
|
||||
}
|
||||
int[] tempID = {pathCoordsX[i], pathCoordsY[i]};
|
||||
gameGrid.setPathCell(tempID);
|
||||
}
|
||||
|
||||
for (int i = 0; true; i++) {
|
||||
if (buildableCoordsX[i] == -666) {
|
||||
break;
|
||||
}
|
||||
int[] tempID = {buildableCoordsX[i], buildableCoordsY[i]};
|
||||
gameGrid.setBuildableCell(tempID);
|
||||
}
|
||||
|
||||
/*
|
||||
for(int i = 0; true; i++){
|
||||
if(pausableCoordsX[i] == -666){
|
||||
break;
|
||||
}
|
||||
int[] tempID = {pausableCoordsX[i], pausableCoordsY[i]};
|
||||
gameGrid.setPausableCell(tempID);
|
||||
}
|
||||
*/
|
||||
|
||||
startX = gameGrid.startCell.centerX;
|
||||
startY = gameGrid.startCell.centerY;
|
||||
startSides = gameGrid.startCell.getSides();
|
||||
|
||||
endX = gameGrid.endCell.centerX;
|
||||
endY = gameGrid.endCell.centerY;
|
||||
endSides = gameGrid.endCell.getSides();
|
||||
|
||||
gridCreated = true;
|
||||
}
|
||||
}
|
||||
/*
|
||||
private void paintSquare(Canvas canvas, int x, int y, int color){
|
||||
paint.setColor(color);
|
||||
paint.setStrokeWidth(0);
|
||||
int side[] = new int[4];
|
||||
|
||||
side[0] = x - trackSize/2;//left
|
||||
side[1] = y + trackSize/2;//top
|
||||
side[2] = x + trackSize/2;//right
|
||||
side[3] = y - trackSize/2;//bottom
|
||||
|
||||
if(side[0] < 0) {
|
||||
side[0] = 0;
|
||||
}
|
||||
if(side[1] < 0) {
|
||||
side[1] = 0;
|
||||
}
|
||||
if(side[2] > getWidth()) {
|
||||
side[2] = getWidth();
|
||||
}
|
||||
if(side[3] > getHeight()) {
|
||||
side[3] = getHeight();
|
||||
}
|
||||
|
||||
canvas.drawRect(side[0], side[1], side[2], side[3], paint);
|
||||
}
|
||||
|
||||
private void paintRect(Canvas canvas, int x, int y, int width, int height, int color){
|
||||
paint.setColor(color);
|
||||
paint.setStrokeWidth(0);
|
||||
int side[] = new int[4];
|
||||
|
||||
side[0] = x;//left
|
||||
side[1] = y;//top
|
||||
side[2] = x + width;//right
|
||||
side[3] = y - height;//bottom
|
||||
|
||||
if(side[0] < 0) {
|
||||
side[0] = 0;
|
||||
}
|
||||
if(side[1] < 0) {
|
||||
side[1] = 0;
|
||||
}
|
||||
if(side[2] > getWidth()) {
|
||||
side[2] = getWidth();
|
||||
}
|
||||
if(side[3] > getHeight()) {
|
||||
side[3] = getHeight();
|
||||
}
|
||||
|
||||
canvas.drawRect(side[0], side[1], side[2], side[3], paint);
|
||||
}
|
||||
*/
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event){
|
||||
|
||||
if (System.currentTimeMillis() - lastClick > 250) {
|
||||
|
||||
lastClick = System.currentTimeMillis();
|
||||
|
||||
float x = event.getX();
|
||||
|
||||
float y = event.getY();
|
||||
|
||||
synchronized (getHolder()) {
|
||||
|
||||
/*
|
||||
for (int i = minions.size() - 1; i >= 0; i--) {
|
||||
|
||||
Minion minion = minions.get(i);
|
||||
|
||||
if (minion.isCollision(x, y)) {
|
||||
|
||||
damageMinion(minion);
|
||||
|
||||
if (minions.size() == 0) {
|
||||
startNextLevel();
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
/*
|
||||
for(GridCell pause : gameGrid.pauseButton){
|
||||
if(pause.isCollision(x,y) && !paused){
|
||||
paused = true;
|
||||
pauseTime = System.currentTimeMillis();
|
||||
}
|
||||
else if(pause.isCollision(x,y) && paused){
|
||||
paused = false;
|
||||
unPauseTime = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
for(GridCell tower: gameGrid.towers){
|
||||
if(tower.isCollision(x,y)){ //) && money >= tower.towerUpgradeCost){
|
||||
/*
|
||||
money = money - tower.towerUpgradeCost;
|
||||
tower.upgrade();
|
||||
*/
|
||||
gameGrid.showUpgrades = true;
|
||||
selectedTower = tower;
|
||||
}
|
||||
}
|
||||
|
||||
if(gameGrid.showUpgrades){
|
||||
|
||||
if(!selectedTower.isSlowTower){
|
||||
if(gameGrid.basicUpgradeCell.isCollision(x,y) && money >= selectedTower.towerUpgradeCost){
|
||||
money = money - selectedTower.towerUpgradeCost;
|
||||
selectedTower.upgrade();
|
||||
gameGrid.showUpgrades = false;
|
||||
}
|
||||
else if(gameGrid.slowUpgradeCell.isCollision(x,y)){
|
||||
selectedTower.setSlowTower();
|
||||
gameGrid.showUpgrades = false;
|
||||
}
|
||||
}
|
||||
else if(selectedTower.isSlowTower){
|
||||
if(gameGrid.basicUpgradeCell.isCollision(x,y)){
|
||||
selectedTower.setBasicTower();
|
||||
gameGrid.showUpgrades = false;
|
||||
}
|
||||
else if(gameGrid.slowUpgradeCell.isCollision(x,y) && money >= selectedTower.towerUpgradeCost){
|
||||
money = money - selectedTower.towerUpgradeCost;
|
||||
selectedTower.upgrade();
|
||||
gameGrid.showUpgrades = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; true; i++){
|
||||
if(buildableCoordsX[i] == -666){
|
||||
break;
|
||||
}
|
||||
if(gameGrid.CELL[buildableCoordsX[i]][buildableCoordsY[i]].isCollision(x,y) && !gameGrid.CELL[buildableCoordsX[i]][buildableCoordsY[i]].isTower){
|
||||
if(money >= gameGrid.CELL[buildableCoordsX[i]][buildableCoordsY[i]].defaultTowerCost) {
|
||||
int[] temp = {buildableCoordsX[i], buildableCoordsY[i]};
|
||||
gameGrid.setTowerCell(temp);
|
||||
money = money - gameGrid.CELL[buildableCoordsX[i]][buildableCoordsY[i]].defaultTowerCost;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void startNextLevel(){
|
||||
//long pauseTime = System.currentTimeMillis();
|
||||
// Pause for 5 seconds
|
||||
//while(System.currentTimeMillis() - pauseTime < 5000){};
|
||||
|
||||
/*
|
||||
while(killCount >= 5){
|
||||
money = money + round;
|
||||
killCount = killCount - 5;
|
||||
}
|
||||
*/
|
||||
//money = money + round;
|
||||
|
||||
++wave;
|
||||
|
||||
if(wave > 6){
|
||||
//money = money + round;
|
||||
|
||||
++round;
|
||||
wave = 1;
|
||||
++lives;
|
||||
|
||||
defaultSpeed = defaultSpeed - 5;
|
||||
|
||||
role = role + round-1;
|
||||
|
||||
money = money + role;
|
||||
|
||||
spawnMore = spawnNum - spawnNum/3;
|
||||
|
||||
//spawnNum = defaultExtraSpawn + (round-1);
|
||||
}
|
||||
|
||||
++spawnNum;
|
||||
|
||||
speed = defaultSpeed - wave*wave;
|
||||
|
||||
startNextLevelTask = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
paused = false;
|
||||
if (wave == 6){
|
||||
spawnMoreBosses = round -1;
|
||||
createBosses();
|
||||
} else {
|
||||
spawnMore = spawnNum;
|
||||
createMinions();
|
||||
}
|
||||
}
|
||||
};
|
||||
paused = true;
|
||||
timer.schedule(startNextLevelTask, 3000);
|
||||
}
|
||||
|
||||
/*
|
||||
private void startNewGame(){
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(baseContext);
|
||||
builder.setMessage("Game over, try again?");
|
||||
|
||||
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
android.os.Process.killProcess(android.os.Process.myPid());
|
||||
|
||||
dialogInterface.cancel();
|
||||
}
|
||||
});
|
||||
|
||||
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
lives = defaultLives;
|
||||
level = 0;
|
||||
gameGrid = new GameGrid(numRows, numColumns, GameView.this);
|
||||
|
||||
createMinions();
|
||||
|
||||
dialogInterface.cancel();
|
||||
}
|
||||
});
|
||||
|
||||
AlertDialog alertDialog = builder.create();
|
||||
alertDialog.show();
|
||||
}
|
||||
*/
|
||||
|
||||
public void shootMinion(GridCell tower, Minion minion){
|
||||
tower.lastShot = System.currentTimeMillis();
|
||||
tower.isReloading(mainPauseTime, mainUnPauseTime);
|
||||
|
||||
if(tower.isSlowTower){
|
||||
slowMinion(minion);
|
||||
}
|
||||
|
||||
bullets.add(createBullet(R.drawable.bullet_cc2, tower.damage, tower.centerX, tower.centerY, minion));
|
||||
|
||||
// Now called on collision with bullet
|
||||
//damageMinion(minion, tower.damage);
|
||||
}
|
||||
|
||||
public void damageMinion(Minion minion, int damage){
|
||||
minion.health = minion.health - damage;
|
||||
|
||||
if(minion.health <= 0) {
|
||||
for(Bullet bullet : bullets){
|
||||
if(bullet.minion.health <= 0){
|
||||
bullets.remove(bullet);
|
||||
}
|
||||
}
|
||||
System.out.println("Dying minion health = " + minion.health);
|
||||
minions.remove(minion);
|
||||
++killCount;
|
||||
|
||||
// Award for kill count
|
||||
if(wave == 6){
|
||||
++money;
|
||||
} else {
|
||||
while (killCount >= 5) {
|
||||
++money;
|
||||
killCount = killCount - 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void slowMinion(Minion minion){
|
||||
minion.slowedTime = System.currentTimeMillis();
|
||||
minion.isSlowed = true;
|
||||
}
|
||||
|
||||
public void setMainPause(Boolean pause){
|
||||
mainPause = pause;
|
||||
|
||||
if(mainPause){
|
||||
mainPauseTime = System.currentTimeMillis();
|
||||
} else {
|
||||
mainUnPauseTime = System.currentTimeMillis();
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
||||
public void stopThreads(){
|
||||
gameLoopThread.setRunning(false);
|
||||
try {
|
||||
//gameLoopThread.join();
|
||||
gameLoopThread.suspend();
|
||||
} catch (Exception e) {
|
||||
System.out.println(e.toString());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void startThreads(){
|
||||
gameLoopThread.setRunning(true);
|
||||
|
||||
//gameLoopThread.start();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
public void loadData(){
|
||||
|
||||
}
|
||||
|
||||
public String saveData(){
|
||||
String save;
|
||||
|
||||
save = "";
|
||||
|
||||
return save;
|
||||
}
|
||||
*/
|
||||
}
|
271
app/src/main/java/com/hyperling/examplegame_practice/GridCell.java
Executable file
@ -0,0 +1,271 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.graphics.Color;
|
||||
/**
|
||||
* Created by usb on 11/9/14.
|
||||
*/
|
||||
public class GridCell {
|
||||
int[] id; // x,y == row,column
|
||||
int x,y; // coordinates
|
||||
|
||||
int height;
|
||||
int width;
|
||||
|
||||
int side[] = new int[4]; // Left, Top, Right, Bottom
|
||||
|
||||
int centerX; // center coordinates
|
||||
int centerY; // center coordinates
|
||||
int centerForTextX;
|
||||
int centerForTextY;
|
||||
|
||||
int startC = Color.GREEN;
|
||||
int endC = Color.RED;
|
||||
int pathC = Color.YELLOW;
|
||||
int buildableC = Color.DKGRAY;
|
||||
int buildableInterior = Color.CYAN;
|
||||
int towerC = Color.BLUE;
|
||||
int reloadingC = Color.WHITE;
|
||||
int nullC = Color.TRANSPARENT;
|
||||
|
||||
int color = nullC;
|
||||
int innerColor = color;
|
||||
|
||||
int towerType = 1;
|
||||
|
||||
int defaultTowerCost = 2;
|
||||
int towerCost = defaultTowerCost;
|
||||
int towerUpgradeCost;
|
||||
int towerChoices = 2;
|
||||
|
||||
boolean isStart;
|
||||
boolean isEnd;
|
||||
boolean isPath;
|
||||
boolean isBuildable;
|
||||
boolean isTower;
|
||||
boolean isSlowTower = false;
|
||||
private boolean isReloading = false;
|
||||
boolean isNull = true;
|
||||
|
||||
long lastShot = 0;
|
||||
int defaultReload = 2500;
|
||||
int reload = defaultReload;
|
||||
|
||||
int damage = 1;
|
||||
|
||||
public GridCell(){
|
||||
findTowerCost();
|
||||
}
|
||||
|
||||
public GridCell(int[] id, int width, int height){
|
||||
this.id = id;
|
||||
|
||||
x = id[0] * width;
|
||||
y = id[1] * height;
|
||||
|
||||
this.height = height;
|
||||
this.width = width;
|
||||
|
||||
side[0] = x;//left
|
||||
side[1] = y;//top
|
||||
side[2] = x + width;//right
|
||||
side[3] = y + height;//bottom
|
||||
|
||||
centerX = (side[0]+side[2])/2;
|
||||
centerY = (side[1]+side[3])/2;
|
||||
|
||||
centerForTextX = centerX - width/24;
|
||||
centerForTextY = centerY + height/16;
|
||||
|
||||
findTowerCost();
|
||||
/*
|
||||
if(side[0] < 0) {
|
||||
side[0] = 0;
|
||||
}
|
||||
if(side[1] < 0) {
|
||||
side[1] = 0;
|
||||
}
|
||||
if(side[2] > getWidth()) {
|
||||
side[2] = getWidth();
|
||||
}
|
||||
if(side[3] > getHeight()) {
|
||||
side[3] = getHeight();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
public int getColor(){
|
||||
return color;
|
||||
}
|
||||
|
||||
public int[] getSides(){
|
||||
return side;
|
||||
}
|
||||
|
||||
private void setAllFalse(){
|
||||
isStart = false;
|
||||
isEnd = false;
|
||||
isPath = false;
|
||||
isBuildable = false;
|
||||
isTower = false;
|
||||
isNull = true;
|
||||
}
|
||||
|
||||
public void setStart(){
|
||||
color = startC;
|
||||
|
||||
setAllFalse();
|
||||
isStart = true;
|
||||
}
|
||||
|
||||
public void setEnd(){
|
||||
color = endC;
|
||||
|
||||
setAllFalse();
|
||||
isEnd = true;
|
||||
}
|
||||
|
||||
public void setPath(){
|
||||
color = pathC;
|
||||
|
||||
setAllFalse();
|
||||
isPath = true;
|
||||
}
|
||||
|
||||
public void setBuildable(){
|
||||
color = buildableC;
|
||||
|
||||
setAllFalse();
|
||||
isBuildable = true;
|
||||
}
|
||||
|
||||
public void setTower(){
|
||||
color = buildableC;
|
||||
innerColor = towerC;
|
||||
|
||||
setAllFalse();
|
||||
isTower = true;
|
||||
}
|
||||
|
||||
public void setBasicTower(){
|
||||
isSlowTower = false;
|
||||
|
||||
damage = damage * 2;
|
||||
if(damage == 0) {
|
||||
damage = 1;
|
||||
}
|
||||
}
|
||||
|
||||
public void setSlowTower(){
|
||||
isSlowTower = true;
|
||||
|
||||
damage = damage / 2;
|
||||
}
|
||||
|
||||
public void setTowerReloading(){
|
||||
innerColor = reloadingC;
|
||||
|
||||
isReloading = true;
|
||||
}
|
||||
|
||||
public void setTowerReloaded(){
|
||||
innerColor = towerC;
|
||||
|
||||
isReloading = false;
|
||||
}
|
||||
|
||||
public void setNull(){
|
||||
color = nullC;
|
||||
|
||||
setAllFalse();
|
||||
isNull = true;
|
||||
}
|
||||
|
||||
public void upgrade(){
|
||||
towerCost = towerCost + towerUpgradeCost;
|
||||
|
||||
++towerType;
|
||||
|
||||
//if(!isSlowTower) {
|
||||
switch (towerType) {
|
||||
case 2:
|
||||
towerC = Color.RED;
|
||||
//towerUpgradeCost = 8;
|
||||
break;
|
||||
case 3:
|
||||
towerC = Color.MAGENTA;
|
||||
//towerUpgradeCost = 16;
|
||||
break;
|
||||
case 4:
|
||||
towerC = Color.BLACK;
|
||||
break;
|
||||
}
|
||||
innerColor = towerC;
|
||||
//}
|
||||
|
||||
damage = damage * 2;
|
||||
reload = defaultReload / towerType;
|
||||
|
||||
findTowerCost();
|
||||
}
|
||||
|
||||
public boolean isCollision(float x2, float y2){
|
||||
boolean collision = false;
|
||||
|
||||
if(x2 > side[0] && x2 < side[2] && y2 > side[1] && y2 < side[3]){
|
||||
collision = true;
|
||||
}
|
||||
|
||||
return collision;
|
||||
}
|
||||
|
||||
public boolean isInRange(int x2, int y2){
|
||||
boolean inRange = false;
|
||||
|
||||
if(x2 > side[0] - width && x2 < side[2] + width && y2 > side[1] - height && y2 < side[3] + height){
|
||||
inRange = true;
|
||||
}
|
||||
|
||||
return inRange;
|
||||
}
|
||||
|
||||
/*
|
||||
public boolean isReloading(){
|
||||
if(System.currentTimeMillis() - lastShot > reload){
|
||||
setTowerReloaded();
|
||||
} else {
|
||||
setTowerReloading();
|
||||
}
|
||||
return isReloading;
|
||||
}
|
||||
*/
|
||||
|
||||
public boolean isReloading(long pauseTime, long unPauseTime){
|
||||
if(lastShot > pauseTime) {
|
||||
if (System.currentTimeMillis() - lastShot > reload) {
|
||||
setTowerReloaded();
|
||||
} else {
|
||||
setTowerReloading();
|
||||
}
|
||||
}
|
||||
else if(unPauseTime > pauseTime){
|
||||
if ((System.currentTimeMillis() - (unPauseTime - pauseTime))- lastShot > reload) {
|
||||
setTowerReloaded();
|
||||
} else {
|
||||
setTowerReloading();
|
||||
}
|
||||
}
|
||||
return isReloading;
|
||||
}
|
||||
|
||||
private void findTowerCost(){
|
||||
int nextTowerType = towerType + 1;
|
||||
towerUpgradeCost = (defaultTowerCost * (damage * 2 ) * nextTowerType) - towerCost;
|
||||
|
||||
if(isSlowTower){
|
||||
towerUpgradeCost = towerUpgradeCost*2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
29
app/src/main/java/com/hyperling/examplegame_practice/Help.java
Executable file
@ -0,0 +1,29 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
/**
|
||||
* Created by usb on 12/20/14.
|
||||
*/
|
||||
public class Help extends Activity{
|
||||
|
||||
Button btnBTS;
|
||||
|
||||
public void onCreate(Bundle savedInstanceState){
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_help);
|
||||
|
||||
btnBTS = (Button) findViewById(R.id.btnBackToStart);
|
||||
|
||||
btnBTS.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
startActivity(new Intent(Help.this, MainActivity.class));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
114
app/src/main/java/com/hyperling/examplegame_practice/MainActivity.java
Executable file
@ -0,0 +1,114 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
|
||||
public class MainActivity extends Activity {
|
||||
|
||||
public Game game;
|
||||
|
||||
Button btnStart, btnContinue, btnHelp;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
// Deletes any old save files
|
||||
//getBaseContext().deleteFile("savedata");
|
||||
|
||||
btnStart = (Button) findViewById(R.id.btnStart);
|
||||
btnContinue = (Button) findViewById(R.id.btnContinue);
|
||||
btnHelp = (Button) findViewById(R.id.btnHelp);
|
||||
|
||||
|
||||
btnStart.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
game = new Game(false);
|
||||
startActivity(new Intent(MainActivity.this, game.getClass()));
|
||||
}
|
||||
});
|
||||
|
||||
btnContinue.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
game = new Game(true);
|
||||
startActivity(new Intent(MainActivity.this, game.getClass()));
|
||||
}
|
||||
});
|
||||
|
||||
btnHelp.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
startActivity(new Intent(MainActivity.this, Help.class));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
protected void onPause(){
|
||||
super.onPause();
|
||||
|
||||
// Stop threads
|
||||
gameview.stopThreads();
|
||||
}
|
||||
|
||||
protected void onResume(){
|
||||
super.onResume();
|
||||
|
||||
// Restore previous session
|
||||
//setContentView(gameview);
|
||||
|
||||
//gameview.startThreads();
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
getMenuInflater().inflate(R.menu.main, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
int id = item.getItemId();
|
||||
if (id == R.id.action_reset) {
|
||||
gameview = new GameView(MainActivity.this);
|
||||
setContentView(gameview);
|
||||
return true;
|
||||
}
|
||||
else if (id == R.id.action_pause) {
|
||||
mainPause = !mainPause;
|
||||
if(mainPause){
|
||||
//gameview.stopThreads();
|
||||
item.setTitle("Resume");
|
||||
}
|
||||
else{
|
||||
//gameview.startThreads();
|
||||
item.setTitle("Pause");
|
||||
}
|
||||
try {
|
||||
gameview.setMainPause(mainPause);
|
||||
}
|
||||
catch(Exception e){
|
||||
e.printStackTrace();
|
||||
System.out.println(e.toString());
|
||||
System.out.println(mainPause);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
*/
|
||||
}
|
207
app/src/main/java/com/hyperling/examplegame_practice/Minion.java
Executable file
@ -0,0 +1,207 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
|
||||
/**
|
||||
* Created by usb on 10/23/14.
|
||||
*/
|
||||
public class Minion {
|
||||
|
||||
// How many rows and columns? Must find the little guy
|
||||
private static final int BMP_ROWS = 4;
|
||||
private static final int BMP_COLUMNS = 3;
|
||||
|
||||
// Direction the guy moves according to quadrants
|
||||
String directions[] = {"down", "left", "right", "up"};
|
||||
|
||||
// Default speed
|
||||
private final int SPEED_PER_STEP;
|
||||
|
||||
// Variables
|
||||
int x, y, xSpeed, ySpeed, currentFrame, width, height;
|
||||
|
||||
int centerX, centerY;
|
||||
|
||||
GameView gameView;
|
||||
|
||||
Bitmap bmp;
|
||||
|
||||
//int role; //determines speed and health
|
||||
int health;
|
||||
|
||||
long slowedTime;
|
||||
boolean isSlowed;
|
||||
int slow = 1;
|
||||
|
||||
public Minion(GameView gv, Bitmap bm, int role, int speed, int startX, int startY){
|
||||
gameView = gv;
|
||||
bmp = bm;
|
||||
health = role;
|
||||
this.SPEED_PER_STEP = speed;
|
||||
|
||||
xSpeed = SPEED_PER_STEP;
|
||||
ySpeed = 0;
|
||||
|
||||
//Find size of individual character, not entire bitmap
|
||||
width = bmp.getWidth() / BMP_COLUMNS;
|
||||
height = bmp.getHeight() / BMP_ROWS;
|
||||
|
||||
x = startX;
|
||||
y = startY - (height/2);
|
||||
}
|
||||
|
||||
private void update(){
|
||||
/*
|
||||
//Turn around if hitting x walls
|
||||
if(x > gameView.getWidth() - width - xSpeed){
|
||||
xSpeed = -xSpeed;
|
||||
}
|
||||
if(x + xSpeed < 0){
|
||||
xSpeed = Math.abs(xSpeed);
|
||||
}
|
||||
*/
|
||||
int movement;
|
||||
|
||||
if(isSlowed){
|
||||
slow = 3;
|
||||
}
|
||||
|
||||
if(xSpeed > 0) {
|
||||
movement = (gameView.getWidth() / (xSpeed));
|
||||
} else {
|
||||
movement = 0;
|
||||
}
|
||||
x = x + movement/slow;
|
||||
centerX = x + width/2;
|
||||
|
||||
|
||||
/*
|
||||
//Turn around if hitting y walls
|
||||
if(y > gameView.getWidth() - height - ySpeed){
|
||||
ySpeed = -ySpeed;
|
||||
}
|
||||
if(y + ySpeed < 0){
|
||||
ySpeed = Math.abs(ySpeed);
|
||||
}
|
||||
*/
|
||||
|
||||
if(ySpeed > 0) {
|
||||
movement = (gameView.getHeight() / ySpeed);
|
||||
} else {
|
||||
movement = 0;
|
||||
}
|
||||
y = y + movement/slow;
|
||||
centerY = y + height/2;
|
||||
|
||||
// Make him look like he's walking
|
||||
// %BMP_COLUMNS makes it stay withing bounds
|
||||
currentFrame = ++currentFrame % BMP_COLUMNS;
|
||||
|
||||
if(isSlowed){
|
||||
if(System.currentTimeMillis() - slowedTime > 1000){
|
||||
isSlowed = false;
|
||||
slow = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onDraw(Canvas canvas) {
|
||||
|
||||
// Move the guy
|
||||
update();
|
||||
|
||||
int srcX = currentFrame * width;
|
||||
int srcY = getAnimationRow() * height;
|
||||
|
||||
Rect src = new Rect(srcX, srcY, srcX + width, srcY + height);
|
||||
|
||||
Rect dest = new Rect(x, y, x + width, y + height);
|
||||
|
||||
canvas.drawBitmap(bmp, src, dest, null);
|
||||
}
|
||||
|
||||
private int getAnimationRow() {
|
||||
|
||||
String dir = "";
|
||||
String xdir = "";
|
||||
String ydir = "";
|
||||
int i;
|
||||
|
||||
// If stationary, look down
|
||||
if(xSpeed == 0 && ySpeed == 0){
|
||||
dir = "down";
|
||||
}
|
||||
else {
|
||||
// Find x direction
|
||||
if(xSpeed > 0) {
|
||||
xdir = "right";
|
||||
} else {
|
||||
xdir = "left";
|
||||
}
|
||||
|
||||
// Find y direction
|
||||
if(ySpeed > 0){
|
||||
ydir = "down";
|
||||
}
|
||||
else{
|
||||
ydir = "up";
|
||||
}
|
||||
|
||||
// Use whichever is stronger
|
||||
if(Math.abs(xSpeed) > Math.abs(ySpeed)){
|
||||
dir = xdir;
|
||||
}
|
||||
else{
|
||||
dir = ydir;
|
||||
}
|
||||
}
|
||||
|
||||
// Match i for the direction
|
||||
for(i = 0; i < 4; i++){
|
||||
//System.out.println("dir is " + dir);
|
||||
//System.out.println("x + xSpeed are " + (x+xSpeed));
|
||||
//System.out.println("i says " + directions[i]);
|
||||
if(directions[i].equals(dir)){
|
||||
break;
|
||||
}
|
||||
}
|
||||
//System.out.println(i);
|
||||
return i;
|
||||
}
|
||||
|
||||
public boolean isCollision(int x2, int y2) {
|
||||
|
||||
return x2 > x && x2 < x + width && y2 > y && y2 < y + height;
|
||||
|
||||
}
|
||||
|
||||
public boolean isCollision(int[] side) {
|
||||
boolean isInside = false;
|
||||
|
||||
if(x > side[0] && x < side[2] && y > side[1] && y < side[3]){
|
||||
isInside = true;
|
||||
}
|
||||
|
||||
return isInside;
|
||||
//return x2 > x && x2 < x + width && y2 > y && y2 < y + height;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
public int getRole() {
|
||||
|
||||
return role;
|
||||
}
|
||||
*/
|
||||
|
||||
public int[] getCellLocation(int numRows, int numColumns){
|
||||
int i = gameView.getHeight()/numRows;
|
||||
int j = gameView.getWidth()/numColumns;
|
||||
|
||||
int[] a = {i,j};
|
||||
return a;
|
||||
}
|
||||
|
||||
}
|
78
app/src/main/java/com/hyperling/examplegame_practice/SAL.java
Executable file
@ -0,0 +1,78 @@
|
||||
package com.hyperling.examplegame_practice;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
|
||||
/**
|
||||
* Created by usb on 12/12/14.
|
||||
*/
|
||||
// Save and Load
|
||||
public class SAL {
|
||||
|
||||
//GameView gv;
|
||||
String filename;
|
||||
|
||||
public SAL(String fn){
|
||||
//gv = gameView;
|
||||
filename = fn;
|
||||
}
|
||||
|
||||
/*
|
||||
public SAL(GameView gameView, String fn){
|
||||
gv = gameView;
|
||||
filename = fn;
|
||||
}
|
||||
*/
|
||||
|
||||
public void save(GameView gv){
|
||||
|
||||
try{
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(filename);
|
||||
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
|
||||
objectOutputStream.writeObject(gv);
|
||||
objectOutputStream.close();
|
||||
}
|
||||
catch(Exception e){
|
||||
System.out.println(e.toString());
|
||||
e.printStackTrace();
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public void load(GameView gv){
|
||||
|
||||
try{
|
||||
FileInputStream fileInputStream = new FileInputStream(filename);
|
||||
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
|
||||
gv = (GameView) objectInputStream.readObject();
|
||||
objectInputStream.close();
|
||||
}
|
||||
catch(Exception e){
|
||||
System.out.println(e.toString());
|
||||
e.printStackTrace();
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
|
||||
//return gv;
|
||||
}
|
||||
|
||||
/*
|
||||
public boolean check(){
|
||||
boolean fileExists = false;
|
||||
|
||||
try
|
||||
{
|
||||
File file = new File(filename);
|
||||
fileExists = file.exists();
|
||||
}
|
||||
catch(Exception e){System.out.println("Error checking in file exists in SAL");}
|
||||
|
||||
return fileExists;
|
||||
}
|
||||
*/
|
||||
}
|
BIN
app/src/main/res/drawable-hdpi/bullet_2.png
Executable file
After Width: | Height: | Size: 541 B |
BIN
app/src/main/res/drawable-hdpi/bullet_3.png
Executable file
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/drawable-hdpi/bullet_cc.png
Executable file
After Width: | Height: | Size: 335 B |
BIN
app/src/main/res/drawable-hdpi/bullet_cc2.png
Executable file
After Width: | Height: | Size: 332 B |
BIN
app/src/main/res/drawable-hdpi/bullet_cc2_100x100.png
Executable file
After Width: | Height: | Size: 6.9 KiB |
BIN
app/src/main/res/drawable-hdpi/bullet_default.png
Executable file
After Width: | Height: | Size: 327 B |
BIN
app/src/main/res/drawable-hdpi/cctd_image.png
Executable file
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/drawable-hdpi/demon_king.png
Executable file
After Width: | Height: | Size: 3.0 KiB |
BIN
app/src/main/res/drawable-hdpi/ic_launcher.png
Executable file
After Width: | Height: | Size: 9.2 KiB |
BIN
app/src/main/res/drawable-hdpi/sprite_green01.png
Executable file
After Width: | Height: | Size: 3.3 KiB |
BIN
app/src/main/res/drawable-hdpi/startmenu_20141221_1117.png
Executable file
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/main/res/drawable-hdpi/startmenu_button_20141221_1148.png
Executable file
After Width: | Height: | Size: 458 B |
BIN
app/src/main/res/drawable-hdpi/startmenu_empty_20141221_1148.png
Executable file
After Width: | Height: | Size: 1.2 KiB |
BIN
app/src/main/res/drawable-mdpi/ic_launcher.png
Executable file
After Width: | Height: | Size: 5.1 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_launcher.png
Executable file
After Width: | Height: | Size: 14 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_launcher.png
Executable file
After Width: | Height: | Size: 19 KiB |
41
app/src/main/res/layout/activity_help.xml
Executable file
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical" android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnBackToStart"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Back to Start"
|
||||
android:textSize="18sp"
|
||||
android:background="@drawable/startmenu_button_20141221_1148"/>
|
||||
|
||||
<!--
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Help"
|
||||
android:textSize="32sp"
|
||||
android:layout_gravity="center" />
|
||||
-->
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=" - To build a tower, click on a cyan square."
|
||||
android:textSize="20sp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=" - To upgrade or convert a tower, click on the tower then choose an option in the lower right hand corner."
|
||||
android:textSize="20sp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text=" - The costs of the upgrades are in the lower left hand corner."
|
||||
android:textSize="20sp"/>
|
||||
|
||||
</LinearLayout>
|
17
app/src/main/res/layout/activity_load.xml
Executable file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical" android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<Spinner
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/spinner"
|
||||
android:layout_centerInParent="true"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
64
app/src/main/res/layout/activity_main.xml
Executable file
@ -0,0 +1,64 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
<!-- android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin" -->
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/rlMenu"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/startmenu_empty_20141221_1148"
|
||||
android:layout_centerInParent="true"
|
||||
android:orientation="vertical"
|
||||
android:layout_margin="30dp"
|
||||
android:padding="30dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnStart"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/startmenu_button_20141221_1148"
|
||||
android:text="Start New Game"
|
||||
android:textSize="18sp"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:gravity="center"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnContinue"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/startmenu_button_20141221_1148"
|
||||
android:text="Continue Game"
|
||||
android:textSize="18sp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_centerInParent="true"
|
||||
android:enabled="true"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/HelpButtonWorkaround"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true">
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnHelp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/startmenu_button_20141221_1148"
|
||||
android:text="Help"
|
||||
android:textSize="18sp"/>
|
||||
|
||||
<!-- Fuck Relative layouts, margin bottom doesn't work in them?? What the fuck? Fuck that, man... Fuck.-->
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</RelativeLayout>
|
16
app/src/main/res/menu/menu_game.xml
Executable file
@ -0,0 +1,16 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context=".MainActivity" >
|
||||
|
||||
<item android:id="@+id/action_pause"
|
||||
android:title="Pause"
|
||||
android:orderInCategory="100"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item android:id="@+id/action_reset"
|
||||
android:title="Reset"
|
||||
android:orderInCategory="100"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
</menu>
|
6
app/src/main/res/values-w820dp/dimens.xml
Executable file
@ -0,0 +1,6 @@
|
||||
<resources>
|
||||
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
|
||||
(such as screen margins) for screens with more than 820dp of available width. This
|
||||
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
|
||||
<dimen name="activity_horizontal_margin">64dp</dimen>
|
||||
</resources>
|
5
app/src/main/res/values/dimens.xml
Executable file
@ -0,0 +1,5 @@
|
||||
<resources>
|
||||
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||
</resources>
|
7
app/src/main/res/values/strings.xml
Executable file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">C+C Tower Defense</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
|
||||
</resources>
|
8
app/src/main/res/values/styles.xml
Executable file
@ -0,0 +1,8 @@
|
||||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
</resources>
|
19
build.gradle
Executable file
@ -0,0 +1,19 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.0.0'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
}
|
18
gradle.properties
Executable file
@ -0,0 +1,18 @@
|
||||
# Project-wide Gradle settings.
|
||||
|
||||
# IDE (e.g. Android Studio) users:
|
||||
# Gradle settings configured through the IDE *will override*
|
||||
# any settings specified in this file.
|
||||
|
||||
# For more details on how to configure your build environment visit
|
||||
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
# Default value: -Xmx10248m -XX:MaxPermSize=256m
|
||||
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Executable file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Executable file
@ -0,0 +1,6 @@
|
||||
#Wed Apr 10 15:27:10 PDT 2013
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
|
164
gradlew
vendored
Executable file
@ -0,0 +1,164 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
esac
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
||||
if $cygwin ; then
|
||||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
fi
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >&-
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >&-
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||
function splitJvmOpts() {
|
||||
JVM_OPTS=("$@")
|
||||
}
|
||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||
|
||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
90
gradlew.bat
vendored
Executable file
@ -0,0 +1,90 @@
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
1
settings.gradle
Executable file
@ -0,0 +1 @@
|
||||
include ':app'
|