Commit 328a22f5 authored by 15김민규's avatar 15김민규

Merge branch 'enemy'

# Conflicts:
#	Assets/Scenes/PlayScene.unity
#	Assets/Scripts/Characters/Enemy/EnemyAir.cs
#	Assets/Scripts/Characters/Enemy/EnemyGround.cs
parents 7d77c1cd 9d617db8
...@@ -163,7 +163,7 @@ AnimationClip: ...@@ -163,7 +163,7 @@ AnimationClip:
m_GenerateMotionCurves: 0 m_GenerateMotionCurves: 0
m_Events: m_Events:
- time: 0 - time: 0
functionName: ChangeVelocityX_noOption functionName: ChangeVelocityX_movement
data: data:
objectReferenceParameter: {fileID: 0} objectReferenceParameter: {fileID: 0}
floatParameter: 0 floatParameter: 0
......
...@@ -71,4 +71,11 @@ AnimationClip: ...@@ -71,4 +71,11 @@ AnimationClip:
m_HasGenericRootTransform: 0 m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0 m_HasMotionFloatCurves: 0
m_GenerateMotionCurves: 0 m_GenerateMotionCurves: 0
m_Events: [] m_Events:
- time: 0
functionName: ChangeDir_forAnimation
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
...@@ -109,7 +109,7 @@ AnimationClip: ...@@ -109,7 +109,7 @@ AnimationClip:
m_GenerateMotionCurves: 0 m_GenerateMotionCurves: 0
m_Events: m_Events:
- time: 0 - time: 0
functionName: ChangeVelocityX_noOption functionName: ChangeVelocityX_movement
data: data:
objectReferenceParameter: {fileID: 0} objectReferenceParameter: {fileID: 0}
floatParameter: 0 floatParameter: 0
......
...@@ -65,4 +65,11 @@ AnimationClip: ...@@ -65,4 +65,11 @@ AnimationClip:
m_HasGenericRootTransform: 0 m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0 m_HasMotionFloatCurves: 0
m_GenerateMotionCurves: 0 m_GenerateMotionCurves: 0
m_Events: [] m_Events:
- time: 0
functionName: ChangeDir_forAnimation
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
...@@ -61,7 +61,7 @@ GameObject: ...@@ -61,7 +61,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 0 m_IsActive: 1
--- !u!1 &1734061800721222 --- !u!1 &1734061800721222
GameObject: GameObject:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
...@@ -157,7 +157,7 @@ Transform: ...@@ -157,7 +157,7 @@ Transform:
m_PrefabInternal: {fileID: 100100000} m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1636491341446076} m_GameObject: {fileID: 1636491341446076}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -6.88, y: 1.405, z: 0} m_LocalPosition: {x: 11.29, y: -17.94, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 4015301101001556} - {fileID: 4015301101001556}
...@@ -299,10 +299,11 @@ MonoBehaviour: ...@@ -299,10 +299,11 @@ MonoBehaviour:
trackSpeed: 2.5 trackSpeed: 2.5
knockbackPercentage: knockbackPercentage:
- 0.5 - 0.5
MovementLock: 0 movementLock: 0
bumped: 0
bumpable: 1
attackRange: 1.2 attackRange: 1.2
rotatable: 1
WallTest:
CliffTest:
--- !u!114 &114173716467154830 --- !u!114 &114173716467154830
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
...@@ -378,7 +379,7 @@ SpriteRenderer: ...@@ -378,7 +379,7 @@ SpriteRenderer:
m_AutoUVMaxAngle: 89 m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: -2078941185 m_SortingLayerID: -2078941185
m_SortingLayer: 7 m_SortingLayer: 8
m_SortingOrder: 0 m_SortingOrder: 0
m_Sprite: {fileID: 21300000, guid: 71335108d30aa0e4a90179a09895440e, type: 3} m_Sprite: {fileID: 21300000, guid: 71335108d30aa0e4a90179a09895440e, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1} m_Color: {r: 1, g: 1, b: 1, a: 1}
......
...@@ -21,7 +21,7 @@ GameObject: ...@@ -21,7 +21,7 @@ GameObject:
- component: {fileID: 4804976410232030} - component: {fileID: 4804976410232030}
- component: {fileID: 50573848117970958} - component: {fileID: 50573848117970958}
- component: {fileID: 61188111102399610} - component: {fileID: 61188111102399610}
m_Layer: 16 m_Layer: 20
m_Name: Spider m_Name: Spider
m_TagString: Enemy m_TagString: Enemy
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
...@@ -37,7 +37,7 @@ GameObject: ...@@ -37,7 +37,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 4205286087293746} - component: {fileID: 4205286087293746}
- component: {fileID: 114337624805266014} - component: {fileID: 114337624805266014}
m_Layer: 0 m_Layer: 20
m_Name: HPBar m_Name: HPBar
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
...@@ -55,7 +55,7 @@ GameObject: ...@@ -55,7 +55,7 @@ GameObject:
- component: {fileID: 212993065858080250} - component: {fileID: 212993065858080250}
- component: {fileID: 95156341909549574} - component: {fileID: 95156341909549574}
- component: {fileID: 114803474034076246} - component: {fileID: 114803474034076246}
m_Layer: 0 m_Layer: 20
m_Name: Body m_Name: Body
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
...@@ -72,7 +72,7 @@ GameObject: ...@@ -72,7 +72,7 @@ GameObject:
- component: {fileID: 4370838883948786} - component: {fileID: 4370838883948786}
- component: {fileID: 61019308264186112} - component: {fileID: 61019308264186112}
- component: {fileID: 114106922099255344} - component: {fileID: 114106922099255344}
m_Layer: 18 m_Layer: 17
m_Name: Hitbox m_Name: Hitbox
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
......
...@@ -60,3 +60,9 @@ MonoBehaviour: ...@@ -60,3 +60,9 @@ MonoBehaviour:
- {fileID: 1896221696921858, guid: 6051c7354232afa45bf71a1032a49418, type: 2} - {fileID: 1896221696921858, guid: 6051c7354232afa45bf71a1032a49418, type: 2}
EnemySpawnCount: 0 EnemySpawnCount: 0
EnemyDeadCount: 0 EnemyDeadCount: 0
layerMaskWall:
serializedVersion: 2
m_Bits: 256
layerMaskPlatform:
serializedVersion: 2
m_Bits: 2304
...@@ -637,6 +637,48 @@ Prefab: ...@@ -637,6 +637,48 @@ Prefab:
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 7fec52078de87f74abe791494596a804, type: 2} m_SourcePrefab: {fileID: 100100000, guid: 7fec52078de87f74abe791494596a804, type: 2}
m_IsPrefabAsset: 0 m_IsPrefabAsset: 0
--- !u!1001 &604778652
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalPosition.x
value: 11.29
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalPosition.y
value: -17.94
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_RootOrder
value: 15
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: a164c147037e89448820f7387c724c42, type: 2}
m_IsPrefabAsset: 0
--- !u!1001 &650104063 --- !u!1001 &650104063
Prefab: Prefab:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -681,6 +723,21 @@ Prefab: ...@@ -681,6 +723,21 @@ Prefab:
propertyPath: comboUI propertyPath: comboUI
value: value:
objectReference: {fileID: 1504194384} objectReference: {fileID: 1504194384}
- target: {fileID: 114402380471012178, guid: 3d077a5f727dd1e4780e9265ed26e036,
type: 2}
propertyPath: enemyLayer.m_Bits
value: 1114112
objectReference: {fileID: 0}
- target: {fileID: 114402380471012178, guid: 3d077a5f727dd1e4780e9265ed26e036,
type: 2}
propertyPath: debuffTime2
value: 0
objectReference: {fileID: 0}
- target: {fileID: 114402380471012178, guid: 3d077a5f727dd1e4780e9265ed26e036,
type: 2}
propertyPath: debuffTime.Array.data[2]
value: 3
objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 3d077a5f727dd1e4780e9265ed26e036, type: 2} m_SourcePrefab: {fileID: 100100000, guid: 3d077a5f727dd1e4780e9265ed26e036, type: 2}
m_IsPrefabAsset: 0 m_IsPrefabAsset: 0
......
...@@ -775,11 +775,6 @@ Prefab: ...@@ -775,11 +775,6 @@ Prefab:
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 17 value: 17
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 50573848117970958, guid: e4298313f9e94c44fb057542ec7ad273,
type: 2}
propertyPath: m_AngularDrag
value: 50
objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: e4298313f9e94c44fb057542ec7ad273, type: 2} m_SourcePrefab: {fileID: 100100000, guid: e4298313f9e94c44fb057542ec7ad273, type: 2}
m_IsPrefabAsset: 0 m_IsPrefabAsset: 0
......
...@@ -46,7 +46,6 @@ public class AttackProperty : MonoBehaviour { ...@@ -46,7 +46,6 @@ public class AttackProperty : MonoBehaviour {
private void OnTriggerEnter2D(Collider2D collision) private void OnTriggerEnter2D(Collider2D collision)
{ {
Bounds tmpBounds = new Bounds(); Bounds tmpBounds = new Bounds();
if ((enemyLayer == (enemyLayer | 1 << collision.gameObject.layer)) && !collision.transform.GetChild(0).GetComponent<Enemy>().Invisible) if ((enemyLayer == (enemyLayer | 1 << collision.gameObject.layer)) && !collision.transform.GetChild(0).GetComponent<Enemy>().Invisible)
{ {
...@@ -63,7 +62,7 @@ public class AttackProperty : MonoBehaviour { ...@@ -63,7 +62,7 @@ public class AttackProperty : MonoBehaviour {
} }
} }
collision.transform.GetChild(0).GetComponent<Enemy>().GetDamaged(curAttack); collision.transform.GetChild(0).GetComponent<Enemy>().GetHit(curAttack);
//make effect //make effect
foreach (Collider2D col in GetComponents<Collider2D>()) foreach (Collider2D col in GetComponents<Collider2D>())
......
...@@ -22,10 +22,10 @@ public class ArcherIdle : StateMachineBehaviour ...@@ -22,10 +22,10 @@ public class ArcherIdle : StateMachineBehaviour
noticeRange = enemy.noticeRange; noticeRange = enemy.noticeRange;
patrolSpeed = enemy.patrolSpeed; patrolSpeed = enemy.patrolSpeed;
enemy.ChangeDir_noOption(NumeratedDir.Left); enemy.ChangeDir_movement(NumeratedDir.Left);
if (patrolRange > 0) if (patrolRange > 0)
{ {
enemy.ChangeVelocityX_noOption(enemy.MoveDir * patrolSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * patrolSpeed);
} }
} }
...@@ -37,7 +37,7 @@ public class ArcherIdle : StateMachineBehaviour ...@@ -37,7 +37,7 @@ public class ArcherIdle : StateMachineBehaviour
animator.SetTrigger("TrackTrigger"); animator.SetTrigger("TrackTrigger");
return; return;
} }
if (!enemy.MovementLock && patrolRange > 0) if (patrolRange > 0)
{ {
float span = animatorRoot.position.x - origin.x; float span = animatorRoot.position.x - origin.x;
...@@ -46,8 +46,8 @@ public class ArcherIdle : StateMachineBehaviour ...@@ -46,8 +46,8 @@ public class ArcherIdle : StateMachineBehaviour
enemy.CliffTest[(enemy.MoveDir + 1) / 2] enemy.CliffTest[(enemy.MoveDir + 1) / 2]
) )
{ {
enemy.ChangeDir_noOption(enemy.MoveDir * -1); enemy.ChangeDir_movement(enemy.MoveDir * -1);
enemy.ChangeVelocityX_noOption(enemy.MoveDir * patrolSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * patrolSpeed);
} }
} }
} }
......
...@@ -35,14 +35,14 @@ public class ArcherTrack : StateMachineBehaviour ...@@ -35,14 +35,14 @@ public class ArcherTrack : StateMachineBehaviour
attackRange = enemy.attackRange; attackRange = enemy.attackRange;
NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
enemy.ChangeDir_noOption(trackDir); enemy.ChangeDir_movement(trackDir);
if (enemy.CliffTest[(enemy.MoveDir + 1) / 2] || animator.GetComponent<Enemy>().PlayerDistance < attackRange) if (enemy.CliffTest[(enemy.MoveDir + 1) / 2] || animator.GetComponent<Enemy>().PlayerDistance < attackRange)
{ {
enemy.ChangeVelocityX_noOption(0.0f); enemy.ChangeVelocityX_movement(0.0f);
} }
else else
{ {
enemy.ChangeVelocityX_noOption(enemy.MoveDir * trackSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * trackSpeed);
} }
} }
...@@ -61,18 +61,18 @@ public class ArcherTrack : StateMachineBehaviour ...@@ -61,18 +61,18 @@ public class ArcherTrack : StateMachineBehaviour
int integerDir = enemy.MoveDir; int integerDir = enemy.MoveDir;
if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2]) if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2])
{ {
enemy.ChangeVelocityX_noOption(0.0f); enemy.ChangeVelocityX_movement(0.0f);
} }
else else
{ {
enemy.ChangeVelocityX_noOption(enemy.MoveDir * trackSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * trackSpeed);
} }
frameCounter += 1; frameCounter += 1;
if (frameCounter >= maxFrame) if (frameCounter >= maxFrame)
{ {
NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
enemy.ChangeDir_noOption(trackDir); enemy.ChangeDir_movement(trackDir);
frameCounter = 0; frameCounter = 0;
} }
} }
......
...@@ -3,22 +3,13 @@ using System.Collections.Generic; ...@@ -3,22 +3,13 @@ using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public class EnemyAirIdle : StateMachineBehaviour { public class EnemyAirIdle : StateMachineBehaviour {
float patrolRange;
float patrolSpeed;
float noticeRange; float noticeRange;
Vector2 origin;
Transform animatorRoot;
EnemyAir enemy; EnemyAir enemy;
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
origin = animator.transform.position;
animatorRoot = animator.transform.parent;
enemy = animator.GetComponent<EnemyAir>(); enemy = animator.GetComponent<EnemyAir>();
patrolRange = enemy.patrolRange;
noticeRange = enemy.noticeRange; noticeRange = enemy.noticeRange;
patrolSpeed = enemy.patrolSpeed;
} }
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
......
...@@ -4,23 +4,20 @@ using UnityEngine; ...@@ -4,23 +4,20 @@ using UnityEngine;
public class EnemyAirTrack : StateMachineBehaviour { public class EnemyAirTrack : StateMachineBehaviour {
float trackSpeed; float trackSpeed;
float trackRange;
float angle; float angle;
GameObject player; GameObject player;
Transform animatorRoot; Transform animatorRoot;
EnemyAir enemy; EnemyAir enemy;
Vector2 direction; Vector2 direction;
private readonly float interpolateCoeff = 0.05f;
int maxFrame = 10;
int frameCount;
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
animatorRoot = animator.transform.parent; animatorRoot = animator.transform.parent;
enemy = animator.GetComponent<EnemyAir>(); enemy = animator.GetComponent<EnemyAir>();
player = GameManager.Instance.player; player = GameManager.Instance.player;
trackSpeed = enemy.trackSpeed; trackSpeed = enemy.trackSpeed;
frameCount = 0; direction = Vector2.up;
SetDirection(); SetDirection();
} }
...@@ -30,14 +27,14 @@ public class EnemyAirTrack : StateMachineBehaviour { ...@@ -30,14 +27,14 @@ public class EnemyAirTrack : StateMachineBehaviour {
{ {
animator.ResetTrigger("TrackTrigger"); animator.ResetTrigger("TrackTrigger");
animator.SetTrigger("IdleTrigger"); animator.SetTrigger("IdleTrigger");
enemy.ChangeVelocityXY_noOption(Vector2.zero); enemy.ChangeVelocityXY_movement(Vector2.zero);
return; return;
} }
SetDirection(); SetDirection();
Vector2 vel = direction.normalized * trackSpeed; Vector2 vel = direction.normalized * trackSpeed;
enemy.ChangeVelocityXY_noOption(vel); enemy.ChangeVelocityXY_movement(vel);
} }
// OnStateExit is called when a transition ends and the state machine finishes evaluating this state // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
...@@ -57,8 +54,9 @@ public class EnemyAirTrack : StateMachineBehaviour { ...@@ -57,8 +54,9 @@ public class EnemyAirTrack : StateMachineBehaviour {
private void SetDirection() private void SetDirection()
{ {
direction = player.transform.position - animatorRoot.position; Vector2 directionToPlayer = (player.transform.position - animatorRoot.position).normalized;
direction = (directionToPlayer * interpolateCoeff + direction * (1 - interpolateCoeff)).normalized;
angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
enemy.ChangeAngleZ_noOption(angle - 90.0f); enemy.ChangeAngleZ_movement(angle - 90.0f);
} }
} }
...@@ -20,9 +20,9 @@ public class EnemyMeleeIdle : StateMachineBehaviour { ...@@ -20,9 +20,9 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
noticeRange = enemy.noticeRange; noticeRange = enemy.noticeRange;
patrolSpeed = enemy.patrolSpeed; patrolSpeed = enemy.patrolSpeed;
enemy.ChangeDir_noOption(NumeratedDir.Left); enemy.ChangeDir_movement(NumeratedDir.Left);
if (enemy.patrolRange > 0) { if (enemy.patrolRange > 0) {
enemy.ChangeVelocityX_noOption(enemy.MoveDir * patrolSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * patrolSpeed);
} }
} }
...@@ -33,7 +33,7 @@ public class EnemyMeleeIdle : StateMachineBehaviour { ...@@ -33,7 +33,7 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
animator.SetTrigger("TrackTrigger"); animator.SetTrigger("TrackTrigger");
return; return;
} }
if (!enemy.MovementLock && patrolRange > 0) if (patrolRange > 0)
{ {
float span = animatorRoot.position.x - origin.x; float span = animatorRoot.position.x - origin.x;
...@@ -42,8 +42,8 @@ public class EnemyMeleeIdle : StateMachineBehaviour { ...@@ -42,8 +42,8 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
enemy.CliffTest[(enemy.MoveDir + 1) / 2] enemy.CliffTest[(enemy.MoveDir + 1) / 2]
) )
{ {
enemy.ChangeDir_noOption(enemy.MoveDir * -1); enemy.ChangeDir_movement(enemy.MoveDir * -1);
enemy.ChangeVelocityX_noOption(enemy.MoveDir * patrolSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * patrolSpeed);
} }
} }
} }
......
...@@ -22,14 +22,14 @@ public class EnemyMeleeTrack : StateMachineBehaviour { ...@@ -22,14 +22,14 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
attackRange = enemy.attackRange; attackRange = enemy.attackRange;
NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
enemy.ChangeDir_noOption(trackDir); enemy.ChangeDir_movement(trackDir);
if (enemy.CliffTest[(enemy.MoveDir + 1) / 2] || animator.GetComponent<Enemy>().PlayerDistance < attackRange) if (enemy.CliffTest[(enemy.MoveDir + 1) / 2] || animator.GetComponent<Enemy>().PlayerDistance < attackRange)
{ {
enemy.ChangeVelocityX_noOption(0.0f); enemy.ChangeVelocityX_movement(0.0f);
} }
else else
{ {
enemy.ChangeVelocityX_noOption(enemy.MoveDir * trackSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * trackSpeed);
} }
} }
...@@ -43,18 +43,18 @@ public class EnemyMeleeTrack : StateMachineBehaviour { ...@@ -43,18 +43,18 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
int integerDir = enemy.MoveDir; int integerDir = enemy.MoveDir;
if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2]) if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2])
{ {
enemy.ChangeVelocityX_noOption(0.0f); enemy.ChangeVelocityX_movement(0.0f);
} }
else else
{ {
enemy.ChangeVelocityX_noOption(enemy.MoveDir * trackSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * trackSpeed);
} }
frameCounter += 1; frameCounter += 1;
if (frameCounter >= maxFrame) if (frameCounter >= maxFrame)
{ {
NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
enemy.ChangeDir_noOption(trackDir); enemy.ChangeDir_movement(trackDir);
frameCounter = 0; frameCounter = 0;
} }
} }
......
...@@ -35,14 +35,14 @@ public class Jollarcher2Track : StateMachineBehaviour ...@@ -35,14 +35,14 @@ public class Jollarcher2Track : StateMachineBehaviour
attackRange = enemy.attackRange; attackRange = enemy.attackRange;
NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
enemy.ChangeDir_noOption(trackDir); enemy.ChangeDir_movement(trackDir);
if (enemy.CliffTest[(enemy.MoveDir + 1) / 2] || animator.GetComponent<Enemy>().PlayerDistance < attackRange) if (enemy.CliffTest[(enemy.MoveDir + 1) / 2] || animator.GetComponent<Enemy>().PlayerDistance < attackRange)
{ {
enemy.ChangeVelocityX_noOption(0.0f); enemy.ChangeVelocityX_movement(0.0f);
} }
else else
{ {
enemy.ChangeVelocityX_noOption(enemy.MoveDir * trackSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * trackSpeed);
} }
} }
...@@ -62,18 +62,18 @@ public class Jollarcher2Track : StateMachineBehaviour ...@@ -62,18 +62,18 @@ public class Jollarcher2Track : StateMachineBehaviour
int integerDir = enemy.MoveDir; int integerDir = enemy.MoveDir;
if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2]) if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2])
{ {
enemy.ChangeVelocityX_noOption(0.0f); enemy.ChangeVelocityX_movement(0.0f);
} }
else else
{ {
enemy.ChangeVelocityX_noOption(enemy.MoveDir * trackSpeed); enemy.ChangeVelocityX_movement(enemy.MoveDir * trackSpeed);
} }
frameCounter += 1; frameCounter += 1;
if (frameCounter >= maxFrame) if (frameCounter >= maxFrame)
{ {
NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
enemy.ChangeDir_noOption(trackDir); enemy.ChangeDir_movement(trackDir);
frameCounter = 0; frameCounter = 0;
} }
} }
......
...@@ -17,20 +17,11 @@ public class DamageToPlayer : MonoBehaviour { ...@@ -17,20 +17,11 @@ public class DamageToPlayer : MonoBehaviour {
private void OnTriggerStay2D(Collider2D collision) private void OnTriggerStay2D(Collider2D collision)
{ {
if (collision.CompareTag("Player") && isBumpAttack && transform.parent.gameObject.GetComponent<Enemy>().bumpable) if (collision.CompareTag("Player") && isBumpAttack && !transform.parent.gameObject.GetComponent<EnemyAir>().bumped)
{ {
EnemyAttackInfo attack = new EnemyAttackInfo(damage, 1f, 0, null, null); EnemyAttackInfo attack = new EnemyAttackInfo(damage, 1f, 0, null, null);
collision.gameObject.GetComponent<PlayerAttack>().TakeDamage(attack); collision.gameObject.GetComponent<PlayerAttack>().TakeDamage(attack);
transform.parent.gameObject.GetComponent<EnemyAir>().bumped = true; transform.parent.gameObject.GetComponent<EnemyAir>().bumped = true;
transform.parent.gameObject.GetComponent<EnemyAir>().bumpable = false;
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.CompareTag("Player") && isBumpAttack)
{
transform.parent.gameObject.GetComponent<Enemy>().bumped = false;
} }
} }
} }
...@@ -27,7 +27,7 @@ public class Enemy : MonoBehaviour { ...@@ -27,7 +27,7 @@ public class Enemy : MonoBehaviour {
public float patrolSpeed; public float patrolSpeed;
public float trackSpeed; public float trackSpeed;
public float[] knockbackPercentage; public float[] knockbackPercentage;
public float currHealth { get; protected set; } public float CurrHealth { get; protected set; }
// manager // manager
protected InventoryManager inventoryManager; protected InventoryManager inventoryManager;
...@@ -37,19 +37,14 @@ public class Enemy : MonoBehaviour { ...@@ -37,19 +37,14 @@ public class Enemy : MonoBehaviour {
// for movement // for movement
protected Animator animator; protected Animator animator;
protected float stunnedAnimLength; protected float stunnedAnimLength;
public bool MovementLock; public EnemyMovementLock movementLock;
public bool Invisible { get; protected set; } public bool Invisible { get; protected set; }
public bool KnockbackLock { get; protected set; }
public float PlayerDistance { get; protected set; } public float PlayerDistance { get; protected set; }
protected virtual IEnumerator Knockback(float knockbackDist, float knockbackTime) { yield return 0; } protected virtual IEnumerator Knockback(float knockbackDist, float knockbackTime) { yield return 0; }
// drop item // drop item
private int[] dropTable; private int[] dropTable;
// for bumping attack
public bool bumped = false;
public bool bumpable = true;
// method // method
// Standard method // Standard method
protected virtual void Awake() protected virtual void Awake()
...@@ -71,8 +66,9 @@ public class Enemy : MonoBehaviour { ...@@ -71,8 +66,9 @@ public class Enemy : MonoBehaviour {
protected virtual void Start() protected virtual void Start()
{ {
currHealth = maxHealth; CurrHealth = maxHealth;
Invisible = MovementLock = KnockbackLock = false; Invisible = false;
movementLock = EnemyMovementLock.Free;
if (enemyManager.DropTableByID.ContainsKey(monsterID)) { dropTable = enemyManager.DropTableByID[monsterID]; } if (enemyManager.DropTableByID.ContainsKey(monsterID)) { dropTable = enemyManager.DropTableByID[monsterID]; }
PlayerDistance = Vector2.Distance(GameManager.Instance.player.transform.position, transform.parent.position); PlayerDistance = Vector2.Distance(GameManager.Instance.player.transform.position, transform.parent.position);
} }
...@@ -85,62 +81,41 @@ public class Enemy : MonoBehaviour { ...@@ -85,62 +81,41 @@ public class Enemy : MonoBehaviour {
// When damaged // When damaged
// - Calculate value & Arrange information // - Calculate value & Arrange information
public virtual void GetDamaged(PlayerAttackInfo attack) public virtual void GetHit(PlayerAttackInfo attack)
{
if (Invisible) { return; }
float prevHealth = currHealth;
currHealth -= attack.damage;
if (currHealth <= 0)
{ {
Invisible = true; TakeDamage(attack.damage);
animator.SetTrigger("DeadTrigger");
StopCoroutine("OnFire");
GetComponent<SpriteRenderer>().color = Color.white;
return;
}
DebuffApply(attack.debuffTime);
float knockbackDist = attack.damage * attack.knockBackMultiplier / weight; float knockbackDist = attack.damage * attack.knockBackMultiplier / weight;
float knockbackTime = (knockbackDist >= 0.5f) ? 0.5f : knockbackDist; float knockbackTime = (knockbackDist >= 0.5f) ? 0.5f : knockbackDist;
if (MovementLock) // 넉백이 진행 중 if (movementLock == EnemyMovementLock.Rigid) // 넉백이 진행 중
{ {
StopCoroutine("Knockback"); StopCoroutine("Knockback");
} }
StartCoroutine(Knockback(knockbackDist, knockbackTime));
float currHealthPercentage = currHealth / maxHealth;
float prevHealthPercentage = prevHealth / maxHealth;
foreach (float percentage in knockbackPercentage) if (movementLock < EnemyMovementLock.Debuffed)
{
if (currHealthPercentage > percentage) { break; }
if (prevHealthPercentage > percentage)
{ {
animator.SetTrigger("DamagedTrigger"); movementLock = EnemyMovementLock.Rigid;
break; StartCoroutine(Knockback(knockbackDist, knockbackTime));
}
} }
DebuffApply(attack.debuffTime);
animator.SetTrigger("TrackTrigger"); animator.SetTrigger("TrackTrigger");
} }
public void GetDamaged(float damage) public void TakeDamage(float damage)
{ {
if (Invisible) { return; } if (Invisible) { return; }
float prevHealth = currHealth; float prevHealth = CurrHealth;
currHealth -= damage; CurrHealth -= damage;
if (currHealth <= 0) if (CurrHealth <= 0)
{ {
Invisible = true; MakeDead();
animator.SetTrigger("DeadTrigger");
StopCoroutine("OnFire");
GetComponent<SpriteRenderer>().color = Color.white;
return; return;
} }
float currHealthPercentage = currHealth / maxHealth; float currHealthPercentage = CurrHealth / maxHealth;
float prevHealthPercentage = prevHealth / maxHealth; float prevHealthPercentage = prevHealth / maxHealth;
foreach (float percentage in knockbackPercentage) foreach (float percentage in knockbackPercentage)
...@@ -154,6 +129,15 @@ public class Enemy : MonoBehaviour { ...@@ -154,6 +129,15 @@ public class Enemy : MonoBehaviour {
} }
} }
public void MakeDead()
{
Invisible = true;
animator.SetTrigger("DeadTrigger");
StopCoroutine("OnFire");
GetComponent<SpriteRenderer>().color = Color.white;
return;
}
// - Apply debuff // - Apply debuff
protected void DebuffApply(float[] debuffTime) protected void DebuffApply(float[] debuffTime)
{ {
...@@ -180,11 +164,13 @@ public class Enemy : MonoBehaviour { ...@@ -180,11 +164,13 @@ public class Enemy : MonoBehaviour {
break; break;
case EnemyDebuffCase.Ice: case EnemyDebuffCase.Ice:
debuffState[debuff] = DebuffState.On; debuffState[debuff] = DebuffState.On;
movementLock = EnemyMovementLock.Debuffed;
StartCoroutine(OnIce(duration)); StartCoroutine(OnIce(duration));
break; break;
case EnemyDebuffCase.Stun: case EnemyDebuffCase.Stun:
if(debuffState[debuff] != DebuffState.On) { if(debuffState[debuff] != DebuffState.On) {
debuffState[debuff] = DebuffState.On; debuffState[debuff] = DebuffState.On;
movementLock = EnemyMovementLock.Debuffed;
StartCoroutine(OnStun(duration)); StartCoroutine(OnStun(duration));
} }
break; break;
...@@ -226,7 +212,7 @@ public class Enemy : MonoBehaviour { ...@@ -226,7 +212,7 @@ public class Enemy : MonoBehaviour {
foreach (Item item in inventoryManager.itemList) foreach (Item item in inventoryManager.itemList)
damageMultiplier *= item.GlobalFireDamageMultiplier(); damageMultiplier *= item.GlobalFireDamageMultiplier();
GetDamaged(lifeStoneManager.lifeStoneRowNum * 0.3f * damageMultiplier); TakeDamage(lifeStoneManager.lifeStoneRowNum * 0.3f * damageMultiplier);
EffectManager.Instance.StartNumber(0, gameObject.transform.parent.position, lifeStoneManager.lifeStoneRowNum * 0.3f); EffectManager.Instance.StartNumber(0, gameObject.transform.parent.position, lifeStoneManager.lifeStoneRowNum * 0.3f);
} }
debuffState[(int)EnemyDebuffCase.Fire] = DebuffState.Off; debuffState[(int)EnemyDebuffCase.Fire] = DebuffState.Off;
...@@ -248,12 +234,13 @@ public class Enemy : MonoBehaviour { ...@@ -248,12 +234,13 @@ public class Enemy : MonoBehaviour {
case EnemyDebuffCase.Ice: case EnemyDebuffCase.Ice:
GetComponent<SpriteRenderer>().color = Color.white; GetComponent<SpriteRenderer>().color = Color.white;
StopCoroutine("OnIce"); StopCoroutine("OnIce");
KnockbackLock = false; movementLock = EnemyMovementLock.Free;
animator.speed = 1.0f; animator.speed = 1.0f;
animator.SetTrigger("DisableStunTrigger"); animator.SetTrigger("DisableStunTrigger");
break; break;
case EnemyDebuffCase.Stun: case EnemyDebuffCase.Stun:
StopCoroutine("OnStun"); StopCoroutine("OnStun");
movementLock = EnemyMovementLock.Free;
animator.speed = 1.0f; animator.speed = 1.0f;
animator.SetTrigger("DisableStunTrigger"); animator.SetTrigger("DisableStunTrigger");
break; break;
...@@ -270,10 +257,11 @@ public class Enemy : MonoBehaviour { ...@@ -270,10 +257,11 @@ public class Enemy : MonoBehaviour {
if (transform.parent.GetComponentInChildren<HPBar>()) if (transform.parent.GetComponentInChildren<HPBar>())
transform.parent.GetComponentInChildren<HPBar>().Inactivate(); transform.parent.GetComponentInChildren<HPBar>().Inactivate();
transform.parent.gameObject.SetActive(false); transform.parent.gameObject.SetActive(false);
transform.parent.SetParent(null);
StopAllCoroutines(); StopAllCoroutines();
enemyManager.EnemyDeadCount++; // 다른 enemy로 인해 소환되는 enemy가 추가될 경우 여기를 건드려야 함 enemyManager.EnemyDeadCount++;
currHealth = maxHealth; CurrHealth = maxHealth;
Invisible = false; Invisible = false;
// Drop 아이템 결정. 인덱스 별 아이템은 맨 밑에 서술 // Drop 아이템 결정. 인덱스 별 아이템은 맨 밑에 서술
if (dropTable == null) { return; } if (dropTable == null) { return; }
......
...@@ -3,103 +3,99 @@ using System.Collections.Generic; ...@@ -3,103 +3,99 @@ using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public class EnemyAir : Enemy { public class EnemyAir : Enemy {
// for bumping attack
public bool bumped = false;
public bool prevBumped = false;
protected override void Start() protected override void Start()
{ {
base.Start(); base.Start();
StartCoroutine(BumpCheck()); prevBumped = bumped;
} }
protected override void FixedUpdate() protected override void FixedUpdate()
{ {
base.FixedUpdate(); base.FixedUpdate();
if(prevBumped != bumped && bumped && movementLock == EnemyMovementLock.Free)
if (bumpable)
{
MovementLock = false;
}
else
{ {
ChangeVelocityXY_zero(); StartCoroutine(Knockback(0.0f, 2.0f));
MovementLock = true; StartCoroutine(RecoverBump());
} }
prevBumped = bumped;
} }
public void ChangeAngleZ_noOption(float val) public void ChangeVelocityXY_zero() // 망할 유니티 애니메이션 이벤트 Vec2를 parameter로 받는 함수를 못집어넣음
{ {
ChangeAngleZ(val, new bool[] { MovementLock, KnockbackLock }); ChangeVelocityXY_movement(Vector2.zero);
} }
public void ChangeVelocityXY_zero() // 망할 유니티 애니메이션 이벤트 Vec2를 parameter로 받는 함수를 못집어넣음 public void ChangeAngleZ_movement(float val)
{ {
ChangeVelocityXY(Vector2.zero, new bool[] { MovementLock, KnockbackLock }); if (movementLock != EnemyMovementLock.Free) { return; }
ChangeAngleZ(val);
} }
public void ChangeVelocityXY_noOption(Vector2 val) public void ChangeVelocityXY_movement(Vector2 val)
{ {
ChangeVelocityXY(val, new bool[] { MovementLock, KnockbackLock }); if (movementLock != EnemyMovementLock.Free) { return; }
ChangeVelocityXY(val);
} }
private void ChangeAngleZ(float val, bool[] lockArray) private void ChangeAngleZ(float val)
{ {
foreach (var Lock in lockArray) { if (Lock) { return; } }
Vector3 tempAngle = transform.parent.eulerAngles; Vector3 tempAngle = transform.parent.eulerAngles;
tempAngle.z = val; tempAngle.z = val;
transform.parent.eulerAngles = tempAngle; transform.parent.eulerAngles = tempAngle;
} }
private void ChangeVelocityXY(Vector2 val, bool[] lockArray) private void ChangeVelocityXY(Vector2 val)
{ {
foreach (var Lock in lockArray) { if (Lock) { return; } }
Vector3 tempVelocity = transform.parent.gameObject.GetComponent<Rigidbody2D>().velocity; Vector3 tempVelocity = transform.parent.gameObject.GetComponent<Rigidbody2D>().velocity;
tempVelocity.x = val.x; tempVelocity.x = val.x;
tempVelocity.y = val.y; tempVelocity.y = val.y;
transform.parent.gameObject.GetComponent<Rigidbody2D>().velocity = tempVelocity; transform.parent.gameObject.GetComponent<Rigidbody2D>().velocity = tempVelocity;
} }
// - Knockback coroutine
protected override IEnumerator Knockback(float knockbackDist, float knockbackTime)
{
Vector2 knockbackDir = (transform.parent.position - enemyManager.Player.transform.position).normalized;
Vector2 knockbackVelocity = (knockbackDist / knockbackTime) * knockbackDir;
ChangeAngleZ(90 + Mathf.Rad2Deg * Mathf.Atan2(knockbackDir.y, knockbackDir.x));
ChangeVelocityXY(knockbackVelocity);
yield return new WaitForSeconds(knockbackTime);
ChangeVelocityXY(Vector2.zero);
if (movementLock != EnemyMovementLock.Debuffed)
{
movementLock = EnemyMovementLock.Free;
}
}
protected override IEnumerator OnIce(float duration) protected override IEnumerator OnIce(float duration)
{ {
GetComponent<SpriteRenderer>().color = new Color(0.5f, 0.5f, 1f); GetComponent<SpriteRenderer>().color = new Color(0.5f, 0.5f, 1f);
ChangeVelocityXY(Vector2.zero, new bool[] { }); bumped = true;
KnockbackLock = true;
animator.SetTrigger("StunnedTrigger"); animator.SetTrigger("StunnedTrigger");
animator.speed = stunnedAnimLength / duration; animator.speed = stunnedAnimLength / duration;
yield return new WaitForSeconds(duration); yield return new WaitForSeconds(duration);
bumped = false;
OffDebuff(EnemyDebuffCase.Ice); OffDebuff(EnemyDebuffCase.Ice);
} }
protected override IEnumerator OnStun(float duration) protected override IEnumerator OnStun(float duration)
{ {
ChangeVelocityXY(Vector2.zero, new bool[] { }); bumped = true;
animator.SetTrigger("StunnedTrigger"); animator.SetTrigger("StunnedTrigger");
animator.speed = stunnedAnimLength / duration; animator.speed = stunnedAnimLength / duration;
yield return new WaitForSeconds(duration); yield return new WaitForSeconds(duration);
OffDebuff(EnemyDebuffCase.Stun); OffDebuff(EnemyDebuffCase.Stun);
bumped = false;
yield return null; yield return null;
} }
// - Knockback coroutine IEnumerator RecoverBump()
protected override IEnumerator Knockback(float knockbackDist, float knockbackTime)
{ {
MovementLock = true; yield return new WaitForSeconds(2.0f);
bool[] lockArray = new bool[] { false, KnockbackLock }; bumped = false;
Vector2 knockbackDir = (transform.parent.position - GameManager.Instance.player.transform.position).normalized;
Vector2 knockbackVelocity = (knockbackDist / knockbackTime) * knockbackDir;
ChangeAngleZ(Mathf.Atan2(knockbackDir.y, knockbackDir.x) * -1, new bool[] { MovementLock, KnockbackLock });
ChangeVelocityXY(knockbackVelocity, lockArray);
yield return new WaitForSeconds(knockbackTime);
MovementLock = false;
ChangeVelocityXY(Vector2.zero, new bool[] { MovementLock, KnockbackLock });
}
IEnumerator BumpCheck()
{
while (true)
{
if (!bumpable) { bumpable = true; }
yield return new WaitForSeconds(1.0f);
}
} }
} }
...@@ -6,10 +6,9 @@ using System; ...@@ -6,10 +6,9 @@ using System;
public class EnemyGround : Enemy { public class EnemyGround : Enemy {
public float attackRange; public float attackRange;
public int MoveDir { get; private set; } public int MoveDir { get; private set; }
public bool[] WallTest { get; private set; } public bool[] WallTest;
public bool[] CliffTest { get; private set; } public bool[] CliffTest;
protected override void Awake() protected override void Awake()
{ {
...@@ -38,7 +37,6 @@ public class EnemyGround : Enemy { ...@@ -38,7 +37,6 @@ public class EnemyGround : Enemy {
// - Check whether enemy is near to cliff // - Check whether enemy is near to cliff
private void CheckCliff() private void CheckCliff()
{ {
Vector2 velocity = transform.parent.GetComponent<Rigidbody2D>().velocity;
Vector2 colliderSize = transform.parent.GetComponent<BoxCollider2D>().size; Vector2 colliderSize = transform.parent.GetComponent<BoxCollider2D>().size;
foreach (int Dir in Enum.GetValues(typeof(NumeratedDir))) foreach (int Dir in Enum.GetValues(typeof(NumeratedDir)))
...@@ -46,8 +44,7 @@ public class EnemyGround : Enemy { ...@@ -46,8 +44,7 @@ public class EnemyGround : Enemy {
Vector2 origin = (Vector2)transform.parent.position + Dir * new Vector2(colliderSize.x / 2.0f, 0); Vector2 origin = (Vector2)transform.parent.position + Dir * new Vector2(colliderSize.x / 2.0f, 0);
Vector2 direction = Vector2.down; Vector2 direction = Vector2.down;
float distance = colliderSize.y / 4.0f; float distance = colliderSize.y / 4.0f;
int layerMask = LayerMask.NameToLayer("platform"); RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, enemyManager.layerMaskPlatform);
RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, layerMask);
CliffTest[(Dir + 1) / 2] = (hit.collider == null); CliffTest[(Dir + 1) / 2] = (hit.collider == null);
} }
...@@ -60,11 +57,10 @@ public class EnemyGround : Enemy { ...@@ -60,11 +57,10 @@ public class EnemyGround : Enemy {
foreach (int Dir in Enum.GetValues(typeof(NumeratedDir))) foreach (int Dir in Enum.GetValues(typeof(NumeratedDir)))
{ {
Vector2 origin = (Vector2)transform.parent.position + new Vector2(Dir * colliderSize.x / 2.0f, colliderSize.y); Vector2 origin = (Vector2)transform.parent.position + new Vector2(Dir * colliderSize.x / 2.0f, colliderSize.y / 2.0f);
Vector2 direction = Vector2.right * Dir; Vector2 direction = Vector2.right * Dir;
float distance = 0.5f; float distance = 0.2f;
LayerMask layerMask = LayerMask.GetMask("Wall", "OuterWall"); RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, enemyManager.layerMaskWall);
RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, layerMask);
WallTest[(Dir + 1) / 2] = (hit.collider != null); WallTest[(Dir + 1) / 2] = (hit.collider != null);
} }
...@@ -72,60 +68,62 @@ public class EnemyGround : Enemy { ...@@ -72,60 +68,62 @@ public class EnemyGround : Enemy {
// - Change direction, and speed of rigidbody of enemy // - Change direction, and speed of rigidbody of enemy
public void ChangeVelocityX_noOption(float val) public void ChangeVelocityX_movement(float val)
{ {
ChangeVelocityX(val, new bool[] { MovementLock, KnockbackLock }); if(movementLock != EnemyMovementLock.Free) { return; }
ChangeVelocityX(val);
} }
public void ChangeDir_noOption(object dir) public void ChangeDir_movement(object dir)
{ {
ChangeDir(dir, new bool[] { MovementLock, KnockbackLock }); if (movementLock != EnemyMovementLock.Free) { return; }
ChangeDir(dir);
} }
private void ChangeVelocityX(float val, bool[] lockArray) private void ChangeVelocityX(float val)
{ {
foreach (var Lock in lockArray) { if (Lock) return; }
Vector2 tempVelocity = transform.parent.GetComponent<Rigidbody2D>().velocity; Vector2 tempVelocity = transform.parent.GetComponent<Rigidbody2D>().velocity;
tempVelocity.x = val; tempVelocity.x = val;
transform.parent.GetComponent<Rigidbody2D>().velocity = tempVelocity; transform.parent.GetComponent<Rigidbody2D>().velocity = tempVelocity;
} }
private void ChangeDir(object dir, bool[] lockArray) private void ChangeDir(object dir)
{ {
foreach (var Lock in lockArray) { if (Lock) return; }
MoveDir = (int)dir; MoveDir = (int)dir;
transform.parent.eulerAngles = ((NumeratedDir)dir == NumeratedDir.Left) ? new Vector2(0, 0) : new Vector2(0, 180); transform.parent.eulerAngles = ((NumeratedDir)dir == NumeratedDir.Left) ? new Vector2(0, 0) : new Vector2(0, 180);
} }
private void ChangeDir_forAnimation()
{
int knockbackDir = (GameManager.Instance.player.transform.position.x - transform.parent.position.x >= 0) ? -1 : 1;
ChangeDir(knockbackDir * -1);
}
// - Knockback coroutine // - Knockback coroutine
protected override IEnumerator Knockback(float knockbackDist, float knockbackTime) protected override IEnumerator Knockback(float knockbackDist, float knockbackTime)
{ {
MovementLock = true;
bool[] lockArray = new bool[] { false, KnockbackLock };
int knockbackDir = (GameManager.Instance.player.transform.position.x - transform.parent.position.x >= 0) ? -1 : 1; int knockbackDir = (GameManager.Instance.player.transform.position.x - transform.parent.position.x >= 0) ? -1 : 1;
float knockbackVelocity = knockbackDir * knockbackDist / knockbackTime; float knockbackVelocity = knockbackDir * knockbackDist / knockbackTime;
ChangeDir(knockbackDir * -1, new bool[] { MovementLock, KnockbackLock }); //ChangeDir(knockbackDir * -1);
ChangeVelocityX(knockbackVelocity, lockArray); ChangeVelocityX(knockbackVelocity);
for (float timer = 0; timer <= knockbackTime; timer += Time.deltaTime) for (float timer = 0; timer <= knockbackTime; timer += Time.deltaTime)
{ {
if (CliffTest[(knockbackDir + 1) / 2]) if (CliffTest[(knockbackDir + 1) / 2])
{ {
ChangeVelocityX(0.0f, lockArray); ChangeVelocityX(0.0f);
yield return new WaitForSeconds(knockbackTime - timer); yield return new WaitForSeconds(knockbackTime - timer);
break; break;
} }
yield return new WaitForFixedUpdate(); yield return new WaitForFixedUpdate();
} }
MovementLock = false; ChangeVelocityX(0.0f);
ChangeVelocityX(0.0f, new bool[] { MovementLock, KnockbackLock }); if (movementLock != EnemyMovementLock.Debuffed) movementLock = EnemyMovementLock.Free;
} }
protected override IEnumerator OnIce(float duration) protected override IEnumerator OnIce(float duration)
{ {
GetComponent<SpriteRenderer>().color = new Color(0.5f, 0.5f, 1f); GetComponent<SpriteRenderer>().color = new Color(0.5f, 0.5f, 1f);
ChangeVelocityX(0.0f, new bool[] { });
KnockbackLock = true;
animator.SetTrigger("StunnedTrigger"); animator.SetTrigger("StunnedTrigger");
animator.speed = stunnedAnimLength / duration; animator.speed = stunnedAnimLength / duration;
yield return new WaitForSeconds(duration); yield return new WaitForSeconds(duration);
...@@ -134,11 +132,10 @@ public class EnemyGround : Enemy { ...@@ -134,11 +132,10 @@ public class EnemyGround : Enemy {
protected override IEnumerator OnStun(float duration) protected override IEnumerator OnStun(float duration)
{ {
ChangeVelocityX(0.0f, new bool[] { });
animator.SetTrigger("StunnedTrigger"); animator.SetTrigger("StunnedTrigger");
yield return new WaitUntil(() => animator.GetCurrentAnimatorStateInfo(0).IsName("Stunned"));
animator.speed = stunnedAnimLength / duration; animator.speed = stunnedAnimLength / duration;
yield return new WaitForSeconds(duration); yield return new WaitForSeconds(duration);
OffDebuff(EnemyDebuffCase.Stun); OffDebuff(EnemyDebuffCase.Stun);
yield return null;
} }
} }
...@@ -5,17 +5,17 @@ using UnityEngine; ...@@ -5,17 +5,17 @@ using UnityEngine;
public class Scarecrow : Enemy { public class Scarecrow : Enemy {
public bool neverDie; public bool neverDie;
public override void GetDamaged(PlayerAttackInfo attack) public override void GetHit(PlayerAttackInfo attack)
{ {
if (Invisible) { return; } if (Invisible) { return; }
float prevHealth = currHealth; float prevHealth = CurrHealth;
currHealth -= attack.damage; CurrHealth -= attack.damage;
if (currHealth <= 0) if (CurrHealth <= 0)
{ {
if (neverDie) if (neverDie)
{ {
currHealth = maxHealth; CurrHealth = maxHealth;
} }
else else
{ {
......
...@@ -33,6 +33,9 @@ public class EnemyManager : Singleton<EnemyManager> ...@@ -33,6 +33,9 @@ public class EnemyManager : Singleton<EnemyManager>
private uint EnemySpawnCount; private uint EnemySpawnCount;
public uint EnemyDeadCount; public uint EnemyDeadCount;
// wall or platform
public LayerMask layerMaskWall;
public LayerMask layerMaskPlatform;
// method // method
// Constructor - protect calling raw constructor // Constructor - protect calling raw constructor
...@@ -62,32 +65,27 @@ public class EnemyManager : Singleton<EnemyManager> ...@@ -62,32 +65,27 @@ public class EnemyManager : Singleton<EnemyManager>
{ {
GameObject clone = PickFromPool(enemy); GameObject clone = PickFromPool(enemy);
clone.transform.position = location.position; clone.transform.position = location.position;
clone.transform.SetParent(MapManager.currentRoom.roomInGame.transform); clone.transform.SetParent(MapManager.currentRoom.transform);
} }
} }
} }
// Spawn Enemy to Map public bool IsClear()
public void SpawnEnemyToMap_forTest()
{ {
EnemySpawnCount = EnemyDeadCount = 0; return (EnemyDeadCount == EnemySpawnCount);
Transform enemySpots = GameObject.Find("Grid").transform.GetChild(0).GetChild(0).Find("enemy spot"); }
foreach (Transform enemySpot in enemySpots)
public int CountEnemyInMap()
{ {
if (!enemySpot.gameObject.activeSelf) continue; int cnt = 0;
GameObject enemy = enemySpot.gameObject.GetComponent<enemySpot>().enemyPrefab; foreach(Transform obj in MapManager.currentRoom.transform)
foreach (Transform location in enemySpot)
{ {
GameObject clone = PickFromPool(enemy); if (obj.gameObject.CompareTag("enemy"))
clone.transform.position = location.position; {
clone.transform.SetParent(MapManager.currentRoom.roomInGame.transform); cnt++;
}
} }
} }
return cnt;
public bool IsClear()
{
return (EnemyDeadCount == EnemySpawnCount);
} }
// Object Pool // Object Pool
......
...@@ -21,6 +21,13 @@ public enum NumeratedDir ...@@ -21,6 +21,13 @@ public enum NumeratedDir
Right = 1 Right = 1
}; };
public enum EnemyMovementLock
{
Free,
Rigid,
Debuffed
};
public enum PlayerDebuffCase public enum PlayerDebuffCase
{ {
......
...@@ -31,7 +31,7 @@ public class HPBar : MonoBehaviour { ...@@ -31,7 +31,7 @@ public class HPBar : MonoBehaviour {
instBor.transform.localScale = new Vector3(width / instBor.GetComponent<SpriteRenderer>().size.x, height / instBor.GetComponent<SpriteRenderer>().size.y, 1); instBor.transform.localScale = new Vector3(width / instBor.GetComponent<SpriteRenderer>().size.x, height / instBor.GetComponent<SpriteRenderer>().size.y, 1);
instBor.transform.position = transform.parent.position + new Vector3(0, yOffset, 0); instBor.transform.position = transform.parent.position + new Vector3(0, yOffset, 0);
float cur = Mathf.Max(0,transform.parent.GetComponentInChildren<Enemy>().currHealth / transform.parent.GetComponentInChildren<Enemy>().maxHealth); float cur = Mathf.Max(0,transform.parent.GetComponentInChildren<Enemy>().CurrHealth / transform.parent.GetComponentInChildren<Enemy>().maxHealth);
instRed.SetActive(true); instRed.SetActive(true);
instRed.transform.localScale = new Vector3((width / instRed.GetComponent<SpriteRenderer>().size.x - height / instRed.GetComponent<SpriteRenderer>().size.y * 0.2f) * cur, height / instRed.GetComponent<SpriteRenderer>().size.y * 0.8f, 1); instRed.transform.localScale = new Vector3((width / instRed.GetComponent<SpriteRenderer>().size.x - height / instRed.GetComponent<SpriteRenderer>().size.y * 0.2f) * cur, height / instRed.GetComponent<SpriteRenderer>().size.y * 0.8f, 1);
instRed.transform.position = transform.parent.position + new Vector3((width - height * 0.2f) / -2f, yOffset, 0); instRed.transform.position = transform.parent.position + new Vector3((width - height * 0.2f) / -2f, yOffset, 0);
......
...@@ -22,7 +22,7 @@ public class Gluttony : Addon ...@@ -22,7 +22,7 @@ public class Gluttony : Addon
} }
public override void OtherEffect(PlayerAttackInfo attackInfo, Enemy enemyInfo, string combo) public override void OtherEffect(PlayerAttackInfo attackInfo, Enemy enemyInfo, string combo)
{ {
if(attackInfo.damage >= enemyInfo.currHealth) if(attackInfo.damage >= enemyInfo.CurrHealth)
{ {
lifeStoneManager.FillLifeStone(1, LifeStoneType.Normal); lifeStoneManager.FillLifeStone(1, LifeStoneType.Normal);
} }
......
...@@ -26,7 +26,7 @@ public class JanusCoin : Addon ...@@ -26,7 +26,7 @@ public class JanusCoin : Addon
} }
else else
{ {
return enemyInfo.currHealth * 0.25f; return enemyInfo.CurrHealth * 0.25f;
} }
} }
} }
\ No newline at end of file
...@@ -65,7 +65,7 @@ public class ShockStick : Item { ...@@ -65,7 +65,7 @@ public class ShockStick : Item {
{ {
PlayerAttackInfo attack = new PlayerAttackInfo(20f, 0f, new float[(int)EnemyDebuffCase.END_POINTER] { 0, 0, 2, 0, 0 }); PlayerAttackInfo attack = new PlayerAttackInfo(20f, 0f, new float[(int)EnemyDebuffCase.END_POINTER] { 0, 0, 2, 0, 0 });
AttackCalculation(attack, enemy, combo[1]); AttackCalculation(attack, enemy, combo[1]);
enemy.GetDamaged(attack); enemy.GetHit(attack);
EffectManager.Instance.StartEffect(0, enemy.gameObject.transform.position); EffectManager.Instance.StartEffect(0, enemy.gameObject.transform.position);
EffectManager.Instance.StartNumber(1, enemy.gameObject.transform.position, attack.damage); EffectManager.Instance.StartNumber(1, enemy.gameObject.transform.position, attack.damage);
} }
......
...@@ -57,7 +57,7 @@ public class Test : MonoBehaviour { ...@@ -57,7 +57,7 @@ public class Test : MonoBehaviour {
} }
public void SummonEnemy() public void SummonEnemy()
{ {
EnemyManager.Instance.SpawnEnemyToMap_forTest(); EnemyManager.Instance.SpawnEnemyToMap();
} }
......
...@@ -52,4 +52,4 @@ Physics2DSettings: ...@@ -52,4 +52,4 @@ Physics2DSettings:
m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
m_LayerCollisionMatrix: fedffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9ff6ffffdffffffffffffffedff6ffffffffffffffffffffdff6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff m_LayerCollisionMatrix: fedfeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffe9fe6ffffdffffffffffffffedfe6ffffffffffffffffffffdfe6fffed7f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
...@@ -32,7 +32,7 @@ TagManager: ...@@ -32,7 +32,7 @@ TagManager:
- EnemyTrigger - EnemyTrigger
- EnemyAttack - EnemyAttack
- Player - Player
- - EnemyColliderAir
- -
- -
- -
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment