-
Notifications
You must be signed in to change notification settings - Fork 4
Item Pickup
The items on the game world anywhere could be picked up by the character.
Different sorts of items may have different spawning ways and provide same buff (increasing health 10 point for the player character) in current version sprint2
spawning ways: dropping out randomly
born at: ItemFactory.java
public static Entity createFirstAid(Entity target){
/**
* creates an entity for a firstAidKit
* @param target The entity which is passed on to the first Aid component
* @return entity
*/
Entity firstAid = new Entity()
.addComponent(new TextureRenderComponent("images/Items/first_aid_kit.png"))
.addComponent(new PhysicsComponent())
.addComponent(new ColliderComponent())
.addComponent(new ItemComponent(target, (player) -> inchealth.increaseHealth(player)));
return firstAid;
}
use of the item: increase the health of the character
pick-up styles: The character can pick up the item directly or by destorying obstacles
ItemComponent & trigger event: The "collisionStart" event will be added to the entity licenser, "hitboxComponent" will be added to the entity to check if there is a collision between the character and the obstacle, when the first_aid_kit item is created from the item factory
public void create(){
firstAid.getEvents().addListener("collisionStart", this::onCollisionStart);
hitboxComponent = firstAidKit.getComponent(HitboxComponent.class);
}
If the player ovelapped with the obsatcle and has a collision, the "itemPickedup" event will be triggered and the items effect heals the player
private void onCollisionStart(Fixture me, Fixture other){
if (PhysicsLayer.contains(PhysicsLayer.PLAYER, other.getFilterData().categoryBits)) // checking if the collision is done with the player
{
callback.accept(target);
entity.getEvents().trigger("itemPickedUp");
AchievementsHelper.getInstance().trackItemPickedUpEvent();
Body physBody = entity.getComponent(PhysicsComponent.class).getBody();
if (physBody.getFixtureList().contains(other, true)) {
physBody.destroyFixture(other);
}
AchievementsHelper.getInstance().trackItemPickedUpEvent(AchievementsHelper.ITEM_FIRST_AID);
try {
entity.getComponent(TextureRenderComponent.class).dispose();
ServiceLocator.getEntityService().unregister(entity);
}
catch (Exception e){
System.out.print(e);
}
}
}
spawning ways: dropping out randomly
born at: ItemFactory.java
public static Entity createApple(Entity target){
/**
* creates an entity for a apple
* @param target The entity which is passed on to the first Aid component
* @return entity
*/
Entity apple = new Entity()
.addComponent(new TextureRenderComponent("images/Items/food.png"))
.addComponent(new PhysicsComponent())
.addComponent(new ColliderComponent())
.addComponent(new ItemComponent(target,(player) -> inchealth.increaseHealth(player)));
return apple;
}
implementing ways: same as First_Aid_Kit
born at: ItemFactory.java
public static Entity createWater(Entity target){
/**
* creates an entity for a water
* @param target The entity which is passed on to the first Aid component
* @return entity
*/
Entity water = new Entity()
.addComponent(new TextureRenderComponent("images/Items/water.png"))
.addComponent(new PhysicsComponent())
.addComponent(new ColliderComponent())
.addComponent(new ItemComponent(target,(player) -> inchealth.increaseHealth(player)));
return water;
}
implementing ways: same as First_Aid_Kit
spawning ways: dropping out by achievement triggering
spawning working progress: (AchievementsBonusItem.java)
Firstly, the event "spawningBonusItem" will be added to the AchievementHelper when the game world be created(ForestGameArea.java)
private void setBonusItems(Entity player) {
AchievementsBonusItems bonusItems = new AchievementsBonusItems(player);
bonusItems.setBonusItem();
}
public void setBonusItem() {
AchievementsHelper.getInstance().getEvents().addListener("spawnBonusItem", this::spawnBonusItem);
}
Once the player character unlock one achievement, a random sort of bonus item will be spawned
/**
* This func is used to spawn bonus items at the game world
* and the sort of bonus items spawned is random
*/
public void spawnBonusItem() {
new Thread(() -> {
try {
r = new Random(++RandomSeed); //random func
ran1 = r.nextInt(++result); //random func
if (ran1 % 4 == 1) {
bonusItem = ItemFactory.createWater(this.getTarget());
} else if (ran1 % 4 == 2) {
bonusItem = ItemFactory.createMagicPotion(this.getTarget());
} else if (ran1 % 4 == 3) {
bonusItem = ItemFactory.createSyringe(this.getTarget());
} else {
bonusItem = ItemFactory.createBandage(this.getTarget());
}
Vector2 vector2 = new Vector2(this.target.getPosition());
vector2.add(5,0);
bonusItem.setPosition(vector2);
ServiceLocator.getEntityService().register(bonusItem);
Thread.sleep(RENDER_DURATION);
}
catch (InterruptedException ignored){
}
}).start();
}
spawning ways: dropping out by achievements triggering
born at: ItemFactory.java
public static Entity createMagicPotion(Entity target){
/**
* creates an entity for a magic potion
* @param target The entity which is passed on to the first Aid component
* @return entity
*/
Entity magicPotion = new Entity()
.addComponent(new TextureRenderComponent("images/Items/magic_potion.png"))
.addComponent(new PhysicsComponent())
.addComponent(new ColliderComponent())
.addComponent(new ItemComponent(target,(player) -> inchealth.increaseHealth(player)));
return magicPotion;
}
implementing ways: same as Water
spawning ways: dropping out by achievements triggering
born at: ItemFactory.java
public static Entity createBandage(Entity target){
/**
* creates an entity for a bandage
* @param target The entity which is passed on to the first Aid component
* @return entity
*/
Entity bandage = new Entity()
.addComponent(new TextureRenderComponent("images/Items/bandage.png"))
.addComponent(new PhysicsComponent())
.addComponent(new ColliderComponent())
.addComponent(new ItemComponent(target,(player) -> inchealth.increaseHealth(player)));
return bandage;
}
implementing ways: same as Water
spawning ways: dropping out by achievements triggering
born at: ItemFactory.java
public static Entity createSyringe(Entity target){
/**
* creates an entity for a syringe
* @param target The entity which is passed on to the first Aid component
* @return entity
*/
Entity syringe = new Entity()
.addComponent(new TextureRenderComponent("images/Items/syringe.png"))
.addComponent(new PhysicsComponent())
.addComponent(new ColliderComponent())
.addComponent(new ItemComponent(target,(player) -> inchealth.increaseHealth(player)));
return syringe;
}
implementing ways: same as Water
spawning ways: dropping out randomly
born at: ItemFactory.java
public static Entity createGold(Entity target){
/**
* creates an entity for a gold
* @param target The entity which is passed on to the gold component
* @return entity
*/
Entity gold = new Entity()
.addComponent(new TextureRenderComponent("images/Items/goldCoin.png"))
.addComponent(new PhysicsComponent())
.addComponent(new ColliderComponent())
.addComponent(new GoldComponent(target));
gold.getComponent(TextureRenderComponent.class).scaleEntity();
gold.scaleHeight(0.8f);
PhysicsUtils.setScaledCollider(gold, 0.5f, 0.2f);
return gold;
}
implementing ways: similar to First_Aid_Kit The different between the goldCoin and other items is the difference of component(GoldComponent vs ItemComponent). Under GoldComponent.java, its onCollisionStart func(check if the item able to pick up) is same as the others. However there is new recordGold(int gold) func in the GoldComponent.java, it is used to store the amount of gold taken for the player in the current game round and the gold could be used at the props shop in the next game round.
/**
* This func is used to store the amount of goldCoin got from the player character
* @param gold the amount of goldCoin got from the player character in the current game round
*/
private void recordGold(int gold) {
try{
String goldAmountLastRound = Integer.toString(gold);
fileWriter.write(goldAmountLastRound);
fileWriter.flush();
fileWriter.close();
}catch(IOException e){
e.printStackTrace();
}
}
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