Commit 81ba33bb authored by 15김민규's avatar 15김민규

movement lock 관련으로 많이 고침. 고블린 공격중에 뒤에서 맞아도 방향을 바꾸지 않음. 강제로 죽이는 메소드 생성

parent 9eea22ef
...@@ -53,6 +53,34 @@ AnimationClip: ...@@ -53,6 +53,34 @@ AnimationClip:
path: Hitbox path: Hitbox
classID: 61 classID: 61
script: {fileID: 0} script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: Infinity
outSlope: Infinity
tangentMode: 103
weightedMode: 0
inWeight: 0
outWeight: 0
- serializedVersion: 3
time: 1.25
value: 0
inSlope: Infinity
outSlope: Infinity
tangentMode: 103
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: movementLock
path:
classID: 114
script: {fileID: 11500000, guid: a11d071a77ab21c48882c6c6e4db8f17, type: 3}
m_PPtrCurves: m_PPtrCurves:
- curve: - curve:
- time: 0 - time: 0
...@@ -85,6 +113,13 @@ AnimationClip: ...@@ -85,6 +113,13 @@ AnimationClip:
typeID: 61 typeID: 61
customType: 0 customType: 0
isPPtrCurve: 0 isPPtrCurve: 0
- serializedVersion: 2
path: 0
attribute: 1234365794
script: {fileID: 11500000, guid: a11d071a77ab21c48882c6c6e4db8f17, type: 3}
typeID: 114
customType: 0
isPPtrCurve: 0
- serializedVersion: 2 - serializedVersion: 2
path: 0 path: 0
attribute: 0 attribute: 0
...@@ -157,13 +192,41 @@ AnimationClip: ...@@ -157,13 +192,41 @@ AnimationClip:
path: Hitbox path: Hitbox
classID: 61 classID: 61
script: {fileID: 0} script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: Infinity
outSlope: Infinity
tangentMode: 103
weightedMode: 0
inWeight: 0
outWeight: 0
- serializedVersion: 3
time: 1.25
value: 0
inSlope: Infinity
outSlope: Infinity
tangentMode: 103
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: movementLock
path:
classID: 114
script: {fileID: 11500000, guid: a11d071a77ab21c48882c6c6e4db8f17, type: 3}
m_EulerEditorCurves: [] m_EulerEditorCurves: []
m_HasGenericRootTransform: 0 m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0 m_HasMotionFloatCurves: 0
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
......
...@@ -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
......
...@@ -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
...@@ -299,7 +299,7 @@ MonoBehaviour: ...@@ -299,7 +299,7 @@ MonoBehaviour:
trackSpeed: 2.5 trackSpeed: 2.5
knockbackPercentage: knockbackPercentage:
- 0.5 - 0.5
MovementLock: 0 movementLock: 0
attackRange: 1.2 attackRange: 1.2
WallTest: WallTest:
CliffTest: CliffTest:
......
...@@ -421,6 +421,10 @@ Prefab: ...@@ -421,6 +421,10 @@ Prefab:
propertyPath: m_Layer propertyPath: m_Layer
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1346522711063220, guid: e4298313f9e94c44fb057542ec7ad273, type: 2}
propertyPath: m_IsActive
value: 0
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
...@@ -691,6 +695,48 @@ Prefab: ...@@ -691,6 +695,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
...@@ -740,6 +786,16 @@ Prefab: ...@@ -740,6 +786,16 @@ Prefab:
propertyPath: enemyLayer.m_Bits propertyPath: enemyLayer.m_Bits
value: 1114112 value: 1114112
objectReference: {fileID: 0} 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
...@@ -1660,52 +1716,6 @@ Prefab: ...@@ -1660,52 +1716,6 @@ Prefab:
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c179f0931cfabec428a868a6edc543b0, type: 2} m_SourcePrefab: {fileID: 100100000, guid: c179f0931cfabec428a868a6edc543b0, type: 2}
m_IsPrefabAsset: 0 m_IsPrefabAsset: 0
--- !u!1001 &1745261819
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4985224690782364, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_LocalPosition.x
value: 3.115
objectReference: {fileID: 0}
- target: {fileID: 4985224690782364, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_LocalPosition.y
value: 1.126
objectReference: {fileID: 0}
- target: {fileID: 4985224690782364, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_LocalPosition.z
value: -0.107421875
objectReference: {fileID: 0}
- target: {fileID: 4985224690782364, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4985224690782364, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4985224690782364, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4985224690782364, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4985224690782364, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_RootOrder
value: 15
objectReference: {fileID: 0}
- target: {fileID: 1038441420714538, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 00231b2b95c4e464083ff598536b1e00, type: 2}
m_IsPrefabAsset: 0
--- !u!1001 &1864071038 --- !u!1001 &1864071038
Prefab: Prefab:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
......
...@@ -62,7 +62,7 @@ public class AttackProperty : MonoBehaviour { ...@@ -62,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
......
...@@ -11,15 +11,12 @@ public class EnemyAirTrack : StateMachineBehaviour { ...@@ -11,15 +11,12 @@ public class EnemyAirTrack : StateMachineBehaviour {
Vector2 direction; Vector2 direction;
private readonly float interpolateCoeff = 0.05f; 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; 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
...@@ -60,6 +57,6 @@ public class EnemyAirTrack : StateMachineBehaviour { ...@@ -60,6 +57,6 @@ public class EnemyAirTrack : StateMachineBehaviour {
Vector2 directionToPlayer = (player.transform.position - animatorRoot.position).normalized; Vector2 directionToPlayer = (player.transform.position - animatorRoot.position).normalized;
direction = (directionToPlayer * interpolateCoeff + direction * (1 - interpolateCoeff)).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;
} }
} }
......
...@@ -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,9 +37,8 @@ public class Enemy : MonoBehaviour { ...@@ -37,9 +37,8 @@ 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; }
...@@ -67,8 +66,9 @@ public class Enemy : MonoBehaviour { ...@@ -67,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);
} }
...@@ -81,62 +81,41 @@ public class Enemy : MonoBehaviour { ...@@ -81,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; } TakeDamage(attack.damage);
float prevHealth = currHealth;
currHealth -= attack.damage;
if (currHealth <= 0)
{
Invisible = true;
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)
...@@ -150,6 +129,15 @@ public class Enemy : MonoBehaviour { ...@@ -150,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)
{ {
...@@ -176,11 +164,13 @@ public class Enemy : MonoBehaviour { ...@@ -176,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;
...@@ -222,7 +212,7 @@ public class Enemy : MonoBehaviour { ...@@ -222,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;
...@@ -244,12 +234,13 @@ public class Enemy : MonoBehaviour { ...@@ -244,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;
...@@ -266,10 +257,11 @@ public class Enemy : MonoBehaviour { ...@@ -266,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; }
......
...@@ -15,85 +15,84 @@ public class EnemyAir : Enemy { ...@@ -15,85 +15,84 @@ public class EnemyAir : Enemy {
protected override void FixedUpdate() protected override void FixedUpdate()
{ {
base.FixedUpdate(); base.FixedUpdate();
if(prevBumped != bumped && bumped && !MovementLock) if(prevBumped != bumped && bumped && movementLock == EnemyMovementLock.Free)
{ {
StartCoroutine(Knockback(0.0f, 1.0f)); StartCoroutine(Knockback(0.0f, 2.0f));
StartCoroutine(RecoverBump()); StartCoroutine(RecoverBump());
} }
prevBumped = bumped; 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
protected override IEnumerator Knockback(float knockbackDist, float knockbackTime)
{
MovementLock = true;
bool[] lockArray = new bool[] { false, KnockbackLock };
Vector2 knockbackDir = (transform.parent.position - enemyManager.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 RecoverBump() IEnumerator RecoverBump()
{ {
yield return new WaitForSeconds(1.0f); yield return new WaitForSeconds(2.0f);
bumped = false; bumped = false;
} }
} }
...@@ -69,27 +69,27 @@ public class EnemyGround : Enemy { ...@@ -69,27 +69,27 @@ 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);
} }
...@@ -97,32 +97,28 @@ public class EnemyGround : Enemy { ...@@ -97,32 +97,28 @@ public class EnemyGround : Enemy {
// - 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 = (enemyManager.Player.transform.position.x - transform.parent.position.x >= 0) ? -1 : 1; int knockbackDir = (enemyManager.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_movement(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);
...@@ -131,11 +127,9 @@ public class EnemyGround : Enemy { ...@@ -131,11 +127,9 @@ 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");
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
{ {
......
...@@ -65,7 +65,7 @@ public class EnemyManager : Singleton<EnemyManager> ...@@ -65,7 +65,7 @@ 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);
} }
} }
} }
......
...@@ -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);
} }
......
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