public Pawn(World world, Vector2 pos, float angle) { super(world, pos, angle); hp = 5; protection = 0.0f; wrapper = new TextureWrapper( new TextureRegion( new Texture(Gdx.files.internal("pawn.png")), Constants.ENEMY_WIDTH, Constants.ENEMY_HEIGHT), pos); PolygonShape bodyShape = new PolygonShape(); float w = Utils.convertToBox(wrapper.getRegion().getRegionWidth() / 2f); float h = Utils.convertToBox(wrapper.getRegion().getRegionHeight() / 2f); bodyShape.setAsBox(w, h); FixtureDef fixtureDef = new FixtureDef(); fixtureDef.density = 0.5f; fixtureDef.restitution = 0; fixtureDef.shape = bodyShape; fixtureDef.friction = 10f; body.createFixture(fixtureDef); body.setTransform(body.getPosition(), angle); body.setAngularVelocity(0.2f); bodyShape.dispose(); body.setUserData(this); generalType = Entities.ENEMY; specificType = Entities.PAWN; wrapper.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear); }
@Override public void combat_action_1() { float x = direction * Constants.ENEMY_SPEED; float y = amplitude * Math.round(((Math.sin(half_period * body.getPosition().x) * Constants.ENEMY_SPEED))); if (avoidUp && body.getPosition().y < Utils.convertToBox(Constants.WORLD_HEIGHT - 2 * Constants.ENEMY_HEIGHT)) { avoidUp = false; } else if (avoidDown && body.getPosition().y > Utils.convertToBox( GameScreen.cannon.getPosition().y + Utils.convertToBox(Constants.ENEMY_HEIGHT) * 7)) { avoidDown = false; } else if (body.getPosition().y > Utils.convertToBox(Constants.WORLD_HEIGHT) || avoidUp) { y = -1f; avoidUp = true; } else if (body.getPosition().y < GameScreen.cannon.getPosition().y + Utils.convertToBox(Constants.ENEMY_HEIGHT) * 10 || avoidDown) { y = 1f; avoidDown = true; } Vector2 velocity = new Vector2(x, y); body.setLinearVelocity(velocity); if (body.getPosition().x <= Utils.convertToBox(-Constants.ENEMY_WIDTH)) { direction = 1; } if (body.getPosition().x >= Utils.convertToBox((Constants.ENEMY_WIDTH) + Constants.WORLD_WIDTH)) { direction = -1; } if (TimeUtils.millis() - lastFiring > (Math.random() + 10) * MAX_CHARGING) { fire(); lastFiring = (double) TimeUtils.millis(); } }