Canon Weapon¶
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Canon : Projectile
{
public float damage;
protected override void Hit(IDamageable damageable)
{
damageable.Damage(damage);
base.Hit(damageable);
}
}
public class CanonFactory : ProjectileFactory
{
public float damage;
public float speed;
public LayerMask hitMask;
public float lifetime;
public int ammo;
public override Projectile CreateProjectile(IWeaponUser user)
{
GameObject bulletObj = new("Projectile Canon");
bulletObj.transform.position = user.Position;
Rectangle rectangle = new("Large Projectile");
Transform rectangleTransform = rectangle.GameObject.transform;
rectangleTransform.parent = bulletObj.transform;
rectangleTransform.localPosition = Vector3.zero;
rectangleTransform.localScale = Vector3.one * 0.5f;
rectangleTransform.Rotate(Vector3.forward, 45f);
rectangle.CreateCollider(bulletObj, true);
Vector2 aimDirection = user.AimDirection; // Caching expensive get
Canon bullet = bulletObj.AddComponent<Canon>();
bulletObj.AddComponent<Rigidbody2D>().velocity = aimDirection * speed;
bullet.transform.up = aimDirection;
bullet.damage = damage;
bullet.hitMask = hitMask;
bullet.lifetime = lifetime;
return bullet;
}
}
Input Bindings changes¶
Creating third shooting method¶
player._bindings = new InputBindings();
}
BulletFactory mainFactory = new()
{
damage = 1f,
speed = 20f,
hitMask = IWeaponUser.EnemyMask,
lifetime = 10f
};
player._weapon = new BasicWeapon(mainFactory, 0.2f);
// Rocket Launcher Weapon
// RocketFactory secondaryFactory = new()
// {
// damage = 1f,
// speed = 20f,
// hitMask = IWeaponUser.EnemyMask,
// lifetime = 0.9f,
// ammo = 20
// };
// player._secondaryWeapon = new AmmoWeapon(secondaryFactory, 0.2f, 20);
// Canon Weapon
CanonFactory secondaryFactory = new()
{
damage = 5f,
speed = 15f,
hitMask = IWeaponUser.EnemyMask,
lifetime = 5f,
ammo = 20
};
player._secondaryWeapon = new AmmoWeapon(secondaryFactory, 0.5f, 20);
// Machine Gun weapon
MachineGunFactory thirdFactory = new()
{
damage = 1f,
speed = 20f,
hitMask = IWeaponUser.EnemyMask,
lifetime = 3f,
// Ammo doesnt work?
ammo = 20
};
player._thirdWeapon = new AmmoWeapon(thirdFactory, 0.1f, 50);
player._maxHealth = 5f;
HUD.HealthBar.Max = player._maxHealth;
player.Health = player._maxHealth;
HUD.HealthBar.ForceUpdate();
return player;
}
private Weapon _weapon, _secondaryWeapon, _thirdWeapon;
private Rigidbody2D _rigidbody;
private Camera _camera;
private float _movementSpeed = 6f;
private Vector2 _moveInput;
private Vector2 _aimInput;
private InputBindings _bindings;
private List<MetricsData> _data = new();
private float _maxHealth;
private float _health;
public float Health
{
get => _health;
set
{
_health = Mathf.Min(_maxHealth, value); // Health can't exceed max health
HUD.HealthBar.Value = _health;
if (_health <= 0)
Debug.Log("Dead");
}
}
private void Update()
{
_moveInput = GetMoveInput();
_aimInput = _camera.ScreenToWorldPoint(Input.mousePosition);
transform.up = _aimInput - (Vector2)transform.position;
if (Input.GetKey(_bindings.shoot))
{
_weapon.TryFire(this);
}
if (Input.GetKey(_bindings.shootSecondary))
{
_secondaryWeapon.TryFire(this);
}
// Created temporary third weapon (shoot with mousewheel)
if (Input.GetKey(_bindings.shootThird))
{
_thirdWeapon.TryFire(this);
}
}
Last update:
May 23, 2023