PlayerController.java

1
package g0803.bindingofshiba.controller.game;
2
3
import g0803.bindingofshiba.App;
4
import g0803.bindingofshiba.controller.Controller;
5
import g0803.bindingofshiba.events.IEventManager;
6
import g0803.bindingofshiba.events.Observer;
7
import g0803.bindingofshiba.events.game.*;
8
import g0803.bindingofshiba.gui.keyboard.Keyboard;
9
import g0803.bindingofshiba.math.BoundingBox;
10
import g0803.bindingofshiba.math.Vec2D;
11
import g0803.bindingofshiba.model.game.Game;
12
import g0803.bindingofshiba.model.game.elements.Player;
13
import g0803.bindingofshiba.model.game.room.Door;
14
import g0803.bindingofshiba.model.game.room.Room;
15
import g0803.bindingofshiba.state.end.GameOverState;
16
17
public class PlayerController extends Controller<Game> implements Observer {
18
19
    public PlayerController(Game model, IEventManager eventManager) {
20
        super(model, eventManager);
21 1 1. <init> : removed call to g0803/bindingofshiba/events/IEventManager::addObserver → KILLED
        eventManager.addObserver(this);
22
    }
23
24
    private Vec2D getNextPlayerAcceleration(Keyboard keyboard, Vec2D currentVelocity) {
25
        Vec2D direction =
26
                switch (keyboard.getPressedKey()) {
27
                    case W -> Vec2D.up();
28
                    case S -> Vec2D.down();
29
                    case A -> Vec2D.left();
30
                    case D -> Vec2D.right();
31
                    default -> Vec2D.zero();
32
                };
33
34
        Vec2D force = direction.scale(200);
35
        Vec2D drag = currentVelocity.scale(4);
36
37 1 1. getNextPlayerAcceleration : replaced return value with null for g0803/bindingofshiba/controller/game/PlayerController::getNextPlayerAcceleration → KILLED
        return force.subtract(drag);
38
    }
39
40
    @Override
41
    public void tick(App app, double dt) {
42 1 1. tick : removed call to g0803/bindingofshiba/model/game/elements/Player::move → KILLED
        getModel().getPlayer().move(dt);
43
        getModel()
44
                .getPlayer()
45 1 1. tick : removed call to g0803/bindingofshiba/model/game/elements/Player::setAcceleration → KILLED
                .setAcceleration(
46
                        getNextPlayerAcceleration(
47
                                app.getKeyboard(), getModel().getPlayer().getVelocity()));
48
    }
49
50
    @Override
51
    public void onPlayerCollisionWithMonster(PlayerCollisionWithMonsterEvent event) {
52
        Player player = event.getPlayer();
53 1 1. onPlayerCollisionWithMonster : removed call to g0803/bindingofshiba/model/game/elements/Player::setAcceleration → KILLED
        player.setAcceleration(Vec2D.zero());
54 1 1. onPlayerCollisionWithMonster : removed call to g0803/bindingofshiba/model/game/elements/Player::setVelocity → KILLED
        player.setVelocity(Vec2D.zero());
55
56 1 1. onPlayerCollisionWithMonster : removed call to g0803/bindingofshiba/model/game/elements/Player::decreaseHpByAmount → SURVIVED
        player.decreaseHpByAmount(5);
57 1 1. onPlayerCollisionWithMonster : negated conditional → SURVIVED
        if (!player.isAlive()) {
58 1 1. onPlayerCollisionWithMonster : removed call to g0803/bindingofshiba/App::setState → SURVIVED
            event.getApp().setState(new GameOverState(false));
59
        }
60
    }
61
62
    @Override
63
    public void onPlayerCollisionWithObstacle(PlayerCollisionWithObstacleEvent event) {
64
        Player player = event.getPlayer();
65 1 1. onPlayerCollisionWithObstacle : removed call to g0803/bindingofshiba/model/game/elements/Player::setAcceleration → KILLED
        player.setAcceleration(Vec2D.zero());
66 1 1. onPlayerCollisionWithObstacle : removed call to g0803/bindingofshiba/model/game/elements/Player::setVelocity → KILLED
        player.setVelocity(Vec2D.zero());
67
    }
68
69
    @Override
70
    public void onPlayerCollisionWithWalls(PlayerCollisionWithWallsEvent event) {
71
        Player player = event.getPlayer();
72 1 1. onPlayerCollisionWithWalls : removed call to g0803/bindingofshiba/model/game/elements/Player::setAcceleration → KILLED
        player.setAcceleration(Vec2D.zero());
73 1 1. onPlayerCollisionWithWalls : removed call to g0803/bindingofshiba/model/game/elements/Player::setVelocity → KILLED
        player.setVelocity(Vec2D.zero());
74
    }
75
76
    @Override
77
    public void onPlayerEnterDoor(PlayerEnterDoorEvent event) {
78
        Room destination = event.getDoor().getOtherRoom(getModel().getCurrentRoom());
79
        Door door = event.getDoor();
80
81
        Vec2D position = door.getPositionByWall(destination);
82 2 1. onPlayerEnterDoor : Replaced double division with multiplication → SURVIVED
2. onPlayerEnterDoor : Replaced double division with multiplication → SURVIVED
        Vec2D roomCenter = new Vec2D(destination.getWidth() / 2D, destination.getHeight() / 2D);
83
84
        BoundingBox playerBoundingBox = event.getApp().getBoundingBoxes().get("shiba");
85
        Vec2D playerMidpoint =
86
                playerBoundingBox
87
                        .getTopLeftCorner()
88
                        .add(playerBoundingBox.getBottomRightCorner())
89
                        .scale(0.5);
90
91
        Vec2D playerPos =
92
                roomCenter
93
                        .subtract(position)
94
                        .normalize()
95
                        .scale(10)
96
                        .add(position)
97
                        .subtract(playerMidpoint);
98 1 1. onPlayerEnterDoor : removed call to g0803/bindingofshiba/model/game/elements/Player::setPosition → KILLED
        event.getPlayer().setPosition(playerPos);
99 1 1. onPlayerEnterDoor : removed call to g0803/bindingofshiba/model/game/elements/Player::setVelocity → KILLED
        event.getPlayer().setVelocity(Vec2D.zero());
100
    }
101
102
    @Override
103
    public void onPlayerUnlockDoor(PlayerUnlockDoorEvent event) {
104 1 1. onPlayerUnlockDoor : negated conditional → KILLED
        if (event.isCancelled()) return;
105
106
        Player player = event.getPlayer();
107
108 2 1. onPlayerUnlockDoor : changed conditional boundary → KILLED
2. onPlayerUnlockDoor : negated conditional → KILLED
        if (player.getNumberOfKeys() <= 0) {
109 1 1. onPlayerUnlockDoor : removed call to g0803/bindingofshiba/events/game/PlayerUnlockDoorEvent::setCancelled → KILLED
            event.setCancelled(true);
110
            return;
111
        }
112
113 1 1. onPlayerUnlockDoor : removed call to g0803/bindingofshiba/model/game/elements/Player::dropKey → KILLED
        player.dropKey();
114
    }
115
116
    @Override
117
    public void onMonsterDamaged(MonsterDamagedEvent event) {
118 2 1. onMonsterDamaged : negated conditional → NO_COVERAGE
2. onMonsterDamaged : removed call to g0803/bindingofshiba/model/game/elements/Player::pickKey → NO_COVERAGE
        if (!event.getMonster().isAlive()) getModel().getPlayer().pickKey();
119
    }
120
}

Mutations

21

1.1
Location : <init>
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:unlockDoorWithNotEnoughKeys()]
removed call to g0803/bindingofshiba/events/IEventManager::addObserver → KILLED

37

1.1
Location : getNextPlayerAcceleration
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:doesntMoveWithNoInput()]
replaced return value with null for g0803/bindingofshiba/controller/game/PlayerController::getNextPlayerAcceleration → KILLED

42

1.1
Location : tick
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:doesntMoveWithNoInput()]
removed call to g0803/bindingofshiba/model/game/elements/Player::move → KILLED

45

1.1
Location : tick
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:doesntMoveWithNoInput()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setAcceleration → KILLED

53

1.1
Location : onPlayerCollisionWithMonster
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:collisionWithMonster()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setAcceleration → KILLED

54

1.1
Location : onPlayerCollisionWithMonster
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:collisionWithMonster()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setVelocity → KILLED

56

1.1
Location : onPlayerCollisionWithMonster
Killed by : none
removed call to g0803/bindingofshiba/model/game/elements/Player::decreaseHpByAmount → SURVIVED

57

1.1
Location : onPlayerCollisionWithMonster
Killed by : none
negated conditional → SURVIVED

58

1.1
Location : onPlayerCollisionWithMonster
Killed by : none
removed call to g0803/bindingofshiba/App::setState → SURVIVED

65

1.1
Location : onPlayerCollisionWithObstacle
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:collisionWithObstacle()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setAcceleration → KILLED

66

1.1
Location : onPlayerCollisionWithObstacle
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:collisionWithObstacle()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setVelocity → KILLED

72

1.1
Location : onPlayerCollisionWithWalls
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:collisionWithWall()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setAcceleration → KILLED

73

1.1
Location : onPlayerCollisionWithWalls
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:collisionWithWall()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setVelocity → KILLED

82

1.1
Location : onPlayerEnterDoor
Killed by : none
Replaced double division with multiplication → SURVIVED

2.2
Location : onPlayerEnterDoor
Killed by : none
Replaced double division with multiplication → SURVIVED

98

1.1
Location : onPlayerEnterDoor
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:enterDoor()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setPosition → KILLED

99

1.1
Location : onPlayerEnterDoor
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:enterDoor()]
removed call to g0803/bindingofshiba/model/game/elements/Player::setVelocity → KILLED

104

1.1
Location : onPlayerUnlockDoor
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:unlockDoorWithNotEnoughKeys()]
negated conditional → KILLED

108

1.1
Location : onPlayerUnlockDoor
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:unlockDoorWithNotEnoughKeys()]
changed conditional boundary → KILLED

2.2
Location : onPlayerUnlockDoor
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:unlockDoorWithNotEnoughKeys()]
negated conditional → KILLED

109

1.1
Location : onPlayerUnlockDoor
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:unlockDoorWithNotEnoughKeys()]
removed call to g0803/bindingofshiba/events/game/PlayerUnlockDoorEvent::setCancelled → KILLED

113

1.1
Location : onPlayerUnlockDoor
Killed by : g0803.bindingofshiba.controller.game.PlayerControllerTest.[engine:junit-jupiter]/[class:g0803.bindingofshiba.controller.game.PlayerControllerTest]/[method:unlockDoor()]
removed call to g0803/bindingofshiba/model/game/elements/Player::dropKey → KILLED

118

1.1
Location : onMonsterDamaged
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : onMonsterDamaged
Killed by : none
removed call to g0803/bindingofshiba/model/game/elements/Player::pickKey → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.7.0