Skip to content

Projectile bug fixes

Josephjmet edited this page Oct 18, 2022 · 8 revisions

Link back to main page

During Sprint 4 implementation of projectiles was polished. Some major changes include

  • Making projectile size bigger
  • Projectiles disappearing when hitting target
  • Speed of projectiles reduced

Projectiles Disappearing

To get the projectiles to disappear came in 2 steps. The first was when collision occurred. This was done through the UGS grid system. The second was when projectiles did not collide but needed to despawn due to time. A timer component was created below to keep track of how long each projectile had existed.

package com.deco2800.game.components;

import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.deco2800.game.entities.Entity;
import com.deco2800.game.physics.BodyUserData;
import com.deco2800.game.physics.PhysicsLayer;
import com.deco2800.game.physics.components.HitboxComponent;
import com.deco2800.game.physics.components.PhysicsComponent;
import com.deco2800.game.services.ServiceLocator;

public class TimerComponent extends Component {
    private int timer;


    @Override
    public void update(){
        timer++;
        if (timer > 420) {
            ServiceLocator.getEntityService().addToDestroyEntities(this.entity);
        }
    }
}

In the entity service, when the time has run over and the projectile has been entered into the destroyed entities list, the below function removes the entity from the game. This stops errors from occuring as previously to many projectiles were spawning and multiple of the same projectile were being removed, causing crashes.

public void setDestroyEntire(ArrayList<Entity> newEntities) {
    this.toDestroyEntities = newEntities;
  }

  /**
   *
   * @param e entity to destroy
   */
  public void addToDestroyEntities(Entity e) {
    this.toDestroyEntities.add(e);
    if (!this.toDestroyEntities.contains(e)) {
      this.toDestroyEntities.add(e);
      unregister(e);
    }


  }

Change of Size

The following code was used to edit the size of the projectile sprite

projectile.setPosition(sourcePosition);
PhysicsUtils.setScaledCollider(projectile, 2f, 2f);
projectile.scaleHeight(20f);

Speed of Projectiles and targeting

The following code was used to update the way that the targets for the projectile is calculated and the speed of the projectiles.

destination.y -= ServiceLocator.getEntityService().getNamedEntity("terrain")
                .getComponent(TerrainComponent.class).getTileSize() / 2;

        projectile.getComponent(ProjectileMovementComponent.class).setTarget(destination);
        projectile.getComponent(ProjectileMovementComponent.class).setMoving(true);
        projectile.getComponent(ProjectileMovementComponent.class).setNewSpeed(new Vector2(4, 4));

Furthermore in general bug fixes surrounding the ranged enemy were fixed according to SonarCloud.

Table of Contents

Home

How to Play

Introduction

Game Features

Main Character

Enemies
The Final Boss

Landscape Objects

Shop
Inventory
Achievements
Camera

Crystal

Infrastructure

Audio

User Interfaces Across All Pages
Juicy UI
User Interfaces Buildings
Guidebook
[Resource Management](Resource-Management)
Map
Day and Night Cycle
Unified Grid System (UGS)
Polishing

Game Engine

Getting Started

Entities and Components

Service Locator

Loading Resources

Logging

Unit Testing

Debug Terminal

Input Handling

UI

Animations

Audio

AI

Physics

Game Screens and Areas

Terrain

Concurrency & Threading

Settings

Troubleshooting

MacOS Setup Guide

Clone this wiki locally