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 UnityEngine;
@ -93,9 +94,24 @@ public abstract class AbstractCharacter : MonoBehaviour
public abstract void Move(Vector2 movementDirection);
public abstract void Shoot();
// TODO : Manage hurt + OnCollision + Death'n stuff
public void Hurt()
private void OnCollisionEnter2D(Collision2D other)
{
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 UnityEngine;
public class Bullet : MonoBehaviour
{
// Start is called before the first frame update
void Start()
[SerializeField] private int _damage;
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
@ -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 Vector2 _direction;
private float _maxSpeed;
public float MaxSpeed
{
get { return _maxSpeed; }
set { _maxSpeed = value; }
}
public Vector2 Direction
{
@ -15,11 +20,11 @@ public class Mover : MonoBehaviour
set { _direction = value; }
}
void Start()
void Awake()
{
_transform = GetComponentInParent<Transform>();
_character = GetComponentInParent<AbstractCharacter>();
_maxSpeed = _character.MaxSpeed;
_maxSpeed = _character != null ? _character.MaxSpeed : 1;
_direction = Vector2.zero;
}

View file

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