[alienbloodbath commit] r71 - trunk/src/android/com/abb

0 views
Skip to first unread message

codesite...@google.com

unread,
Jan 20, 2009, 5:17:01 PM1/20/09
to alien-blood-b...@googlegroups.com
Author: matt.burkhart
Date: Sun Jan 18 14:15:16 2009
New Revision: 71

Modified:
trunk/src/android/com/abb/Avatar.java
trunk/src/android/com/abb/Content.java
trunk/src/android/com/abb/Enemy.java
trunk/src/android/com/abb/Entity.java
trunk/src/android/com/abb/GameState.java
trunk/src/android/com/abb/Map.java
trunk/src/android/com/abb/Weapon.java

Log:
Start of new weapons code. Not operational yet.

Modified: trunk/src/android/com/abb/Avatar.java
==============================================================================
--- trunk/src/android/com/abb/Avatar.java (original)
+++ trunk/src/android/com/abb/Avatar.java Sun Jan 18 14:15:16 2009
@@ -21,10 +21,9 @@
public Avatar(GameState game_state) {
super();
mGameState = game_state;
- mWeapon = new Weapon(mGameState);

setDrawingScale(kDrawingScale);
- radius = kRadius;
+ radius = kRadius; // Collision radius.
}

@Override
@@ -32,9 +31,6 @@
ddy = kGravity;
super.step(time_step);

- mWeapon.x = x;
- mWeapon.y = y;
-
// Update the horizontal acceleration according to the current
controls and
// the contact with the ground.
if (ddx > 0 && has_ground_contact) {
@@ -49,18 +45,17 @@

// The following is a poor hack to simulate "friction" against the
ground
// surface. The problem with this implementation is that it does not
account
- // for the time_step. TODO(burkhart): Fix this friction implementation.
+ // for the time_step. TODO: Fix this friction implementation.
if (has_ground_contact && ddx == 0.0f) {
dx *= (1.0f - kGroundKineticFriction);
}

- // Update the avatar animation frame according the current entity
motion.
+ // Update the avatar animation.
if (dx < 0) {
sprite_flipped_horizontal = true;
} else if (dx > 0) {
sprite_flipped_horizontal = false;
}
-
if (has_ground_contact) {
if (Math.abs(dx) > kAnimationStopThreshold) {
loadAnimationFromUri("content:///run.humanoid.animation");
@@ -74,47 +69,13 @@
stepAnimation(time_step);
}

- mWeapon.setSprite(sprite_flipped_horizontal);
-
- // Update the shooting mechanism. The choices for shot direction are
- // specialized for each animation case: in the air, facing left,
right, and
- // considering the avatar's speed. TODO: Replace all of this with an
- // equivalent in Weapon.java.
- mShotDelay -= time_step;
- if (mShooting && mShotDelay < time_step) {
- mShotDelay = kShotDelay;
- float shot_angle;
- float shot_distance = kShotDistance;
- float shot_velocity = kShotVelocity;
- float x_offset;
- float y_offset;
-
- if (!has_ground_contact) {
- shot_angle = mShotPhase;
- if (sprite_flipped_horizontal) {
- shot_angle = -mShotPhase;
- }
- mShotDelay -= 2.0f * time_step;
- mShotPhase += 45.0f * (float)Math.PI / 180.0f;
- shot_velocity *= 0.6f;
- x_offset = kShotDistance * (float)Math.cos(shot_angle);
- y_offset = kShotDistance * (float)Math.sin(shot_angle);
- } else if (sprite_flipped_horizontal) {
- shot_angle = kShotSpread * (float)Math.sin(mShotPhase) +
(float)Math.PI;
- mShotPhase += 10.0f;
- x_offset = -kShotOffsetX;
- y_offset = kShotOffsetY;
- } else {
- shot_angle = kShotSpread * (float)Math.sin(mShotPhase);
- mShotPhase += 10.0f;
- x_offset = kShotOffsetX;
- y_offset = kShotOffsetY;
- }
-
- float dx_offset = shot_velocity * (float)Math.cos(shot_angle);
- float dy_offset = shot_velocity * (float)Math.sin(shot_angle);
- mGameState.createFireProjectile(
- x + x_offset, y + y_offset, dx + dx_offset, dy + dy_offset);
+ // Update the equiped weapon instance.
+ if (mWeapon != null) {
+ mWeapon.x = x;
+ mWeapon.y = y;
+ mWeapon.has_ground_contact = has_ground_contact;
+ mWeapon.sprite_flipped_horizontal = sprite_flipped_horizontal;
+ mWeapon.step(time_step);
}
}

@@ -127,6 +88,9 @@
mCanvasHeight = graphics.getHeight();

super.draw(graphics, center_x, center_y, zoom);
+ if (mWeapon != null) {
+ mWeapon.draw(graphics, center_x, center_y, zoom);
+ }
}

public void setKeyState(int key_code, int state) {
@@ -138,7 +102,9 @@
dy -= kJumpVelocity;
has_ground_contact = false;
} else if (key_code == kKeyShoot) {
- mShooting = (state == 1);
+ if (mWeapon != null) {
+ mWeapon.enableShooting(state == 1);
+ }
}
}

@@ -155,11 +121,12 @@
setKeyState(kKeyRight, 0);
setKeyState(kKeyJump, 0);
setKeyState(kKeyShoot, 0);
+ motion_event.recycle();
return;
} else {
+ motion_event.recycle();
return;
}
- int x = (int)motion_event.getX();

// The touch event was in the movement section of the display surface.
if (motion_event.getY() > mCanvasHeight - kTouchMovementHeight) {
@@ -186,14 +153,12 @@
setKeyState(kKeyShoot, 1);
}
}
+ motion_event.recycle();
}

private int mCanvasWidth;
private int mCanvasHeight;
private GameState mGameState;
- private float mShotDelay;
- private boolean mShooting;
- private float mShotPhase;
public Weapon mWeapon;

private static final float kAirAcceleration = 40.0f;
@@ -209,12 +174,6 @@
private static final int kKeyJump = KeyEvent.KEYCODE_K;
private static final int kKeyShoot = KeyEvent.KEYCODE_J;
private static final float kRadius = 25.0f;
- private static final float kShotDelay = 0.2f; // Seconds between shots.
- private static final float kShotDistance = 25.0f;
- private static final float kShotOffsetX = 23.0f;
- private static final float kShotOffsetY = -8.0f;
- private static final float kShotSpread = 15.0f * (float)Math.PI / 180.0f;
- private static final float kShotVelocity = 60.0f;
private static final int kSpriteSize = 64;
private static final int kTouchMovementHeight = 30;
}

Modified: trunk/src/android/com/abb/Content.java
==============================================================================
--- trunk/src/android/com/abb/Content.java (original)
+++ trunk/src/android/com/abb/Content.java Sun Jan 18 14:15:16 2009
@@ -216,6 +216,18 @@
return map;
}

+ static void assertStringNotNone(TreeMap<String, Object> parameters,
+ String parameter) {
+ Assert.assertTrue("Parameter " + parameter + " must be specified.",
+ !((String)parameters.get(parameter)).equals("none"));
+ }
+
+ static void assertIntegerNotNone(TreeMap<String, Object> parameters,
+ String parameter) {
+ Assert.assertTrue("Parameter " + parameter + " must be specified.",
+ ((Integer)parameters.get(parameter)).intValue() !=
-1);
+ }
+
static private char[] toPrimative(ArrayList<Character> array_list) {
char[] result = new char[array_list.size()];
for (int index = 0; index < array_list.size(); ++index) {

Modified: trunk/src/android/com/abb/Enemy.java
==============================================================================
--- trunk/src/android/com/abb/Enemy.java (original)
+++ trunk/src/android/com/abb/Enemy.java Sun Jan 18 14:15:16 2009
@@ -20,6 +20,8 @@
import junit.framework.Assert;


+/** The Enemy class encapsulates a simple NPC instance, essentially an
avatar
+ * which is controlled by the computer. */
public class Enemy extends ArticulatedEntity {
public Enemy(Entity target) {
super();
@@ -61,44 +63,40 @@

public void loadFromUri(Uri uri) {
// The following map defines all of the accepted enemy parameters. The
- // enemy_parameters map is expected to populated with default values
letting
- // the user override only a subset if desired within the text resource
at
- // the specified uri.
- TreeMap<String, Object> enemy_parameters = new TreeMap<String,
Object>();
- enemy_parameters.put(kParameterAcceleration, new
Float(kDefaultAcceleration));
- enemy_parameters.put(kParameterDrawingScale, new
Float(kDefaultDrawingScale));
- enemy_parameters.put(kParameterAnimation, "none");
- enemy_parameters.put(kParameterEntity, "none");
- enemy_parameters.put(kParameterJumpVelocity, new
Float(kDefaultJumpVelocity));
- enemy_parameters.put(kParameterGravity, new Float(kDefaultGravity));
- enemy_parameters.put(kParameterLife, new Float(kDefaultLife));
- enemy_parameters.put(kParameterRadius, new Float(kDefaultRadius));
+ // parameters map is expected to populated with default values letting
the
+ // user override only a subset if desired within the text resource at
the
+ // specified uri.
+ TreeMap<String, Object> parameters = new TreeMap<String, Object>();
+ parameters.put(kParameterAcceleration, new
Float(kDefaultAcceleration));
+ parameters.put(kParameterDrawingScale, new
Float(kDefaultDrawingScale));
+ parameters.put(kParameterAnimation, "none");
+ parameters.put(kParameterEntity, "none");
+ parameters.put(kParameterJumpVelocity, new
Float(kDefaultJumpVelocity));
+ parameters.put(kParameterGravity, new Float(kDefaultGravity));
+ parameters.put(kParameterLife, new Float(kDefaultLife));
+ parameters.put(kParameterRadius, new Float(kDefaultRadius));

// Given a fully-specified default enemy parameters map, we can parse
and
// merge in the user defined values. Note that the following method
rejects
// all keys provided by the user which were not defined above.
String file_path = Content.getTemporaryFilePath(uri);
String[] tokens = Content.readFileTokens(file_path);
- Content.mergeKeyValueTokensWithMap(tokens, enemy_parameters);
+ Content.mergeKeyValueTokensWithMap(tokens, parameters);
+ Content.assertStringNotNone(parameters, kParameterEntity);
+ Content.assertStringNotNone(parameters, kParameterAnimation);

// Now that the user defined enemy parameters have been parsed and
merged,
- // we can initialize the enemy state accordingly.
- mAcceleration =
((Float)enemy_parameters.get(kParameterAcceleration)).floatValue();
-
setDrawingScale(((Float)enemy_parameters.get(kParameterDrawingScale)).floatValue());
- mGravity =
((Float)enemy_parameters.get(kParameterGravity)).floatValue();
- mLife = ((Float)enemy_parameters.get(kParameterLife)).floatValue();
- radius = ((Float)enemy_parameters.get(kParameterRadius)).floatValue();
-
+ // we can initialize the enemy instance state accordingly.
+ mAcceleration =
((Float)parameters.get(kParameterAcceleration)).floatValue();
+
setDrawingScale(((Float)parameters.get(kParameterDrawingScale)).floatValue());
+ mGravity = ((Float)parameters.get(kParameterGravity)).floatValue();
+ mLife = ((Float)parameters.get(kParameterLife)).floatValue();
+ radius = ((Float)parameters.get(kParameterRadius)).floatValue();
String uri_string = uri.toString();
String base_uri_string = uri_string.substring(0,
uri_string.lastIndexOf("/"));
- String entity = (String)enemy_parameters.get(kParameterEntity);
- Assert.assertTrue("Enemy entity must be specified.",
- !entity.equals("none"));
+ String entity = (String)parameters.get(kParameterEntity);
+ String animation = (String)parameters.get(kParameterAnimation);
super.loadFromUri(Uri.parse(base_uri_string + "/" + entity));
-
- String animation = (String)enemy_parameters.get(kParameterAnimation);
- Assert.assertTrue("Enemy animation must be specified.",
- !animation.equals("none"));
super.loadAnimationFromUri(base_uri_string + "/" + animation);
}


Modified: trunk/src/android/com/abb/Entity.java
==============================================================================
--- trunk/src/android/com/abb/Entity.java (original)
+++ trunk/src/android/com/abb/Entity.java Sun Jan 18 14:15:16 2009
@@ -85,7 +85,7 @@
}

// The following allocations are made here to avoid allocating anything
during
- // the game. They are intended to be used by this an any child classe.
+ // the game. They are intended to be used by this an any child class.
protected static Random mRandom = new Random();
protected static RectF mRectF = new RectF();


Modified: trunk/src/android/com/abb/GameState.java
==============================================================================
--- trunk/src/android/com/abb/GameState.java (original)
+++ trunk/src/android/com/abb/GameState.java Sun Jan 18 14:15:16 2009
@@ -106,7 +106,6 @@
// Step the avatar.
if (avatar.alive) {
avatar.step(time_step);
- avatar.mWeapon.step(time_step);
map.collideEntity(avatar);
if (Map.tileIsGoal(map.tileAt(avatar.x, avatar.y))) {
map.advanceLevel();
@@ -136,7 +135,7 @@
enemy.step(time_step);
map.collideEntity(enemy);
if (!enemy.alive) {
- vibrate();
+ vibrate(kEnemyDeathVibrateLength);
for (int n = 0; n < kBloodBathSize; n++) {
createBloodParticle(
enemy.x, enemy.y,
@@ -180,11 +179,9 @@
enemies.get(index).draw(graphics, mViewX, mViewY, mZoom);
}

- // Draw the avatar and weapon.
+ // Draw the avatar.
if (avatar.alive) {
avatar.draw(graphics, mViewX, mViewY, mZoom);
- avatar.mWeapon.setImage(graphics);
- //avatar.mWeapon.draw(graphics, mViewX, mViewY, mZoom);
}

// Draw the projectiles.
@@ -237,8 +234,8 @@
return fire;
}

- public void vibrate() {
- mVibrator.vibrate(kVibrateLength);
+ public void vibrate(long vibrate_milliseconds) {
+ mVibrator.vibrate(vibrate_milliseconds);
}

public void loadStateBundle(Bundle saved_instance_state) {
@@ -301,7 +298,7 @@
private static final float kDeathZoom = 1.5f;
private static final float kGravity = 200.0f;
private static final float kGroundZoom = 0.8f;
- private static final long kVibrateLength = 30; // Milliseconds.
+ private static final long kEnemyDeathVibrateLength = 30; //
Milliseconds.
private static final float kViewLead = 1.0f;
private static final float kViewSpeed = 2.0f;
private static final float kZoomSpeed = 1.0f;

Modified: trunk/src/android/com/abb/Map.java
==============================================================================
--- trunk/src/android/com/abb/Map.java (original)
+++ trunk/src/android/com/abb/Map.java Sun Jan 18 14:15:16 2009
@@ -279,7 +279,7 @@
if (tile_exploadable) {
entity.dy = Math.min(entity.dy, -kExplosionStrength);
setTileAt(x, y, (char)0); // Clear the exploding tile.
- mGameState.vibrate();
+ mGameState.vibrate(kExplodeVibrateLength);
for (int n = 0; n < kExplosionSize; n++) {
float random_angle = mRandom.nextFloat() * 2.0f *
(float)Math.PI;
float random_magnitude =
@@ -459,6 +459,7 @@
private static final int kBackgroundSize = 512;
private static final char kBaseValue = 'a';
private static final int kEndingTile = 11;
+ private static final int kExplodeVibrateLength = 40;
private static final int kExplosionSize = 15; // Number of particles.
private static final float kExplosionStrength = 200.0f;
private static final int kMapHeight = 100;

Modified: trunk/src/android/com/abb/Weapon.java
==============================================================================
--- trunk/src/android/com/abb/Weapon.java (original)
+++ trunk/src/android/com/abb/Weapon.java Sun Jan 18 14:15:16 2009
@@ -1,4 +1,4 @@
-// Copyright 2008 and onwards Matthew Barnes.
+// Copyright 2008 and onwards Matthew Burkhart and Matthew Barnes.
//
// This program is free software; you can redistribute it and/or modify it
under
// the terms of the GNU General Public License as published by the Free
Software
@@ -17,86 +17,150 @@
import android.net.Uri;
import android.util.Log;
import java.lang.Math;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
+import java.util.TreeMap;
import java.util.Random;
import junit.framework.Assert;


+/** The Weapon class represents a single instance of a weapon. Weapons
create
+ * projectiles which harm enemies. Weapons also define the projectiles they
+ * generate. */
public class Weapon extends Entity {
public Weapon(GameState game_state) {
super();
- //loadWeapon();
- loadWeaponImages();
- game_state_ = game_state;
- sprite_rect = new Rect(0, 0, kSpriteSize, kSpriteSize);
- }
-
- public void loadWeapon() {
- //Load weapons.txt
- Uri weapons_uri = Uri.parse("content:///weapons.txt");
- String weapons_path = Content.getTemporaryFilePath(weapons_uri);
- if (weapons_path == null)
- Log.e("Weapon::loadWeaponsFromFile", "Invalid null argument.");
- try {
- StringBuffer file_data = new StringBuffer(1000);
- BufferedReader reader = new BufferedReader(new
FileReader(weapons_path));
- char[] buf = new char[1024];
- int num_read = 0;
- while((num_read = reader.read(buf)) != -1){
- file_data.append(buf, 0, num_read);
+ mGameState = game_state; // Needed for projectile instantiation.
+ }
+
+ public void loadFromUri(Uri uri) {
+ // The following map defines all of the accepted weapon and projectile
+ // parameters. The parameters map is expected to populated with default
+ // values letting the user override only a subset if desired within
the text
+ // resource at the specified uri.
+ TreeMap<String, Object> parameters = new TreeMap<String, Object>();
+ parameters.put(kParameterDelay, new Float(kDefaultDelay));
+ parameters.put(kParameterProjectileRectBottom, new Integer(-1));
+ parameters.put(kParameterProjectileRectLeft, new Integer(-1));
+ parameters.put(kParameterProjectileRectRight, new Integer(-1));
+ parameters.put(kParameterProjectileRectTop, new Integer(-1));
+ parameters.put(kParameterSprite, "none");
+ parameters.put(kParameterWeaponRectBottom, new Integer(-1));
+ parameters.put(kParameterWeaponRectLeft, new Integer(-1));
+ parameters.put(kParameterWeaponRectRight, new Integer(-1));
+ parameters.put(kParameterWeaponRectTop, new Integer(-1));
+ parameters.put(kParameterVelocity, new Float(kDefaultVelocity));
+ parameters.put(kParameterVibration, new Float(kDefaultVibration));
+
+ // Given a fully-specified default weapon parameters map, we can parse
and
+ // merge in the user defined values. Note that the following method
rejects
+ // all keys provided by the user which were not defined above.
+ String file_path = Content.getTemporaryFilePath(uri);
+ String[] tokens = Content.readFileTokens(file_path);
+ Content.mergeKeyValueTokensWithMap(tokens, parameters);
+ Content.assertIntegerNotNone(parameters,
kParameterProjectileRectBottom);
+ Content.assertIntegerNotNone(parameters, kParameterProjectileRectLeft);
+ Content.assertIntegerNotNone(parameters,
kParameterProjectileRectRight);
+ Content.assertIntegerNotNone(parameters, kParameterProjectileRectTop);
+ Content.assertStringNotNone(parameters, kParameterSprite);
+ Content.assertIntegerNotNone(parameters, kParameterWeaponRectBottom);
+ Content.assertIntegerNotNone(parameters, kParameterWeaponRectLeft);
+ Content.assertIntegerNotNone(parameters, kParameterWeaponRectRight);
+ Content.assertIntegerNotNone(parameters, kParameterWeaponRectTop);
+
+ // Now that the user defined weapon parameters have been parsed and
merged,
+ // we can initialize the weapon instance state accordingly.
+ mDelay = ((Float)parameters.get(kParameterDelay)).floatValue();
+ mSpread = ((Float)parameters.get(kParameterSpread)).floatValue();
+ mVelocity = ((Float)parameters.get(kParameterVelocity)).floatValue();
+ mVibration = ((Integer)parameters.get(kParameterVibration)).intValue();
+ }
+
+ public void enableShooting(boolean shooting) {
+ mShooting = shooting;
+ }
+
+ @Override
+ public void step(float time_step) {
+ super.step(time_step);
+
+ // Update the shooting mechanism. The following is specialized for
running
+ // or standing on the ground versus jumping.
+ mCurrentDelay -= time_step;
+ if (mShooting && mCurrentDelay < time_step) {
+ mDelay = mDelay;
+ float shot_angle;
+ float shot_distance = 64;
+ float shot_velocity = mVelocity;
+ float x_offset;
+ float y_offset;
+
+ if (!has_ground_contact) {
+ shot_angle = mPhase;
+ if (sprite_flipped_horizontal) {
+ shot_angle = -mPhase;
+ }
+ mDelay -= 2.0f * time_step;
+ mPhase += 45.0f * (float)Math.PI / 180.0f;
+ shot_velocity *= 0.6f;
+ x_offset = shot_distance * (float)Math.cos(shot_angle);
+ y_offset = shot_distance * (float)Math.sin(shot_angle);
+ } else if (sprite_flipped_horizontal) {
+ shot_angle = mSpread * (float)Math.sin(mPhase) + (float)Math.PI;
+ mPhase += 10.0f;
+ x_offset = -0;
+ y_offset = 0;
+ } else {
+ shot_angle = mSpread * (float)Math.sin(mPhase);
+ mPhase += 10.0f;
+ x_offset = 0;
+ y_offset = 0;
+ }
+
+ float dx_offset = shot_velocity * (float)Math.cos(shot_angle);
+ float dy_offset = shot_velocity * (float)Math.sin(shot_angle);
+ mGameState.createFireProjectile(
+ x + x_offset, y + y_offset, dx + dx_offset, dy + dy_offset);
+ if (mVibration > 0) {
+ mGameState.vibrate(mVibration);
}
- reader.close();
- mWeaponString = file_data.toString();
- Log.d("Weapon String", mWeaponString);
- } catch (IOException ex) {
- Assert.fail("Weapon::loadWeaponFromFile. " +
- "Cannot find: " + weapons_path + ".");
}
}

- public void loadWeaponImages() {
- //Load weapons.png from URI
- Uri weapon_images_uri = Uri.parse("content:///weapons.png");
- String weapon_images_path =
Content.getTemporaryFilePath(weapon_images_uri);
- Log.d("Weapons Path", weapon_images_path);
-
- //Load the weapons.png into Bitmap
- if (weapon_images_path == null)
- Assert.fail("Weapon::loadWeaponImagesFromFile. Invalid argument.");
- mWeaponsBitmap = BitmapFactory.decodeFile(weapon_images_path);
- if (mWeaponsBitmap == null)
- Assert.fail("Weapon::loadWeaponImagesFromFile. " +
- "Cannot find: " + weapon_images_path + ".");
- }
-
- public void setImage(Graphics graphics) {
- // Load the image if it hasn't been done already.
- if (mWeaponsBitmap != null) {
- graphics.freeImage(sprite_image);
- sprite_image = graphics.loadImageFromBitmap(mWeaponsBitmap);
- mWeaponsBitmap = null;
- }
+ @Override
+ public void draw(Graphics graphics, float center_x, float center_y,
+ float zoom) {
+ }
+
+ @Override
+ public Object clone() {
+ return super.clone();
}

- public void setSprite(boolean facing_left) {
- sprite_rect.top = kSpriteSize * mWeaponIndex;
- sprite_rect.bottom = kSpriteSize * mWeaponIndex + kSpriteSize;
- sprite_flipped_horizontal = facing_left;
- }
-
- private GameState game_state_;
-
- private String mWeaponString;
- private Bitmap mWeaponsBitmap;
-
- private int mWeaponIndex = 0;
- private float shotDelay = 0.2f; // Seconds between shots.
- private float shotDistance = 25.0f;
- private float shotOffsetX = 23.0f;
- private float shotOffsetY = -8.0f;
- private float shotSpread = 15.0f * (float)Math.PI / 180.0f;
- private float shotVelocity = 60.0f;
- private static final int kSpriteSize = 64;
+ private float mCurrentDelay;
+ private GameState mGameState; // Needed for projectile instantiation.
+ private boolean mShooting;
+ private float mDelay;
+ private float mPhase;
+ private float mSpread;
+ private float mVelocity;
+ private int mVibration;
+
+ private static final float kDefaultDelay = 0.2f; // Seconds between
shots.
+ private static final float kDefaultSpread = 15.0f * (float)Math.PI /
180.0f;
+ private static final float kDefaultVelocity = 60.0f;
+ private static final int kDefaultVibration = 0;
+
+ private static final String kParameterDelay = "delay";
+ private static final String kParameterProjectileRectBottom
= "projectile_rect_bottom";
+ private static final String kParameterProjectileRectLeft
= "projectile_rect_left";
+ private static final String kParameterProjectileRectRight
= "projectile_rect_right";
+ private static final String kParameterProjectileRectTop
= "projectile_rect_top";
+ private static final String kParameterSpread = "spread";
+ private static final String kParameterSprite = "sprite";
+ private static final String kParameterWeaponRectBottom
= "weapon_rect_bottom";
+ private static final String kParameterWeaponRectLeft
= "weapon_rect_left";
+ private static final String kParameterWeaponRectRight
= "weapon_rect_right";
+ private static final String kParameterWeaponRectTop = "weapon_rect_top";
+ private static final String kParameterVerticalSpread = "vertical_spread";
+ private static final String kParameterVelocity = "velocity";
+ private static final String kParameterVibration = "vibration";
}

Reply all
Reply to author
Forward
0 new messages