public static boolean isTouchingCannon(Vector3 touchPos) { Cannon cannon = GameScreen.cannon; Vector2 origin = cannon.getPosition(); origin.x = Utils.convertToWorld(origin.x); origin.y = Utils.convertToWorld(origin.y); origin.sub(new Vector2(cannon.wrapper.width / 2, cannon.wrapper.height / 2)); Vector2 end = new Vector2(cannon.wrapper.width, cannon.wrapper.height); Rectangle rect = new Rectangle(origin.x, origin.y, end.x, end.y); return rect.contains(touchPos.x, touchPos.y); }
@Override public void fire() { Vector2 bullet_position = new Vector2( Utils.convertToWorld(body.getPosition().x), Utils.convertToWorld(body.getPosition().y)); bullet_position = bullet_position.add( new Vector2(0, -Constants.ENEMY_HEIGHT / 2 - Constants.BULLET_HEIGHT / 2)); Bullet bullet = new IceBullet(bullet_position, GameScreen.world, 0, true); float target_angle = (float) (Math.PI / 2 + Math.atan2( (double) this.getPosition().y - GameScreen.cannon.getPosition().y, (double) this.getPosition().x - GameScreen.cannon.getPosition().x)); bullet.body.setLinearVelocity( new Vector2( (float) ((-4f) * Math.sin(target_angle)), (float) ((2f) * Math.cos(target_angle)))); GameScreen.bullets.add(bullet); }
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(); } }