Compare commits

...

2 commits

Author SHA1 Message Date
37e8c8d689 Implemented Bullet component
Added Death() method to AbstractCharacter
Implemented basic bullet collision detection and effect
2019-09-17 20:45:08 +02:00
98402a90f7 Protect against NPE if no AbstractCharacter
Made Speed a property to allow other Objects that are not Characters to use the Mover
Init in Awake() to allow other objects to modify its properties during their Start()
2019-09-17 20:33:17 +02:00
4 changed files with 67 additions and 10 deletions

View file

@ -1,4 +1,5 @@
using System.Collections; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
@ -93,9 +94,24 @@ public abstract class AbstractCharacter : MonoBehaviour
public abstract void Move(Vector2 movementDirection); public abstract void Move(Vector2 movementDirection);
public abstract void Shoot(); public abstract void Shoot();
// TODO : Manage hurt + OnCollision + Death'n stuff private void OnCollisionEnter2D(Collision2D other)
public void Hurt()
{ {
throw new System.NotImplementedException(); Bullet bullet = other.gameObject.GetComponent<Bullet>();
if (bullet == null)
{
return;
} }
Hurt(bullet.Damage);
}
public void Hurt(int damage)
{
CurrentHealth -= damage;
if (CurrentHealth <= 0)
{
Death();
}
}
// Handles the death of the character, should be overriden
protected abstract void Death();
} }

View file

@ -1,13 +1,38 @@
using System.Collections; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public class Bullet : MonoBehaviour public class Bullet : MonoBehaviour
{ {
// Start is called before the first frame update [SerializeField] private int _damage;
void Start() public int Damage => _damage;
{
// Speed in m/s
[SerializeField] private float _speed;
public float Speed
{
get { return _speed; }
set { _speed = value; }
}
[SerializeField] private Vector2 _direction;
public Vector2 Direction
{
get { return _direction; }
set { _direction = value; }
}
private void Start()
{
Mover mover = GetComponentInParent<Mover>();
if (mover == null)
{
throw new MissingComponentException("Missing Mover!");
}
mover.Direction = Direction;
mover.MaxSpeed = Speed;
} }
// Update is called once per frame // Update is called once per frame
@ -15,4 +40,10 @@ public class Bullet : MonoBehaviour
{ {
} }
// Destroy on Stay, collision effects should be handled on Enter
private void OnCollisionStay2D(Collision2D other)
{
Destroy(gameObject);
}
} }

View file

@ -8,6 +8,11 @@ public class Mover : MonoBehaviour
private Transform _transform; private Transform _transform;
private Vector2 _direction; private Vector2 _direction;
private float _maxSpeed; private float _maxSpeed;
public float MaxSpeed
{
get { return _maxSpeed; }
set { _maxSpeed = value; }
}
public Vector2 Direction public Vector2 Direction
{ {
@ -15,11 +20,11 @@ public class Mover : MonoBehaviour
set { _direction = value; } set { _direction = value; }
} }
void Start() void Awake()
{ {
_transform = GetComponentInParent<Transform>(); _transform = GetComponentInParent<Transform>();
_character = GetComponentInParent<AbstractCharacter>(); _character = GetComponentInParent<AbstractCharacter>();
_maxSpeed = _character.MaxSpeed; _maxSpeed = _character != null ? _character.MaxSpeed : 1;
_direction = Vector2.zero; _direction = Vector2.zero;
} }

View file

@ -17,4 +17,9 @@ public class PlayerCharacter : AbstractCharacter
// TODO : Implement // TODO : Implement
throw new System.NotImplementedException(); throw new System.NotImplementedException();
} }
protected override void Death()
{
throw new System.NotImplementedException();
}
} }