From be0669a754cb5da3b7ed22d77507b29003790a80 Mon Sep 17 00:00:00 2001 From: Allexit Date: Sun, 10 May 2015 18:30:57 +0300 Subject: [PATCH] Added CCombat and made CPhysics a bit cleaner --- .../saltosion/gladiator/GladiatorBrawler.java | 6 +- .../gladiator/components/CCombat.java | 60 +++++++++++++ .../gladiator/components/CPhysics.java | 73 ++++++++++++--- .../gladiator/systems/PhysicsSystem.java | 88 +++++++++---------- .../gladiator/systems/RenderingSystem.java | 6 +- 5 files changed, 173 insertions(+), 60 deletions(-) create mode 100644 core/src/com/saltosion/gladiator/components/CCombat.java diff --git a/core/src/com/saltosion/gladiator/GladiatorBrawler.java b/core/src/com/saltosion/gladiator/GladiatorBrawler.java index 92ddd83..f53d6a1 100644 --- a/core/src/com/saltosion/gladiator/GladiatorBrawler.java +++ b/core/src/com/saltosion/gladiator/GladiatorBrawler.java @@ -90,7 +90,7 @@ public class GladiatorBrawler extends ApplicationAdapter { CPhysics physics = new CPhysics().setMovable(false).setGravityApplied(false).setDynamic(false) .setSize(groundSprite.getRegionWidth() * Global.SPRITE_SCALE, groundSprite.getRegionHeight() * Global.SPRITE_SCALE); - physics.position.set(new Vector2(0, -4)); + physics.getPosition().set(new Vector2(0, -4)); ground.add(physics); Sprite wallSprite = SpriteLoader.loadSprite(Name.WALLIMG); @@ -100,7 +100,7 @@ public class GladiatorBrawler extends ApplicationAdapter { CPhysics wall0Physics = new CPhysics().setMovable(false).setGravityApplied(false).setDynamic(false) .setSize(wallSprite.getRegionWidth() * Global.SPRITE_SCALE, wallSprite.getRegionHeight() * Global.SPRITE_SCALE); - wall0Physics.position.set(new Vector2(6, 0)); + wall0Physics.getPosition().set(new Vector2(6, 0)); wall0.add(wall0RenderedObject); wall0.add(wall0Physics); @@ -109,7 +109,7 @@ public class GladiatorBrawler extends ApplicationAdapter { CPhysics wall1Physics = new CPhysics().setMovable(false).setGravityApplied(false).setDynamic(false) .setSize(wallSprite.getRegionWidth() * Global.SPRITE_SCALE, wallSprite.getRegionHeight() * Global.SPRITE_SCALE); - wall1Physics.position.set(new Vector2(-6, 0)); + wall1Physics.getPosition().set(new Vector2(-6, 0)); wall1.add(wall1RenderedObject); wall1.add(wall1Physics); diff --git a/core/src/com/saltosion/gladiator/components/CCombat.java b/core/src/com/saltosion/gladiator/components/CCombat.java new file mode 100644 index 0000000..22c81db --- /dev/null +++ b/core/src/com/saltosion/gladiator/components/CCombat.java @@ -0,0 +1,60 @@ +package com.saltosion.gladiator.components; + +import com.badlogic.ashley.core.Component; + +public class CCombat extends Component { + + private int health = 0; + private int maxHealth = 0; + private int damage = 0; + + public boolean swinging = false; + private float swingCdCounter = 0; + private float swingCd = 0; + + public int getHealth() { + return this.health; + } + + public int getMaxHealth() { + return this.maxHealth; + } + + public int getDamage() { + float minDmg = damage*0.9f; + float maxDmg = damage*1.1f; + int randomdamage = (int) (Math.random()*(maxDmg-minDmg)+minDmg); + if (Math.random() > 0.7) { + randomdamage *= 1.5; + } + return randomdamage; + } + + public float getSwingCDCounter() { + return this.swingCdCounter; + } + + public float getSwingCD() { + return this.swingCd; + } + + public CCombat setBaseDamage(int basedmg) { + this.damage = basedmg; + return this; + } + + public CCombat setCurrHealth(int health) { + this.health = health; + return this; + } + + public CCombat setMaxHealth(int maxHealth) { + this.maxHealth = maxHealth; + return this; + } + + public CCombat setSwingCD(float cd) { + this.swingCd = cd; + return this; + } +} diff --git a/core/src/com/saltosion/gladiator/components/CPhysics.java b/core/src/com/saltosion/gladiator/components/CPhysics.java index 40359fe..45790a5 100644 --- a/core/src/com/saltosion/gladiator/components/CPhysics.java +++ b/core/src/com/saltosion/gladiator/components/CPhysics.java @@ -6,17 +6,17 @@ import com.saltosion.gladiator.physics.CollisionListener; public class CPhysics extends Component { - public Vector2 position = new Vector2(); - public Vector2 velocity = new Vector2(); - public Vector2 size = new Vector2(); - public float movespeed = 5f, jumpForce = 0.5f, gravity = 1f; - public boolean grounded = true; - public CollisionListener collisionListener = null; + private Vector2 position = new Vector2(); + private Vector2 velocity = new Vector2(); + private Vector2 size = new Vector2(); + private float movespeed = 5f, jumpForce = 0.5f, gravity = 1f; + private CollisionListener collisionListener = null; - public boolean movable = true; - public boolean gravityApplied = true; - public boolean dynamic = true; - public boolean ghost = false; + private boolean movable = true; + private boolean gravityApplied = true; + private boolean dynamic = true; + private boolean ghost = false; + private boolean grounded = true; // Movement (/input) vars public boolean movingLeft = false; @@ -74,5 +74,58 @@ public class CPhysics extends Component { this.collisionListener = collisionListener; return this; } + + public CPhysics setGrounded(boolean grounded) { + this.grounded = grounded; + return this; + } + + public Vector2 getPosition() { + return this.position; + } + + public Vector2 getVelocity() { + return this.velocity; + } + + public Vector2 getSize() { + return this.size; + } + + public float getMovespeed() { + return this.movespeed; + } + + public float getJumpForce() { + return this.jumpForce; + } + + public float getGravity() { + return this.gravity; + } + + public CollisionListener getCollisionListener() { + return this.collisionListener; + } + + public boolean isMovable() { + return this.movable; + } + + public boolean isGravityApplied() { + return this.gravityApplied; + } + + public boolean isDynamic() { + return this.dynamic; + } + + public boolean isGhost() { + return this.ghost; + } + + public boolean isGrounded() { + return this.grounded; + } } diff --git a/core/src/com/saltosion/gladiator/systems/PhysicsSystem.java b/core/src/com/saltosion/gladiator/systems/PhysicsSystem.java index 54dd821..e92d59d 100644 --- a/core/src/com/saltosion/gladiator/systems/PhysicsSystem.java +++ b/core/src/com/saltosion/gladiator/systems/PhysicsSystem.java @@ -31,10 +31,10 @@ public class PhysicsSystem extends EntitySystem { CPhysics obj = pm.get(entities.get(i)); // Apply movement - obj.position.add(obj.velocity); + obj.getPosition().add(obj.getVelocity()); // Movement - if (obj.movable) { + if (obj.isMovable()) { float move = 0; if (obj.movingLeft) { move--; @@ -42,22 +42,22 @@ public class PhysicsSystem extends EntitySystem { if (obj.movingRight) { move++; } - obj.velocity.x = move * obj.movespeed * deltaTime; - if (obj.jumping && obj.grounded) { - obj.grounded = false; - obj.velocity.y = obj.jumpForce; + obj.getVelocity().x = move * obj.getMovespeed() * deltaTime; + if (obj.jumping && obj.isGrounded()) { + obj.setGrounded(false); + obj.getVelocity().y = obj.getJumpForce(); } } // Gravity - if (obj.gravityApplied) { - obj.velocity.y -= obj.gravity * deltaTime; + if (obj.isGravityApplied()) { + obj.getVelocity().y -= obj.getGravity() * deltaTime; } - obj.velocity.y = Math.max(Math.min(obj.velocity.y, MAX_VEL), -MAX_VEL); + obj.getVelocity().y = Math.max(Math.min(obj.getVelocity().y, MAX_VEL), -MAX_VEL); // Collisions - if (obj.dynamic) { + if (obj.isDynamic()) { for (int j = 0; j < entities.size(); j++) { if (i == j) { continue; @@ -72,14 +72,14 @@ public class PhysicsSystem extends EntitySystem { CPhysics cp0 = pm.get(entity0); CPhysics cp1 = pm.get(entity1); - float x00 = cp0.position.x - cp0.size.x / 2; - float x01 = cp0.position.x + cp0.size.x / 2; - float x10 = cp1.position.x - cp1.size.x / 2; - float x11 = cp1.position.x + cp1.size.x / 2; - float y00 = cp0.position.y - cp0.size.y / 2; - float y01 = cp0.position.y + cp0.size.y / 2; - float y10 = cp1.position.y - cp1.size.y / 2; - float y11 = cp1.position.y + cp1.size.y / 2; + float x00 = cp0.getPosition().x - cp0.getSize().x / 2; + float x01 = cp0.getPosition().x + cp0.getSize().x / 2; + float x10 = cp1.getPosition().x - cp1.getSize().x / 2; + float x11 = cp1.getPosition().x + cp1.getSize().x / 2; + float y00 = cp0.getPosition().y - cp0.getSize().y / 2; + float y01 = cp0.getPosition().y + cp0.getSize().y / 2; + float y10 = cp1.getPosition().y - cp1.getSize().y / 2; + float y11 = cp1.getPosition().y + cp1.getSize().y / 2; boolean colliding = (x00 < x11) && (x01 > x10) && (y00 < y11) && (y01 > y10); @@ -87,58 +87,58 @@ public class PhysicsSystem extends EntitySystem { return; } - if (x00 <= x11 && Math.abs(x00 - x11) < (cp0.size.x + cp1.size.x) / 16) { + if (x00 <= x11 && Math.abs(x00 - x11) < (cp0.getSize().x + cp1.getSize().x) / 16) { // cp0's left side is colliding with cp1's right side - if (!cp0.ghost && !cp1.ghost) { - if (cp0.velocity.x < 0) { + if (!cp0.isGhost() && !cp1.isGhost()) { + if (cp0.getVelocity().x < 0) { // cp0 is going left, stop - cp0.velocity.x = 0; + cp0.getVelocity().x = 0; } } - if (cp0.collisionListener != null) { - cp0.collisionListener.collision(CollisionSide.LEFT, entity0, entity1); + if (cp0.getCollisionListener() != null) { + cp0.getCollisionListener().collision(CollisionSide.LEFT, entity0, entity1); } } - if (x01 > x10 && Math.abs(x01 - x10) < (cp0.size.x + cp1.size.x) / 16) { + if (x01 > x10 && Math.abs(x01 - x10) < (cp0.getSize().x + cp1.getSize().x) / 16) { // cp0's right side is colliding with cp1's left side - if (!cp0.ghost && !cp1.ghost) { - if (cp0.velocity.x > 0) { + if (!cp0.isGhost() && !cp1.isGhost()) { + if (cp0.getVelocity().x > 0) { // cp0 is going right, stop - cp0.velocity.x = 0; + cp0.getVelocity().x = 0; } } - if (cp0.collisionListener != null) { - cp0.collisionListener.collision(CollisionSide.RIGHT, entity0, entity1); + if (cp0.getCollisionListener() != null) { + cp0.getCollisionListener().collision(CollisionSide.RIGHT, entity0, entity1); } } - if (y00 <= y11 && Math.abs(y00 - y11) < (cp0.size.y + cp1.size.y) / 16) { + if (y00 <= y11 && Math.abs(y00 - y11) < (cp0.getSize().y + cp1.getSize().y) / 16) { // cp0's bottom side is colliding with cp1's top side - if (!cp0.ghost && !cp1.ghost) { - if (cp0.velocity.y < 0) { + if (!cp0.isGhost() && !cp1.isGhost()) { + if (cp0.getVelocity().y < 0) { // cp0 is going down, stop - cp0.velocity.y = 0; + cp0.getVelocity().y = 0; } - cp0.grounded = true; - cp0.position.y += y11 - y00; + cp0.setGrounded(true); + cp0.getPosition().y += y11 - y00; } - if (cp0.collisionListener != null) { - cp0.collisionListener.collision(CollisionSide.BOTTOM, entity0, entity1); + if (cp0.getCollisionListener() != null) { + cp0.getCollisionListener().collision(CollisionSide.BOTTOM, entity0, entity1); } } - if (y01 > y10 && Math.abs(y01 - y10) < (cp0.size.y + cp1.size.y) / 16) { + if (y01 > y10 && Math.abs(y01 - y10) < (cp0.getSize().y + cp1.getSize().y) / 16) { // cp0's top side is colliding with cp1's bottom side - if (!cp0.ghost && !cp1.ghost) { - if (cp0.velocity.y > 0) { + if (!cp0.isGhost() && !cp1.isGhost()) { + if (cp0.getVelocity().y > 0) { // cp0 is going up, stop - cp0.velocity.y = 0; + cp0.getVelocity().y = 0; } } - if (cp0.collisionListener != null) { - cp0.collisionListener.collision(CollisionSide.TOP, entity0, entity1); + if (cp0.getCollisionListener() != null) { + cp0.getCollisionListener().collision(CollisionSide.TOP, entity0, entity1); } } } diff --git a/core/src/com/saltosion/gladiator/systems/RenderingSystem.java b/core/src/com/saltosion/gladiator/systems/RenderingSystem.java index ea40148..d025ab6 100644 --- a/core/src/com/saltosion/gladiator/systems/RenderingSystem.java +++ b/core/src/com/saltosion/gladiator/systems/RenderingSystem.java @@ -42,7 +42,7 @@ public class RenderingSystem extends EntitySystem { @Override public void update(float deltaTime) { CPhysics phys = pm.get(AppUtil.player); - camera.position.set(phys.position.x, phys.position.y, 0); + camera.position.set(phys.getPosition().x, phys.getPosition().y, 0); camera.update(); Gdx.gl.glClearColor(0, 0, 0, 0); @@ -60,8 +60,8 @@ public class RenderingSystem extends EntitySystem { int spriteHeight = currSprite.getRegionHeight(); int spriteWidth = currSprite.getRegionWidth(); - currSprite.setPosition(physics.position.x-spriteWidth/2, - physics.position.y-spriteHeight/2); + currSprite.setPosition(physics.getPosition().x-spriteWidth/2, + physics.getPosition().y-spriteHeight/2); currSprite.draw(batch); float nextFrame = renderedObject.getCurrentFrame() + deltaTime*currSequence.getPlayspeed();