@SuppressWarnings("incomplete-switch") @Override public void draw(Graphics2D graphics) { ElementalShield cs = spellManager.getCurrentShield(); if (cs != null) { Color[] c = new Color[3]; c[0] = new Color(0, 0, 0, 0); c[1] = new Color(0, 0, 0, 0); ElementType type = cs.getElementType(); switch (type) { case Earth: c[2] = new Color(0.45f, 0.4f, 0.15f, 0.85f); break; case Fire: c[2] = new Color(1.0f, 0.0f, 0.0f, 0.7f); break; case Water: c[2] = new Color(0.3f, 0.3f, 0.8f, 0.7f); break; } float[] dist = {0.0f, 0.25f, 1f}; RadialGradientPaint rgp = new RadialGradientPaint( new Point2D.Float((int) screenPosition.x + 16, (int) screenPosition.y + 16), 20, dist, c); graphics.setPaint(rgp); graphics.fillOval((int) screenPosition.x - 4, (int) screenPosition.y - 4, 40, 40); } graphics.drawImage(getTexture(), (int) screenPosition.x, (int) screenPosition.y, null); if (controlled) { spellManager.draw(graphics); statusbar.draw(graphics); } if (isInNetwork && controllerActive) { if (controller.isPressed(KeyEvent.VK_T)) DeathMatchStatistics.getInstance().draw(graphics); } }
@Override public void update(float elapsed) { if (!isInNetwork && health.isDead()) { terminate(); return; } regenerate(); spellManager.update(elapsed); ElementalShield curShield = spellManager.getCurrentShield(); if (curShield != null && curShield.getElementType() == ElementType.Fire) manager.handleAreaOfEffectSpell( this, curShield.getDamage(), ElementType.Fire, curShield.getAOErect()); if (state == DynamicObjectState.Attacking) { curAnim.update(elapsed); return; } if (state == DynamicObjectState.Hit) { curAnim.update(elapsed); curHitDuration -= 1; if (curHitDuration <= 0) { setState(DynamicObjectState.Idle); curHitDuration = maxHitDuration; health.setInvul(false); } return; } if (controllerActive) handleControllerInput(elapsed); // DEBUG PURPOSE if (controllerActive) { if (controller.isPressed(KeyEvent.VK_SHIFT)) supressEnemyCollision = true; else supressEnemyCollision = false; } // ------------- if (velocity.x > 0.01f || velocity.x < -0.01f || velocity.y > 0.01f || velocity.y < -0.01f) { collisionRect.x += velocity.x; collisionRect.y += velocity.y; boolean collidingStatic = collision.isCollidingStatic(this); boolean collidingDynamic = false; if (!supressEnemyCollision) collidingDynamic = collision.isCollidingDynamic(this); if (collidingStatic || collidingDynamic) { collisionRect.x -= velocity.x; collisionRect.y -= velocity.y; stopMovement(); } else { collision.checkTriggers(this); screenPosition.x += velocity.x; screenPosition.y += velocity.y; curAnim.update(elapsed); } } if (isInNetwork && controllerActive) { sendPositionMessage(); } }
/** * Handles the keyboard input. * * @param elapsed time elapsed since the last frame */ private void handleControllerInput(float elapsed) { if (controllerActive) { if (controller.justPressed(KeyEvent.VK_A)) { simpleAttack(); } if (state == DynamicObjectState.Attacking) { curAnim.update(elapsed); return; } else if (controller.justPressed(KeyEvent.VK_S)) spellAttack(0); else if (controller.justPressed(KeyEvent.VK_D)) spellAttack(1); else if (controller.justPressed(KeyEvent.VK_F)) spellAttack(2); else if (controller.justPressed(KeyEvent.VK_5)) spellManager.activateShield(ElementType.Fire); else if (controller.justPressed(KeyEvent.VK_6)) spellManager.activateShield(ElementType.Water); else if (controller.justPressed(KeyEvent.VK_7)) spellManager.activateShield(ElementType.Earth); else if (controller.isDownPressed()) move(Heading.Down); else if (controller.isUpPressed()) move(Heading.Up); else if (controller.isLeftPressed()) move(Heading.Left); else if (controller.isRightPressed()) move(Heading.Right); else if (controller.justReleased(KeyEvent.VK_LEFT) || controller.justReleased(KeyEvent.VK_RIGHT) || controller.justReleased(KeyEvent.VK_UP) || controller.justReleased(KeyEvent.VK_DOWN)) stopMovement(); else if (controller.justPressed(KeyEvent.VK_ENTER)) collision.checkOnKeyTriggers(this); } }