Skip to content
Snippets Groups Projects
Commit 25f01385 authored by Gard Aleksander Furre's avatar Gard Aleksander Furre
Browse files

fixed enemy movement, change to prefab orc

parent f6c9baec
No related branches found
No related tags found
No related merge requests found
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class EmptyCollider : MonoBehaviour
{
public event Action<Collider2D> OnColliderEnter2D_Action;
public event Action<Collider2D> OnColliderStay2D_Action;
public event Action<Collider2D> OnColliderExit2D_Action;
private void OnTriggerEnter2D(Collider2D other)
{
Debug.Log("enter");
OnColliderEnter2D_Action?.Invoke(other);
}
private void OnTriggerStay2D(Collider2D other)
{
OnColliderStay2D_Action?.Invoke(other);
}
private void OnTriggerExit2D(Collider2D other)
{
Debug.Log("exit");
OnColliderExit2D_Action?.Invoke(other);
}
}
using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
......@@ -18,6 +19,13 @@ public class PlayerController : MonoBehaviour
bool canMove = true;
public bool Alive { get; private set; } = true;
public double Hp { get; private set; } = 100;
public DateTime NextTimeCanTakeDamage { get; private set; } = DateTime.Now;
public TimeSpan IFrameDuration { get; private set; } = new TimeSpan(0, 0, 2);
// Start is called before the first frame update
void Start()
{
......@@ -26,6 +34,41 @@ public class PlayerController : MonoBehaviour
spriteRenderer = GetComponent<SpriteRenderer>();
}
/*
Adds damage to the player if they don't have IFrames.
*/
public bool TakeDamage(double amount) {
print($"[PlayerController.TakeDamage()] start. | {Hp} - {amount}");
// Check if player has IFrames
if(NextTimeCanTakeDamage > DateTime.Now)
return false;
// Start new IFrames
NextTimeCanTakeDamage = DateTime.Now + IFrameDuration;
// Add damage
Hp -= amount;
TryKill();
return true;
}
/*
Try to kill the player.
*/
public bool TryKill() {
print($"[PlayerController.TryKill()] start. | {Hp}, {Alive}");
if(Alive && Hp <= 0) {
Alive = false;
LockMovement();
return true;
}
return false;
}
private void FixedUpdate() {
if(canMove) {
// If movement input is not 0, try to move
......
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class enemyMovement : MonoBehaviour
{
public float speed = 0.6f;
private Transform target;
Animator m_Animator;
private float distance;
public partial class enemyMovement : MonoBehaviour{
public float speed = 0.6f;
public float attackSpeed = 1f;
private float canAttack;
public float collisionOffset = 0.05f;
public ContactFilter2D movementFilter;
List<RaycastHit2D> castCollisions = new List<RaycastHit2D>();
private Transform target;
Animator m_Animator;
private float distance;
public float attackSpeed = 1f;
private float canAttack;
private float baseDamage = 1f;
private EmptyCollider followCollider;
private EmptyCollider attackCollider;
private bool isInMelee = false;
Rigidbody2D rb;
// private Collider2D_Proxy secondCollider;
void Start()
{
void Start(){
rb = GetComponent<Rigidbody2D>();
m_Animator = gameObject.GetComponent<Animator>();
followCollider = transform.Find("followCollider").GetComponent<EmptyCollider>();
followCollider.OnColliderEnter2D_Action += Move_OnColliderEnter2D;
followCollider.OnColliderStay2D_Action += Move_OnColliderStay2D;
followCollider.OnColliderExit2D_Action += Move_OnColliderExit2D;
attackCollider = transform.Find("MeleeCollider").GetComponent<EmptyCollider>();
attackCollider.OnColliderEnter2D_Action += Attack_OnColliderEnter2D;
attackCollider.OnColliderStay2D_Action += Attack_OnColliderStay2D;
attackCollider.OnColliderExit2D_Action += Attack_OnColliderExit2D;
}
private void RotateAnimation()
private void RotateAnimation(Vector2 direction)
{
if (Input.GetAxis("Horizontal") > 0.01f){
if (direction.x > 0.01f){
gameObject.GetComponent<SpriteRenderer>().flipX = false;
gameObject.transform.Find("weapon_axe").GetComponent<SpriteRenderer>().flipX = false;
}
else if (Input.GetAxis("Horizontal") < -0.01f){
else if (direction.x < -0.01f){
gameObject.GetComponent<SpriteRenderer>().flipX = true;
gameObject.transform.Find("weapon_axe").GetComponent<SpriteRenderer>().flipX = true;
}
}
private void Update(){
if (target != null){
//walk
if (target != null && !isInMelee){
/* //walk
float step = speed * Time.deltaTime;
transform.position = Vector2.MoveTowards(transform.position, target.position, step);
//distance = Vector3.Distance (transform.position, target.position);
//roter
RotateAnimation();
*/
TryMove((new Vector2(target.position.x, target.position.y) - rb.position).normalized);
}
else{
}
}
private void OnCollisionStay2D(Collision2D other){
if (other.gameObject.tag == "Player"){
if(attackSpeed <= canAttack){
//add at player møste liv
m_Animator.SetTrigger("attack");
}else {
canAttack += Time.deltaTime;
private bool TryMove(Vector2 direction) {
if(direction != Vector2.zero) {
// Check for potential collisions
int count = rb.Cast(
direction, // X and Y values between -1 and 1 that represent the direction from the body to look for collisions
movementFilter, // The settings that determine where a collision can occur on such as layers to collide with
castCollisions, // List of collisions to store the found collisions into after the Cast is finished
speed * Time.fixedDeltaTime + collisionOffset); // The amount to cast equal to the movement plus an offset
//Debug.Log($"cast {string.Join(", ", castCollisions.Select(x => $"{x.collider.isTrigger}"))}");
//Debug.Log($"rb.position : {rb.position}");
//Debug.Log($"target.position : {target.position}");
//Debug.Log($"direction : {direction}");
if(count == 0){
rb.MovePosition(rb.position + direction * speed * Time.fixedDeltaTime);
print($"rb.position {rb.position}");
print($"direction {direction}");
RotateAnimation(direction);
return true;
} else {
return false;
}
} else {
// Can't move if there's no direction to move in
return false;
}
}
}
}
}
private void OnTriggerEnter2D(Collider2D other){
if (other.gameObject.tag == "Player"){
m_Animator.SetTrigger("walk");
target = other.transform;
public partial class enemyMovement { //attack
private void Attack_OnColliderEnter2D(Collider2D other){
if (other.gameObject.tag == "Player")
isInMelee = true;
}
private void Attack_OnColliderStay2D(Collider2D other){
if (other.gameObject.tag == "Player"){
var player = other.gameObject.GetComponent<PlayerController>();
if(player.TakeDamage(baseDamage)){
//knockback ?
//animer nå ?
}
}
}
private void Attack_OnColliderExit2D(Collider2D other){
if (other.gameObject.tag == "Player")
isInMelee = false;
}
}
public partial class enemyMovement { //move
private void Move_OnColliderEnter2D(Collider2D other)
{
Debug.Log("enter");
if (other.gameObject.tag == "Player"){
Debug.Log("enter if");
m_Animator.SetTrigger("walk");
target = other.transform;
}
}
}
private void OnTriggerExit2D(Collider2D other){
if (other.gameObject.tag == "Player"){
m_Animator.SetTrigger("idle");
target = other.transform;
target = null;
private void Move_OnColliderStay2D(Collider2D other)
{
if (other.gameObject.tag == "Player"){
}
}
}
}
private void Move_OnColliderExit2D(Collider2D other)
{
if (other.gameObject.tag == "Player"){
m_Animator.SetTrigger("idle");
target = other.transform;
target = null;
}
}
}
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1240678898127397734
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3533211250365981028}
- component: {fileID: 4131390337475563008}
m_Layer: 0
m_Name: weapon_axe
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3533211250365981028
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1240678898127397734}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.076, y: -0.003, z: 0}
m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 7097463258699610772}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &4131390337475563008
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1240678898127397734}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 21300000, guid: 0c02c87762e26c742a94ee93f48e55c3, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 0.09, y: 0.21}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 0
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &2996495149472241661
GameObject:
m_ObjectHideFlags: 0
......@@ -95,9 +11,9 @@ GameObject:
- component: {fileID: 7097463258699610772}
- component: {fileID: 65690667081962088}
- component: {fileID: 8506405333948921944}
- component: {fileID: 229287625782917783}
- component: {fileID: 5891912875293609069}
- component: {fileID: 1992931693109878676}
- component: {fileID: 2395291586284291126}
m_Layer: 0
m_Name: enemy_orc_warrior
m_TagString: Untagged
......@@ -117,7 +33,8 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3533211250365981028}
- {fileID: 2753253562357840752}
- {fileID: 1701851832504875480}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
......@@ -161,7 +78,7 @@ SpriteRenderer:
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
m_SortingOrder: 2
m_Sprite: {fileID: 21300000, guid: dfb75b4c193e2994dabfcb50c3cf64e5, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
......@@ -181,11 +98,11 @@ Rigidbody2D:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2996495149472241661}
m_BodyType: 1
m_BodyType: 0
m_Simulated: 1
m_UseFullKinematicContacts: 0
m_UseFullKinematicContacts: 1
m_UseAutoMass: 1
m_Mass: 0.032
m_Mass: 0.6243647
m_LinearDrag: 0
m_AngularDrag: 0
m_GravityScale: 0
......@@ -194,22 +111,6 @@ Rigidbody2D:
m_SleepingMode: 1
m_CollisionDetection: 0
m_Constraints: 4
--- !u!58 &229287625782917783
CircleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2996495149472241661}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: 0}
serializedVersion: 2
m_Radius: 1
--- !u!95 &5891912875293609069
Animator:
serializedVersion: 4
......@@ -243,4 +144,167 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
speed: 0.6
collisionOffset: 0.05
movementFilter:
useTriggers: 0
useLayerMask: 1
useDepth: 0
useOutsideDepth: 0
useNormalAngle: 0
useOutsideNormalAngle: 0
layerMask:
serializedVersion: 2
m_Bits: 0
minDepth: 0
maxDepth: 0
minNormalAngle: 0
maxNormalAngle: 0
attackSpeed: 3
--- !u!61 &2395291586284291126
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2996495149472241661}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0.06446171, y: -0.1364619}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
oldSize: {x: 1, y: 1.25}
newSize: {x: 0.16, y: 0.2}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 0.6390133, y: 0.9770762}
m_EdgeRadius: 0
--- !u!1 &7539630614846898202
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2753253562357840752}
- component: {fileID: 7566484513581878393}
- component: {fileID: 8365831662590702362}
m_Layer: 3
m_Name: followCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2753253562357840752
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7539630614846898202}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 7097463258699610772}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!58 &7566484513581878393
CircleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7539630614846898202}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: 0}
serializedVersion: 2
m_Radius: 8
--- !u!114 &8365831662590702362
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7539630614846898202}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 71e6597ff848be34e979f08b6041384a, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &8620845285361089561
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1701851832504875480}
- component: {fileID: 8983526051028480608}
- component: {fileID: 6373942986610437007}
m_Layer: 3
m_Name: MeleeCollider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1701851832504875480
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8620845285361089561}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.04, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 7097463258699610772}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!58 &8983526051028480608
CircleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8620845285361089561}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: 0}
serializedVersion: 2
m_Radius: 0.7
--- !u!114 &6373942986610437007
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8620845285361089561}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 71e6597ff848be34e979f08b6041384a, type: 3}
m_Name:
m_EditorClassIdentifier:
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment