-
Notifications
You must be signed in to change notification settings - Fork 4
Main Character Player Testing
There was no need to write unit tests to test out sprite integration and sprite animations, mainly due to the visual nature of the contributions made by our team in this feature sprint. The creation and integration of player image, movement, and animation were done using built-in classes and required no extra testing. The testing of the feature integration was done by asking users to play the game and share their views on the positioning of the character and the movement animation of the character. The required changes were then made to the code.
Considering it is hard to test whether an animation plays because of its visual nature, unit tests were written to verify and validate the generated texture atlas and animation packs instead. The tests check that all the expected animations actually exist in the atlas, in order to catch bugs when editing/renaming/deleting animations.
@ExtendWith(GameExtension.class)
class PlayerAnimationAtlasTest {
@Test
void shouldLoadTextureAtlases() {
String asset1 = "test/files/mpcAnimation.atlas";
String asset2 = "test/files/test2.atlas";
String[] textures = {asset1, asset2};
AssetManager assetManager = new AssetManager();
ResourceService resourceService = new ResourceService(assetManager);
resourceService.loadTextureAtlases(textures);
assetManager.load(asset1, TextureAtlas.class);
assetManager.load(asset2, TextureAtlas.class);
TextureAtlas atlas = new TextureAtlas(Gdx.files.internal(asset1));
AnimationRenderComponent testAnimator = new AnimationRenderComponent(atlas);
ObjectSet<Texture> texture = atlas.getTextures();
String tex = texture.toString();
assertEquals("{test/files/mpcAnimation.png}",tex);
testAnimator.addAnimation("main_player_run", 1f);
assertTrue(testAnimator.hasAnimation("main_player_run"));
...
assertNotNull(atlas.findRegion("main_player_run"));
assertTrue(testAnimator.hasAnimation("main_player_run"));
Considering it is hard to test whether an animation plays because of its visual nature, unit tests were written to verify and validate the generated texture atlas and animation packs instead. The tests check that all the expected animations actually are started, when a corresponding event is triggered by the player/ user inputs, in order to catch bugs when triggering/starting an animation.
PlayerAnimationRenderTest.java
@ExtendWith(GameExtension.class)
class PlayerAnimationRenderTest {
private Entity player;
private AnimationRenderComponent animator;
@BeforeEach
void beforeEach() {
ServiceLocator.registerPhysicsService(new PhysicsService());
player = new Entity()
.addComponent(new PhysicsComponent())
.addComponent(new PlayerAnimationController());
animator = mock(AnimationRenderComponent.class);
player.addComponent(animator);
PlayerAnimationController animationController =
player.getComponent(PlayerAnimationController.class);
animationController.setTexturePresent(false);
player.create();
}
@Test
void shouldTriggerRightMovement() {
player.getEvents().trigger("walkRight");
verify(animator).startAnimation("main_player_run");
}
@Test
void shouldTriggerWalkMovement() {
player.getEvents().trigger("startMPCAnimation");
verify(animator).startAnimation("main_player_walk");
}
@Test
void shouldTriggerJumpMovement() {
player.getEvents().trigger("jump");
verify(animator).startAnimation("main_player_jump");
}
@Test
void shouldTriggerCrouchMovement() {
player.getEvents().trigger("crouch");
verify(animator).startAnimation("main_player_crouch");
}
@Test
void shouldTriggerItemPickUpMovement() {
player.getEvents().trigger("itemPickUp");
verify(animator).startAnimation("main_player_pickup");
}
@Test
void shouldTriggerAttackMovement() {
player.getEvents().trigger("attack");
verify(animator).startAnimation("main_player_attack");
}
}
NOTE: For demo and testing purposes, all the attires are unlocked by default for now. This was done by hard coding the number of unlocked gold achievements to >6.
We've added animation atlas tests for the new burn and hurt animations PlayerAnimationAtlasTest.java
testAnimator.addAnimation("main_player_right", 1f);
assertTrue(testAnimator.hasAnimation("main_player_right"));
testAnimator.addAnimation("main_player_hurt", 1f);
assertTrue(testAnimator.hasAnimation("main_player_hurt"));
testAnimator.addAnimation("main_player_burn", 1f);
assertTrue(testAnimator.hasAnimation("main_player_burn"));
assertNotNull(atlas.findRegion("main_player_right"));
assertTrue(testAnimator.hasAnimation("main_player_right"));
assertNotNull(atlas.findRegion("main_player_hurt"));
assertTrue(testAnimator.hasAnimation("main_player_hurt"));
assertNotNull(atlas.findRegion("main_player_burn"));
assertTrue(testAnimator.hasAnimation("main_player_burn"));
We've also included new unit tests to verify the triggering of the new animations. PlayerAnimationRenderTest.java
@Test
void shouldTriggerBurnMovement() {
player.getEvents().trigger("burn");
verify(animator).startAnimation("main_player_burn");
}
@Test
void shouldTriggerHurtMovement() {
player.getEvents().trigger("hurt");
verify(animator).startAnimation("main_player_hurt");
}
@Test
void shouldTriggerWalkRightMovement() {
player.getEvents().trigger("stopAnimations");
verify(animator).startAnimation("main_player_walk");
}
In the future sprints, the integration between player buff animation and the actual functionality that riggers them will be unit tested comprehensively. The animation atlas can be generated programmatically instead of manually, in order to allow designers to test out new sprite designs without having to regenerate the whole texture atlas every time.
Camera Angle and The Player's Perspective
Achievements Trophies and Cards
πΎ Obstacle/Enemy
βMonster Manual
βObstacles/Enemies
ββ- Alien Plants
ββ- Variation thorns
ββ- Falling Meteorites
ββ- FaceHugger
ββ- AlienMonkey
βSpaceship & Map Entry
βParticle effect
[code for debuff animations](code for debuff animations)
Main Character Movement, Interactions and Animations - Code Guidelines
ItemBar & Recycle system
πΎ Obstacle/Enemy
βObstacle/Enemy
βMonster Manual
βSpaceship Boss
βParticle effects
βOther Related Code
βUML & Sequence diagram of enemies/obstacles
Scoring System Implementation Explanation
Buff and Debuff Implementation
Infinite generating terrains Implementation Explanation
Game Over Screen and functions explaination
Buffer timer before game start
Rocks and woods layout optimization
Magma and nails code implementation
Guide: Adding Background music for a particular screen
History Scoreboard - Score Details
Listening for important events in the Achievements ecosystem
Hunger and Thirst icon code guidelines
Hunger and Thirst User Testing
Buff and Debuff Manual User Testing
The New Button User Test in Setting Page
The Main Menu Buttons User Testing
Infinite loop game and Terrain Testing
https://github.com/UQdeco2800/2021-ext-studio-2.wiki.git
πΎ Obstacle/Enemy
βObstacle testing
ββ- Alien Plants & Variation Thorns
ββ- Falling Meteorites
βEnemy testing
ββ- Alien Monkeys & Facehugger
ββ- Spaceship Boss
βMonster Manual
βParticle-effect
βPlayer attack testing
ββ- Player Attack
Sprint 1
Sprint 2
Sprint 3
Sprint 4
Changeable background & Buffer time testing
Game over screen test sprint 4
New terrain textures on bonus map test sprint 4
Achievements System, Game Records and Unlockable Chapters
Musics Implementation Testing plan