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
Branches hal
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.Collections;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
...@@ -18,6 +19,13 @@ public class PlayerController : MonoBehaviour ...@@ -18,6 +19,13 @@ public class PlayerController : MonoBehaviour
bool canMove = true; 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 // Start is called before the first frame update
void Start() void Start()
{ {
...@@ -26,6 +34,41 @@ public class PlayerController : MonoBehaviour ...@@ -26,6 +34,41 @@ public class PlayerController : MonoBehaviour
spriteRenderer = GetComponent<SpriteRenderer>(); 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() { private void FixedUpdate() {
if(canMove) { if(canMove) {
// If movement input is not 0, try to move // If movement input is not 0, try to move
......
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using System.Linq;
public class enemyMovement : MonoBehaviour public partial class enemyMovement : MonoBehaviour{
{
public float speed = 0.6f; public float speed = 0.6f;
public float collisionOffset = 0.05f;
public ContactFilter2D movementFilter;
List<RaycastHit2D> castCollisions = new List<RaycastHit2D>();
private Transform target; private Transform target;
Animator m_Animator; Animator m_Animator;
private float distance; private float distance;
public float attackSpeed = 1f; public float attackSpeed = 1f;
private float canAttack; 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(){
rb = GetComponent<Rigidbody2D>();
void Start()
{
m_Animator = gameObject.GetComponent<Animator>(); 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.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.GetComponent<SpriteRenderer>().flipX = true;
gameObject.transform.Find("weapon_axe").GetComponent<SpriteRenderer>().flipX = true;
} }
} }
private void Update(){ private void Update(){
if (target != null){ if (target != null && !isInMelee){
//walk
/* //walk
float step = speed * Time.deltaTime; float step = speed * Time.deltaTime;
transform.position = Vector2.MoveTowards(transform.position, target.position, step); transform.position = Vector2.MoveTowards(transform.position, target.position, step);
//distance = Vector3.Distance (transform.position, target.position); //distance = Vector3.Distance (transform.position, target.position);
//roter //roter
RotateAnimation(); RotateAnimation();
*/
TryMove((new Vector2(target.position.x, target.position.y) - rb.position).normalized);
} }
else{ else{
} }
} }
private void OnCollisionStay2D(Collision2D other){ private bool TryMove(Vector2 direction) {
if (other.gameObject.tag == "Player"){
if(attackSpeed <= canAttack){ if(direction != Vector2.zero) {
//add at player møste liv
m_Animator.SetTrigger("attack"); // 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 { } else {
canAttack += Time.deltaTime; // Can't move if there's no direction to move in
return false;
}
} }
} }
public partial class enemyMovement { //attack
private void Attack_OnColliderEnter2D(Collider2D other){
if (other.gameObject.tag == "Player")
isInMelee = true;
} }
private void OnTriggerEnter2D(Collider2D other){
private void Attack_OnColliderStay2D(Collider2D other){
if (other.gameObject.tag == "Player"){ 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"); m_Animator.SetTrigger("walk");
target = other.transform; target = other.transform;
}
}
private void Move_OnColliderStay2D(Collider2D other)
{
if (other.gameObject.tag == "Player"){
} }
} }
private void Move_OnColliderExit2D(Collider2D other)
private void OnTriggerExit2D(Collider2D other){ {
if (other.gameObject.tag == "Player"){ if (other.gameObject.tag == "Player"){
m_Animator.SetTrigger("idle"); m_Animator.SetTrigger("idle");
target = other.transform; target = other.transform;
target = null; target = null;
} }
} }
} }
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %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 --- !u!1 &2996495149472241661
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -95,9 +11,9 @@ GameObject: ...@@ -95,9 +11,9 @@ GameObject:
- component: {fileID: 7097463258699610772} - component: {fileID: 7097463258699610772}
- component: {fileID: 65690667081962088} - component: {fileID: 65690667081962088}
- component: {fileID: 8506405333948921944} - component: {fileID: 8506405333948921944}
- component: {fileID: 229287625782917783}
- component: {fileID: 5891912875293609069} - component: {fileID: 5891912875293609069}
- component: {fileID: 1992931693109878676} - component: {fileID: 1992931693109878676}
- component: {fileID: 2395291586284291126}
m_Layer: 0 m_Layer: 0
m_Name: enemy_orc_warrior m_Name: enemy_orc_warrior
m_TagString: Untagged m_TagString: Untagged
...@@ -117,7 +33,8 @@ Transform: ...@@ -117,7 +33,8 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 3533211250365981028} - {fileID: 2753253562357840752}
- {fileID: 1701851832504875480}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
...@@ -161,7 +78,7 @@ SpriteRenderer: ...@@ -161,7 +78,7 @@ SpriteRenderer:
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 1 m_SortingOrder: 2
m_Sprite: {fileID: 21300000, guid: dfb75b4c193e2994dabfcb50c3cf64e5, type: 3} m_Sprite: {fileID: 21300000, guid: dfb75b4c193e2994dabfcb50c3cf64e5, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1} m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0 m_FlipX: 0
...@@ -181,11 +98,11 @@ Rigidbody2D: ...@@ -181,11 +98,11 @@ Rigidbody2D:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2996495149472241661} m_GameObject: {fileID: 2996495149472241661}
m_BodyType: 1 m_BodyType: 0
m_Simulated: 1 m_Simulated: 1
m_UseFullKinematicContacts: 0 m_UseFullKinematicContacts: 1
m_UseAutoMass: 1 m_UseAutoMass: 1
m_Mass: 0.032 m_Mass: 0.6243647
m_LinearDrag: 0 m_LinearDrag: 0
m_AngularDrag: 0 m_AngularDrag: 0
m_GravityScale: 0 m_GravityScale: 0
...@@ -194,22 +111,6 @@ Rigidbody2D: ...@@ -194,22 +111,6 @@ Rigidbody2D:
m_SleepingMode: 1 m_SleepingMode: 1
m_CollisionDetection: 0 m_CollisionDetection: 0
m_Constraints: 4 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 --- !u!95 &5891912875293609069
Animator: Animator:
serializedVersion: 4 serializedVersion: 4
...@@ -243,4 +144,167 @@ MonoBehaviour: ...@@ -243,4 +144,167 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
speed: 0.6 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 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.
Please register or to comment