Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
tetra-tower
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Oenos
tetra-tower
Commits
06ff808c
Commit
06ff808c
authored
Feb 27, 2019
by
16도재형
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'enemy'
parents
c46a4135
0660f5e1
Changes
31
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
316 additions
and
233 deletions
+316
-233
Goblin Attack.anim
Assets/Animation/Enemy/Goblin/Goblin Attack.anim
+1
-1
Goblin Damaged.anim
Assets/Animation/Enemy/Goblin/Goblin Damaged.anim
+8
-1
Goblin Dead.anim
Assets/Animation/Enemy/Goblin/Goblin Dead.anim
+1
-1
Goblin Stunned.anim
Assets/Animation/Enemy/Goblin/Goblin Stunned.anim
+8
-1
Goblin.prefab
Assets/Prefabs/Characters/Enemy/Goblin.prefab
+7
-6
Spider.prefab
Assets/Prefabs/Characters/Enemy/Spider.prefab
+4
-4
EnemyManager.prefab
Assets/Prefabs/EnemyManager.prefab
+6
-0
PlayScene.unity
Assets/Scenes/PlayScene.unity
+115
-0
testEnemy.unity
Assets/Scenes/testEnemy.unity
+0
-5
AttackProperty.cs
Assets/Scripts/Characters/AttackProperty.cs
+1
-2
ArcherIdle.cs
Assets/Scripts/Characters/Enemy/Animator State/ArcherIdle.cs
+5
-5
ArcherTrack.cs
...ts/Scripts/Characters/Enemy/Animator State/ArcherTrack.cs
+6
-6
EnemyAirIdle.cs
...s/Scripts/Characters/Enemy/Animator State/EnemyAirIdle.cs
+0
-9
EnemyAirTrack.cs
.../Scripts/Characters/Enemy/Animator State/EnemyAirTrack.cs
+7
-9
EnemyMeleeIdle.cs
...Scripts/Characters/Enemy/Animator State/EnemyMeleeIdle.cs
+5
-5
EnemyMeleeTrack.cs
...cripts/Characters/Enemy/Animator State/EnemyMeleeTrack.cs
+6
-6
Jollarcher2Track.cs
...ripts/Characters/Enemy/Animator State/Jollarcher2Track.cs
+6
-6
DamageToPlayer.cs
Assets/Scripts/Characters/Enemy/DamageToPlayer.cs
+1
-10
Enemy.cs
Assets/Scripts/Characters/Enemy/Enemy.cs
+37
-49
EnemyAir.cs
Assets/Scripts/Characters/Enemy/EnemyAir.cs
+42
-46
EnemyGround.cs
Assets/Scripts/Characters/Enemy/EnemyGround.cs
+27
-30
Scarecrow.cs
Assets/Scripts/Characters/Enemy/Scarecrow.cs
+5
-5
EnemyManager.cs
Assets/Scripts/EnemyManager.cs
+4
-19
Enumerators.cs
Assets/Scripts/Enumerators.cs
+7
-0
HPBar.cs
Assets/Scripts/HPBar.cs
+1
-1
Gluttony.cs
Assets/Scripts/Item/Addons/Gluttony.cs
+1
-1
JanusCoin.cs
Assets/Scripts/Item/Addons/JanusCoin.cs
+1
-1
ShockStick.cs
Assets/Scripts/Item/Items/ShockStick.cs
+1
-1
Test.cs
Assets/Scripts/TetrisMap/Test.cs
+1
-1
Physics2DSettings.asset
ProjectSettings/Physics2DSettings.asset
+1
-1
TagManager.asset
ProjectSettings/TagManager.asset
+1
-1
No files found.
Assets/Animation/Enemy/Goblin/Goblin Attack.anim
View file @
06ff808c
...
...
@@ -163,7 +163,7 @@ AnimationClip:
m_GenerateMotionCurves
:
0
m_Events
:
-
time
:
0
functionName
:
ChangeVelocityX_
noOption
functionName
:
ChangeVelocityX_
movement
data
:
objectReferenceParameter
:
{
fileID
:
0
}
floatParameter
:
0
...
...
Assets/Animation/Enemy/Goblin/Goblin Damaged.anim
View file @
06ff808c
...
...
@@ -71,4 +71,11 @@ AnimationClip:
m_HasGenericRootTransform
:
0
m_HasMotionFloatCurves
:
0
m_GenerateMotionCurves
:
0
m_Events
:
[]
m_Events
:
-
time
:
0
functionName
:
ChangeDir_forAnimation
data
:
objectReferenceParameter
:
{
fileID
:
0
}
floatParameter
:
0
intParameter
:
0
messageOptions
:
0
Assets/Animation/Enemy/Goblin/Goblin Dead.anim
View file @
06ff808c
...
...
@@ -109,7 +109,7 @@ AnimationClip:
m_GenerateMotionCurves
:
0
m_Events
:
-
time
:
0
functionName
:
ChangeVelocityX_
noOption
functionName
:
ChangeVelocityX_
movement
data
:
objectReferenceParameter
:
{
fileID
:
0
}
floatParameter
:
0
...
...
Assets/Animation/Enemy/Goblin/Goblin Stunned.anim
View file @
06ff808c
...
...
@@ -65,4 +65,11 @@ AnimationClip:
m_HasGenericRootTransform
:
0
m_HasMotionFloatCurves
:
0
m_GenerateMotionCurves
:
0
m_Events
:
[]
m_Events
:
-
time
:
0
functionName
:
ChangeDir_forAnimation
data
:
objectReferenceParameter
:
{
fileID
:
0
}
floatParameter
:
0
intParameter
:
0
messageOptions
:
0
Assets/Prefabs/Characters/Enemy/Goblin.prefab
View file @
06ff808c
...
...
@@ -61,7 +61,7 @@ GameObject:
m_Icon
:
{
fileID
:
0
}
m_NavMeshLayer
:
0
m_StaticEditorFlags
:
0
m_IsActive
:
0
m_IsActive
:
1
---
!u!1
&1734061800721222
GameObject
:
m_ObjectHideFlags
:
1
...
...
@@ -157,7 +157,7 @@ Transform:
m_PrefabInternal
:
{
fileID
:
100100000
}
m_GameObject
:
{
fileID
:
1636491341446076
}
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_Children
:
-
{
fileID
:
4015301101001556
}
...
...
@@ -299,10 +299,11 @@ MonoBehaviour:
trackSpeed
:
2.5
knockbackPercentage
:
-
0.5
MovementLock
:
0
bumped
:
0
bumpable
:
1
movementLock
:
0
attackRange
:
1.2
rotatable
:
1
WallTest
:
CliffTest
:
---
!u!114
&114173716467154830
MonoBehaviour
:
m_ObjectHideFlags
:
1
...
...
@@ -378,7 +379,7 @@ SpriteRenderer:
m_AutoUVMaxAngle
:
89
m_LightmapParameters
:
{
fileID
:
0
}
m_SortingLayerID
:
-2078941185
m_SortingLayer
:
7
m_SortingLayer
:
8
m_SortingOrder
:
0
m_Sprite
:
{
fileID
:
21300000
,
guid
:
71335108d30aa0e4a90179a09895440e
,
type
:
3
}
m_Color
:
{
r
:
1
,
g
:
1
,
b
:
1
,
a
:
1
}
...
...
Assets/Prefabs/Characters/Enemy/Spider.prefab
View file @
06ff808c
...
...
@@ -21,7 +21,7 @@ GameObject:
-
component
:
{
fileID
:
4804976410232030
}
-
component
:
{
fileID
:
50573848117970958
}
-
component
:
{
fileID
:
61188111102399610
}
m_Layer
:
16
m_Layer
:
20
m_Name
:
Spider
m_TagString
:
Enemy
m_Icon
:
{
fileID
:
0
}
...
...
@@ -37,7 +37,7 @@ GameObject:
m_Component
:
-
component
:
{
fileID
:
4205286087293746
}
-
component
:
{
fileID
:
114337624805266014
}
m_Layer
:
0
m_Layer
:
2
0
m_Name
:
HPBar
m_TagString
:
Untagged
m_Icon
:
{
fileID
:
0
}
...
...
@@ -55,7 +55,7 @@ GameObject:
-
component
:
{
fileID
:
212993065858080250
}
-
component
:
{
fileID
:
95156341909549574
}
-
component
:
{
fileID
:
114803474034076246
}
m_Layer
:
0
m_Layer
:
2
0
m_Name
:
Body
m_TagString
:
Untagged
m_Icon
:
{
fileID
:
0
}
...
...
@@ -72,7 +72,7 @@ GameObject:
-
component
:
{
fileID
:
4370838883948786
}
-
component
:
{
fileID
:
61019308264186112
}
-
component
:
{
fileID
:
114106922099255344
}
m_Layer
:
1
8
m_Layer
:
1
7
m_Name
:
Hitbox
m_TagString
:
Untagged
m_Icon
:
{
fileID
:
0
}
...
...
Assets/Prefabs/EnemyManager.prefab
View file @
06ff808c
...
...
@@ -60,3 +60,9 @@ MonoBehaviour:
-
{
fileID
:
1896221696921858
,
guid
:
6051c7354232afa45bf71a1032a49418
,
type
:
2
}
EnemySpawnCount
:
0
EnemyDeadCount
:
0
layerMaskWall
:
serializedVersion
:
2
m_Bits
:
256
layerMaskPlatform
:
serializedVersion
:
2
m_Bits
:
2304
Assets/Scenes/PlayScene.unity
View file @
06ff808c
...
...
@@ -370,6 +370,64 @@ Prefab:
m_RemovedComponents
:
[]
m_SourcePrefab
:
{
fileID
:
100100000
,
guid
:
51507e73c8b2b094e8299991dfe7fe46
,
type
:
2
}
m_IsPrefabAsset
:
0
---
!u!1001
&104102827
Prefab
:
m_ObjectHideFlags
:
0
serializedVersion
:
2
m_Modification
:
m_TransformParent
:
{
fileID
:
0
}
m_Modifications
:
-
target
:
{
fileID
:
4804976410232030
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_LocalPosition.x
value
:
11.47
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
4804976410232030
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_LocalPosition.y
value
:
-16.37
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
4804976410232030
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_LocalPosition.z
value
:
0
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
4804976410232030
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_LocalRotation.x
value
:
0
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
4804976410232030
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_LocalRotation.y
value
:
0
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
4804976410232030
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_LocalRotation.z
value
:
0
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
4804976410232030
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_LocalRotation.w
value
:
1
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
4804976410232030
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_RootOrder
value
:
14
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
1346522711063220
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_Layer
value
:
16
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
1860030746010208
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_Layer
value
:
0
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
1822069857481414
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_Layer
value
:
0
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
1346522711063220
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_IsActive
value
:
0
objectReference
:
{
fileID
:
0
}
m_RemovedComponents
:
[]
m_SourcePrefab
:
{
fileID
:
100100000
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
m_IsPrefabAsset
:
0
---
!u!1001
&179350392
Prefab
:
m_ObjectHideFlags
:
0
...
...
@@ -637,6 +695,48 @@ Prefab:
m_RemovedComponents
:
[]
m_SourcePrefab
:
{
fileID
:
100100000
,
guid
:
7fec52078de87f74abe791494596a804
,
type
:
2
}
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
Prefab
:
m_ObjectHideFlags
:
0
...
...
@@ -681,6 +781,21 @@ Prefab:
propertyPath
:
comboUI
value
:
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_SourcePrefab
:
{
fileID
:
100100000
,
guid
:
3d077a5f727dd1e4780e9265ed26e036
,
type
:
2
}
m_IsPrefabAsset
:
0
...
...
Assets/Scenes/testEnemy.unity
View file @
06ff808c
...
...
@@ -775,11 +775,6 @@ Prefab:
propertyPath
:
m_RootOrder
value
:
17
objectReference
:
{
fileID
:
0
}
-
target
:
{
fileID
:
50573848117970958
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
propertyPath
:
m_AngularDrag
value
:
50
objectReference
:
{
fileID
:
0
}
m_RemovedComponents
:
[]
m_SourcePrefab
:
{
fileID
:
100100000
,
guid
:
e4298313f9e94c44fb057542ec7ad273
,
type
:
2
}
m_IsPrefabAsset
:
0
...
...
Assets/Scripts/Characters/AttackProperty.cs
View file @
06ff808c
...
...
@@ -46,7 +46,6 @@ public class AttackProperty : MonoBehaviour {
private
void
OnTriggerEnter2D
(
Collider2D
collision
)
{
Bounds
tmpBounds
=
new
Bounds
();
if
((
enemyLayer
==
(
enemyLayer
|
1
<<
collision
.
gameObject
.
layer
))
&&
!
collision
.
transform
.
GetChild
(
0
).
GetComponent
<
Enemy
>().
Invisible
)
{
...
...
@@ -63,7 +62,7 @@ public class AttackProperty : MonoBehaviour {
}
}
collision
.
transform
.
GetChild
(
0
).
GetComponent
<
Enemy
>().
Get
Damaged
(
curAttack
);
collision
.
transform
.
GetChild
(
0
).
GetComponent
<
Enemy
>().
Get
Hit
(
curAttack
);
//make effect
foreach
(
Collider2D
col
in
GetComponents
<
Collider2D
>())
...
...
Assets/Scripts/Characters/Enemy/Animator State/ArcherIdle.cs
View file @
06ff808c
...
...
@@ -22,10 +22,10 @@ public class ArcherIdle : StateMachineBehaviour
noticeRange
=
enemy
.
noticeRange
;
patrolSpeed
=
enemy
.
patrolSpeed
;
enemy
.
ChangeDir_
noOption
(
NumeratedDir
.
Left
);
enemy
.
ChangeDir_
movement
(
NumeratedDir
.
Left
);
if
(
patrolRange
>
0
)
{
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
patrolSpeed
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
patrolSpeed
);
}
}
...
...
@@ -37,7 +37,7 @@ public class ArcherIdle : StateMachineBehaviour
animator
.
SetTrigger
(
"TrackTrigger"
);
return
;
}
if
(
!
enemy
.
MovementLock
&&
patrolRange
>
0
)
if
(
patrolRange
>
0
)
{
float
span
=
animatorRoot
.
position
.
x
-
origin
.
x
;
...
...
@@ -46,8 +46,8 @@ public class ArcherIdle : StateMachineBehaviour
enemy
.
CliffTest
[(
enemy
.
MoveDir
+
1
)
/
2
]
)
{
enemy
.
ChangeDir_
noOption
(
enemy
.
MoveDir
*
-
1
);
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
patrolSpeed
);
enemy
.
ChangeDir_
movement
(
enemy
.
MoveDir
*
-
1
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
patrolSpeed
);
}
}
}
...
...
Assets/Scripts/Characters/Enemy/Animator State/ArcherTrack.cs
View file @
06ff808c
...
...
@@ -35,14 +35,14 @@ public class ArcherTrack : StateMachineBehaviour
attackRange
=
enemy
.
attackRange
;
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
)
{
enemy
.
ChangeVelocityX_
noOption
(
0.0f
);
enemy
.
ChangeVelocityX_
movement
(
0.0f
);
}
else
{
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
trackSpeed
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
trackSpeed
);
}
}
...
...
@@ -61,18 +61,18 @@ public class ArcherTrack : StateMachineBehaviour
int
integerDir
=
enemy
.
MoveDir
;
if
(
enemy
.
WallTest
[(
integerDir
+
1
)
/
2
]
||
enemy
.
CliffTest
[(
integerDir
+
1
)
/
2
])
{
enemy
.
ChangeVelocityX_
noOption
(
0.0f
);
enemy
.
ChangeVelocityX_
movement
(
0.0f
);
}
else
{
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
trackSpeed
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
trackSpeed
);
}
frameCounter
+=
1
;
if
(
frameCounter
>=
maxFrame
)
{
NumeratedDir
trackDir
=
(
animatorRoot
.
position
.
x
-
player
.
transform
.
position
.
x
>
0
)
?
NumeratedDir
.
Left
:
NumeratedDir
.
Right
;
enemy
.
ChangeDir_
noOption
(
trackDir
);
enemy
.
ChangeDir_
movement
(
trackDir
);
frameCounter
=
0
;
}
}
...
...
Assets/Scripts/Characters/Enemy/Animator State/EnemyAirIdle.cs
View file @
06ff808c
...
...
@@ -3,22 +3,13 @@ using System.Collections.Generic;
using
UnityEngine
;
public
class
EnemyAirIdle
:
StateMachineBehaviour
{
float
patrolRange
;
float
patrolSpeed
;
float
noticeRange
;
Vector2
origin
;
Transform
animatorRoot
;
EnemyAir
enemy
;
// 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
)
{
origin
=
animator
.
transform
.
position
;
animatorRoot
=
animator
.
transform
.
parent
;
enemy
=
animator
.
GetComponent
<
EnemyAir
>();
patrolRange
=
enemy
.
patrolRange
;
noticeRange
=
enemy
.
noticeRange
;
patrolSpeed
=
enemy
.
patrolSpeed
;
}
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
...
...
Assets/Scripts/Characters/Enemy/Animator State/EnemyAirTrack.cs
View file @
06ff808c
...
...
@@ -4,23 +4,20 @@ using UnityEngine;
public
class
EnemyAirTrack
:
StateMachineBehaviour
{
float
trackSpeed
;
float
trackRange
;
float
angle
;
GameObject
player
;
Transform
animatorRoot
;
EnemyAir
enemy
;
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
override
public
void
OnStateEnter
(
Animator
animator
,
AnimatorStateInfo
stateInfo
,
int
layerIndex
)
{
animatorRoot
=
animator
.
transform
.
parent
;
enemy
=
animator
.
GetComponent
<
EnemyAir
>();
player
=
GameManager
.
Instance
.
player
;
trackSpeed
=
enemy
.
trackSpeed
;
frameCount
=
0
;
direction
=
Vector2
.
up
;
SetDirection
();
}
...
...
@@ -30,14 +27,14 @@ public class EnemyAirTrack : StateMachineBehaviour {
{
animator
.
ResetTrigger
(
"TrackTrigger"
);
animator
.
SetTrigger
(
"IdleTrigger"
);
enemy
.
ChangeVelocityXY_
noOption
(
Vector2
.
zero
);
enemy
.
ChangeVelocityXY_
movement
(
Vector2
.
zero
);
return
;
}
SetDirection
();
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
...
...
@@ -57,8 +54,9 @@ public class EnemyAirTrack : StateMachineBehaviour {
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
;
enemy
.
ChangeAngleZ_
noOption
(
angle
-
90.0f
);
enemy
.
ChangeAngleZ_
movement
(
angle
-
90.0f
);
}
}
Assets/Scripts/Characters/Enemy/Animator State/EnemyMeleeIdle.cs
View file @
06ff808c
...
...
@@ -20,9 +20,9 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
noticeRange
=
enemy
.
noticeRange
;
patrolSpeed
=
enemy
.
patrolSpeed
;
enemy
.
ChangeDir_
noOption
(
NumeratedDir
.
Left
);
enemy
.
ChangeDir_
movement
(
NumeratedDir
.
Left
);
if
(
enemy
.
patrolRange
>
0
)
{
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
patrolSpeed
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
patrolSpeed
);
}
}
...
...
@@ -33,7 +33,7 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
animator
.
SetTrigger
(
"TrackTrigger"
);
return
;
}
if
(
!
enemy
.
MovementLock
&&
patrolRange
>
0
)
if
(
patrolRange
>
0
)
{
float
span
=
animatorRoot
.
position
.
x
-
origin
.
x
;
...
...
@@ -42,8 +42,8 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
enemy
.
CliffTest
[(
enemy
.
MoveDir
+
1
)
/
2
]
)
{
enemy
.
ChangeDir_
noOption
(
enemy
.
MoveDir
*
-
1
);
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
patrolSpeed
);
enemy
.
ChangeDir_
movement
(
enemy
.
MoveDir
*
-
1
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
patrolSpeed
);
}
}
}
...
...
Assets/Scripts/Characters/Enemy/Animator State/EnemyMeleeTrack.cs
View file @
06ff808c
...
...
@@ -22,14 +22,14 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
attackRange
=
enemy
.
attackRange
;
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
)
{
enemy
.
ChangeVelocityX_
noOption
(
0.0f
);
enemy
.
ChangeVelocityX_
movement
(
0.0f
);
}
else
{
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
trackSpeed
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
trackSpeed
);
}
}
...
...
@@ -43,18 +43,18 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
int
integerDir
=
enemy
.
MoveDir
;
if
(
enemy
.
WallTest
[(
integerDir
+
1
)
/
2
]
||
enemy
.
CliffTest
[(
integerDir
+
1
)
/
2
])
{
enemy
.
ChangeVelocityX_
noOption
(
0.0f
);
enemy
.
ChangeVelocityX_
movement
(
0.0f
);
}
else
{
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
trackSpeed
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
trackSpeed
);
}
frameCounter
+=
1
;
if
(
frameCounter
>=
maxFrame
)
{
NumeratedDir
trackDir
=
(
animatorRoot
.
position
.
x
-
player
.
transform
.
position
.
x
>
0
)
?
NumeratedDir
.
Left
:
NumeratedDir
.
Right
;
enemy
.
ChangeDir_
noOption
(
trackDir
);
enemy
.
ChangeDir_
movement
(
trackDir
);
frameCounter
=
0
;
}
}
...
...
Assets/Scripts/Characters/Enemy/Animator State/Jollarcher2Track.cs
View file @
06ff808c
...
...
@@ -35,14 +35,14 @@ public class Jollarcher2Track : StateMachineBehaviour
attackRange
=
enemy
.
attackRange
;
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
)
{
enemy
.
ChangeVelocityX_
noOption
(
0.0f
);
enemy
.
ChangeVelocityX_
movement
(
0.0f
);
}
else
{
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
trackSpeed
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
trackSpeed
);
}
}
...
...
@@ -62,18 +62,18 @@ public class Jollarcher2Track : StateMachineBehaviour
int
integerDir
=
enemy
.
MoveDir
;
if
(
enemy
.
WallTest
[(
integerDir
+
1
)
/
2
]
||
enemy
.
CliffTest
[(
integerDir
+
1
)
/
2
])
{
enemy
.
ChangeVelocityX_
noOption
(
0.0f
);
enemy
.
ChangeVelocityX_
movement
(
0.0f
);
}
else
{
enemy
.
ChangeVelocityX_
noOption
(
enemy
.
MoveDir
*
trackSpeed
);
enemy
.
ChangeVelocityX_
movement
(
enemy
.
MoveDir
*
trackSpeed
);
}
frameCounter
+=
1
;
if
(
frameCounter
>=
maxFrame
)
{
NumeratedDir
trackDir
=
(
animatorRoot
.
position
.
x
-
player
.
transform
.
position
.
x
>
0
)
?
NumeratedDir
.
Left
:
NumeratedDir
.
Right
;
enemy
.
ChangeDir_
noOption
(
trackDir
);
enemy
.
ChangeDir_
movement
(
trackDir
);
frameCounter
=
0
;
}
}
...
...
Assets/Scripts/Characters/Enemy/DamageToPlayer.cs
View file @
06ff808c
...
...
@@ -17,20 +17,11 @@ public class DamageToPlayer : MonoBehaviour {
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
);
collision
.
gameObject
.
GetComponent
<
PlayerAttack
>().
TakeDamage
(
attack
);
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
;
}
}
}
Assets/Scripts/Characters/Enemy/Enemy.cs
View file @
06ff808c
...
...
@@ -27,7 +27,7 @@ public class Enemy : MonoBehaviour {
public
float
patrolSpeed
;
public
float
trackSpeed
;
public
float
[]
knockbackPercentage
;
public
float
c
urrHealth
{
get
;
protected
set
;
}
public
float
C
urrHealth
{
get
;
protected
set
;
}
// manager
protected
InventoryManager
inventoryManager
;
...
...
@@ -37,19 +37,14 @@ public class Enemy : MonoBehaviour {
// for movement
protected
Animator
animator
;
protected
float
stunnedAnimLength
;
public
bool
M
ovementLock
;
public
EnemyMovementLock
m
ovementLock
;
public
bool
Invisible
{
get
;
protected
set
;
}
public
bool
KnockbackLock
{
get
;
protected
set
;
}
public
float
PlayerDistance
{
get
;
protected
set
;
}
protected
virtual
IEnumerator
Knockback
(
float
knockbackDist
,
float
knockbackTime
)
{
yield
return
0
;
}
// drop item
private
int
[]
dropTable
;
// for bumping attack
public
bool
bumped
=
false
;
public
bool
bumpable
=
true
;
// method
// Standard method
protected
virtual
void
Awake
()
...
...
@@ -71,8 +66,9 @@ public class Enemy : MonoBehaviour {
protected
virtual
void
Start
()
{
currHealth
=
maxHealth
;
Invisible
=
MovementLock
=
KnockbackLock
=
false
;
CurrHealth
=
maxHealth
;
Invisible
=
false
;
movementLock
=
EnemyMovementLock
.
Free
;
if
(
enemyManager
.
DropTableByID
.
ContainsKey
(
monsterID
))
{
dropTable
=
enemyManager
.
DropTableByID
[
monsterID
];
}
PlayerDistance
=
Vector2
.
Distance
(
GameManager
.
Instance
.
player
.
transform
.
position
,
transform
.
parent
.
position
);
}
...
...
@@ -85,62 +81,41 @@ public class Enemy : MonoBehaviour {
// When damaged
// - Calculate value & Arrange information
public
virtual
void
Get
Damaged
(
PlayerAttackInfo
attack
)
public
virtual
void
Get
Hit
(
PlayerAttackInfo
attack
)
{
if
(
Invisible
)
{
return
;
}
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
);
TakeDamage
(
attack
.
damage
);
float
knockbackDist
=
attack
.
damage
*
attack
.
knockBackMultiplier
/
weight
;
float
knockbackTime
=
(
knockbackDist
>=
0.5f
)
?
0.5f
:
knockbackDist
;
if
(
MovementLock
)
// 넉백이 진행 중
if
(
movementLock
==
EnemyMovementLock
.
Rigid
)
// 넉백이 진행 중
{
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"
);
break
;
}
movementLock
=
EnemyMovementLock
.
Rigid
;
StartCoroutine
(
Knockback
(
knockbackDist
,
knockbackTime
));
}
DebuffApply
(
attack
.
debuffTime
);
animator
.
SetTrigger
(
"TrackTrigger"
);
}
public
void
GetDamaged
(
float
damage
)
public
void
TakeDamage
(
float
damage
)
{
if
(
Invisible
)
{
return
;
}
float
prevHealth
=
c
urrHealth
;
c
urrHealth
-=
damage
;
if
(
c
urrHealth
<=
0
)
float
prevHealth
=
C
urrHealth
;
C
urrHealth
-=
damage
;
if
(
C
urrHealth
<=
0
)
{
Invisible
=
true
;
animator
.
SetTrigger
(
"DeadTrigger"
);
StopCoroutine
(
"OnFire"
);
GetComponent
<
SpriteRenderer
>().
color
=
Color
.
white
;
MakeDead
();
return
;
}
float
currHealthPercentage
=
c
urrHealth
/
maxHealth
;
float
currHealthPercentage
=
C
urrHealth
/
maxHealth
;
float
prevHealthPercentage
=
prevHealth
/
maxHealth
;
foreach
(
float
percentage
in
knockbackPercentage
)
...
...
@@ -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
protected
void
DebuffApply
(
float
[]
debuffTime
)
{
...
...
@@ -180,11 +164,13 @@ public class Enemy : MonoBehaviour {
break
;
case
EnemyDebuffCase
.
Ice
:
debuffState
[
debuff
]
=
DebuffState
.
On
;
movementLock
=
EnemyMovementLock
.
Debuffed
;
StartCoroutine
(
OnIce
(
duration
));
break
;
case
EnemyDebuffCase
.
Stun
:
if
(
debuffState
[
debuff
]
!=
DebuffState
.
On
)
{
debuffState
[
debuff
]
=
DebuffState
.
On
;
movementLock
=
EnemyMovementLock
.
Debuffed
;
StartCoroutine
(
OnStun
(
duration
));
}
break
;
...
...
@@ -226,7 +212,7 @@ public class Enemy : MonoBehaviour {
foreach
(
Item
item
in
inventoryManager
.
itemList
)
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
);
}
debuffState
[(
int
)
EnemyDebuffCase
.
Fire
]
=
DebuffState
.
Off
;
...
...
@@ -248,12 +234,13 @@ public class Enemy : MonoBehaviour {
case
EnemyDebuffCase
.
Ice
:
GetComponent
<
SpriteRenderer
>().
color
=
Color
.
white
;
StopCoroutine
(
"OnIce"
);
KnockbackLock
=
fals
e
;
movementLock
=
EnemyMovementLock
.
Fre
e
;
animator
.
speed
=
1.0f
;
animator
.
SetTrigger
(
"DisableStunTrigger"
);
break
;
case
EnemyDebuffCase
.
Stun
:
StopCoroutine
(
"OnStun"
);
movementLock
=
EnemyMovementLock
.
Free
;
animator
.
speed
=
1.0f
;
animator
.
SetTrigger
(
"DisableStunTrigger"
);
break
;
...
...
@@ -270,10 +257,11 @@ public class Enemy : MonoBehaviour {
if
(
transform
.
parent
.
GetComponentInChildren
<
HPBar
>())
transform
.
parent
.
GetComponentInChildren
<
HPBar
>().
Inactivate
();
transform
.
parent
.
gameObject
.
SetActive
(
false
);
transform
.
parent
.
SetParent
(
null
);
StopAllCoroutines
();
enemyManager
.
EnemyDeadCount
++;
// 다른 enemy로 인해 소환되는 enemy가 추가될 경우 여기를 건드려야 함
enemyManager
.
EnemyDeadCount
++;
c
urrHealth
=
maxHealth
;
C
urrHealth
=
maxHealth
;
Invisible
=
false
;
// Drop 아이템 결정. 인덱스 별 아이템은 맨 밑에 서술
if
(
dropTable
==
null
)
{
return
;
}
...
...
Assets/Scripts/Characters/Enemy/EnemyAir.cs
View file @
06ff808c
...
...
@@ -3,103 +3,99 @@ using System.Collections.Generic;
using
UnityEngine
;
public
class
EnemyAir
:
Enemy
{
// for bumping attack
public
bool
bumped
=
false
;
public
bool
prevBumped
=
false
;
protected
override
void
Start
()
{
base
.
Start
();
StartCoroutine
(
BumpCheck
())
;
prevBumped
=
bumped
;
}
protected
override
void
FixedUpdate
()
{
base
.
FixedUpdate
();
if
(
bumpable
)
{
MovementLock
=
false
;
}
else
if
(
prevBumped
!=
bumped
&&
bumped
&&
movementLock
==
EnemyMovementLock
.
Free
)
{
ChangeVelocityXY_zero
(
);
MovementLock
=
true
;
StartCoroutine
(
Knockback
(
0.0f
,
2.0f
)
);
StartCoroutine
(
RecoverBump
())
;
}
prevBumped
=
bumped
;
}
public
void
Change
AngleZ_noOption
(
float
val
)
public
void
Change
VelocityXY_zero
()
// 망할 유니티 애니메이션 이벤트 Vec2를 parameter로 받는 함수를 못집어넣음
{
Change
AngleZ
(
val
,
new
bool
[]
{
MovementLock
,
KnockbackLock
}
);
Change
VelocityXY_movement
(
Vector2
.
zero
);
}
public
void
Change
VelocityXY_zero
()
// 망할 유니티 애니메이션 이벤트 Vec2를 parameter로 받는 함수를 못집어넣음
public
void
Change
AngleZ_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
;
tempAngle
.
z
=
val
;
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
;
tempVelocity
.
x
=
val
.
x
;
tempVelocity
.
y
=
val
.
y
;
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
)
{
GetComponent
<
SpriteRenderer
>().
color
=
new
Color
(
0.5f
,
0.5f
,
1f
);
ChangeVelocityXY
(
Vector2
.
zero
,
new
bool
[]
{
});
KnockbackLock
=
true
;
bumped
=
true
;
animator
.
SetTrigger
(
"StunnedTrigger"
);
animator
.
speed
=
stunnedAnimLength
/
duration
;
yield
return
new
WaitForSeconds
(
duration
);
bumped
=
false
;
OffDebuff
(
EnemyDebuffCase
.
Ice
);
}
protected
override
IEnumerator
OnStun
(
float
duration
)
{
ChangeVelocityXY
(
Vector2
.
zero
,
new
bool
[]
{
})
;
bumped
=
true
;
animator
.
SetTrigger
(
"StunnedTrigger"
);
animator
.
speed
=
stunnedAnimLength
/
duration
;
yield
return
new
WaitForSeconds
(
duration
);
OffDebuff
(
EnemyDebuffCase
.
Stun
);
bumped
=
false
;
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
-
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
()
IEnumerator
RecoverBump
()
{
while
(
true
)
{
if
(!
bumpable
)
{
bumpable
=
true
;
}
yield
return
new
WaitForSeconds
(
1.0f
);
}
yield
return
new
WaitForSeconds
(
2.0f
);
bumped
=
false
;
}
}
Assets/Scripts/Characters/Enemy/EnemyGround.cs
View file @
06ff808c
...
...
@@ -6,10 +6,9 @@ using System;
public
class
EnemyGround
:
Enemy
{
public
float
attackRange
;
public
int
MoveDir
{
get
;
private
set
;
}
public
bool
[]
WallTest
{
get
;
private
set
;
}
public
bool
[]
CliffTest
{
get
;
private
set
;
}
public
bool
[]
WallTest
;
public
bool
[]
CliffTest
;
protected
override
void
Awake
()
{
...
...
@@ -38,7 +37,6 @@ public class EnemyGround : Enemy {
// - Check whether enemy is near to cliff
private
void
CheckCliff
()
{
Vector2
velocity
=
transform
.
parent
.
GetComponent
<
Rigidbody2D
>().
velocity
;
Vector2
colliderSize
=
transform
.
parent
.
GetComponent
<
BoxCollider2D
>().
size
;
foreach
(
int
Dir
in
Enum
.
GetValues
(
typeof
(
NumeratedDir
)))
...
...
@@ -46,8 +44,7 @@ public class EnemyGround : Enemy {
Vector2
origin
=
(
Vector2
)
transform
.
parent
.
position
+
Dir
*
new
Vector2
(
colliderSize
.
x
/
2.0f
,
0
);
Vector2
direction
=
Vector2
.
down
;
float
distance
=
colliderSize
.
y
/
4.0f
;
int
layerMask
=
LayerMask
.
NameToLayer
(
"platform"
);
RaycastHit2D
hit
=
Physics2D
.
Raycast
(
origin
,
direction
,
distance
,
layerMask
);
RaycastHit2D
hit
=
Physics2D
.
Raycast
(
origin
,
direction
,
distance
,
enemyManager
.
layerMaskPlatform
);
CliffTest
[(
Dir
+
1
)
/
2
]
=
(
hit
.
collider
==
null
);
}
...
...
@@ -60,11 +57,10 @@ public class EnemyGround : Enemy {
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
;
float
distance
=
0.5f
;
LayerMask
layerMask
=
LayerMask
.
GetMask
(
"Wall"
,
"OuterWall"
);
RaycastHit2D
hit
=
Physics2D
.
Raycast
(
origin
,
direction
,
distance
,
layerMask
);
float
distance
=
0.2f
;
RaycastHit2D
hit
=
Physics2D
.
Raycast
(
origin
,
direction
,
distance
,
enemyManager
.
layerMaskWall
);
WallTest
[(
Dir
+
1
)
/
2
]
=
(
hit
.
collider
!=
null
);
}
...
...
@@ -72,73 +68,74 @@ public class EnemyGround : 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
;
tempVelocity
.
x
=
val
;
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
;
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
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
;
float
knockbackVelocity
=
knockbackDir
*
knockbackDist
/
knockbackTime
;
ChangeDir
(
knockbackDir
*
-
1
,
new
bool
[]
{
MovementLock
,
KnockbackLock
}
);
ChangeVelocityX
(
knockbackVelocity
,
lockArray
);
//ChangeDir(knockbackDir * -1
);
ChangeVelocityX
(
knockbackVelocity
);
for
(
float
timer
=
0
;
timer
<=
knockbackTime
;
timer
+=
Time
.
deltaTime
)
{
if
(
CliffTest
[(
knockbackDir
+
1
)
/
2
])
{
ChangeVelocityX
(
0.0f
,
lockArray
);
ChangeVelocityX
(
0.0f
);
yield
return
new
WaitForSeconds
(
knockbackTime
-
timer
);
break
;
}
yield
return
new
WaitForFixedUpdate
();
}
MovementLock
=
false
;
ChangeVelocityX
(
0.0f
,
new
bool
[]
{
MovementLock
,
KnockbackLock
})
;
ChangeVelocityX
(
0.0f
)
;
if
(
movementLock
!=
EnemyMovementLock
.
Debuffed
)
movementLock
=
EnemyMovementLock
.
Free
;
}
protected
override
IEnumerator
OnIce
(
float
duration
)
{
GetComponent
<
SpriteRenderer
>().
color
=
new
Color
(
0.5f
,
0.5f
,
1f
);
ChangeVelocityX
(
0.0f
,
new
bool
[]
{
});
KnockbackLock
=
true
;
animator
.
SetTrigger
(
"StunnedTrigger"
);
animator
.
speed
=
stunnedAnimLength
/
duration
;
yield
return
new
WaitForSeconds
(
duration
);
OffDebuff
(
EnemyDebuffCase
.
Ice
);
OffDebuff
(
EnemyDebuffCase
.
Ice
);
}
protected
override
IEnumerator
OnStun
(
float
duration
)
{
ChangeVelocityX
(
0.0f
,
new
bool
[]
{
});
animator
.
SetTrigger
(
"StunnedTrigger"
);
yield
return
new
WaitUntil
(()
=>
animator
.
GetCurrentAnimatorStateInfo
(
0
).
IsName
(
"Stunned"
));
animator
.
speed
=
stunnedAnimLength
/
duration
;
yield
return
new
WaitForSeconds
(
duration
);
OffDebuff
(
EnemyDebuffCase
.
Stun
);
yield
return
null
;
}
}
Assets/Scripts/Characters/Enemy/Scarecrow.cs
View file @
06ff808c
...
...
@@ -5,17 +5,17 @@ using UnityEngine;
public
class
Scarecrow
:
Enemy
{
public
bool
neverDie
;
public
override
void
Get
Damaged
(
PlayerAttackInfo
attack
)
public
override
void
Get
Hit
(
PlayerAttackInfo
attack
)
{
if
(
Invisible
)
{
return
;
}
float
prevHealth
=
c
urrHealth
;
c
urrHealth
-=
attack
.
damage
;
float
prevHealth
=
C
urrHealth
;
C
urrHealth
-=
attack
.
damage
;
if
(
c
urrHealth
<=
0
)
if
(
C
urrHealth
<=
0
)
{
if
(
neverDie
)
{
c
urrHealth
=
maxHealth
;
C
urrHealth
=
maxHealth
;
}
else
{
...
...
Assets/Scripts/EnemyManager.cs
View file @
06ff808c
...
...
@@ -33,6 +33,9 @@ public class EnemyManager : Singleton<EnemyManager>
private
uint
EnemySpawnCount
;
public
uint
EnemyDeadCount
;
// wall or platform
public
LayerMask
layerMaskWall
;
public
LayerMask
layerMaskPlatform
;
// method
// Constructor - protect calling raw constructor
...
...
@@ -62,25 +65,7 @@ public class EnemyManager : Singleton<EnemyManager>
{
GameObject
clone
=
PickFromPool
(
enemy
);
clone
.
transform
.
position
=
location
.
position
;
clone
.
transform
.
SetParent
(
MapManager
.
currentRoom
.
roomInGame
.
transform
);
}
}
}
// Spawn Enemy to Map
public
void
SpawnEnemyToMap_forTest
()
{
EnemySpawnCount
=
EnemyDeadCount
=
0
;
Transform
enemySpots
=
GameObject
.
Find
(
"Grid"
).
transform
.
GetChild
(
0
).
GetChild
(
0
).
Find
(
"enemy spot"
);
foreach
(
Transform
enemySpot
in
enemySpots
)
{
if
(!
enemySpot
.
gameObject
.
activeSelf
)
continue
;
GameObject
enemy
=
enemySpot
.
gameObject
.
GetComponent
<
enemySpot
>().
enemyPrefab
;
foreach
(
Transform
location
in
enemySpot
)
{
GameObject
clone
=
PickFromPool
(
enemy
);
clone
.
transform
.
position
=
location
.
position
;
clone
.
transform
.
SetParent
(
MapManager
.
currentRoom
.
roomInGame
.
transform
);
clone
.
transform
.
SetParent
(
MapManager
.
currentRoom
.
transform
);
}
}
}
...
...
Assets/Scripts/Enumerators.cs
View file @
06ff808c
...
...
@@ -21,6 +21,13 @@ public enum NumeratedDir
Right
=
1
};
public
enum
EnemyMovementLock
{
Free
,
Rigid
,
Debuffed
};
public
enum
PlayerDebuffCase
{
...
...
Assets/Scripts/HPBar.cs
View file @
06ff808c
...
...
@@ -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
.
position
=
transform
.
parent
.
position
+
new
Vector3
(
0
,
yOffset
,
0
);
float
cur
=
Mathf
.
Max
(
0
,
transform
.
parent
.
GetComponentInChildren
<
Enemy
>().
c
urrHealth
/
transform
.
parent
.
GetComponentInChildren
<
Enemy
>().
maxHealth
);
float
cur
=
Mathf
.
Max
(
0
,
transform
.
parent
.
GetComponentInChildren
<
Enemy
>().
C
urrHealth
/
transform
.
parent
.
GetComponentInChildren
<
Enemy
>().
maxHealth
);
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
.
position
=
transform
.
parent
.
position
+
new
Vector3
((
width
-
height
*
0.2f
)
/
-
2f
,
yOffset
,
0
);
...
...
Assets/Scripts/Item/Addons/Gluttony.cs
View file @
06ff808c
...
...
@@ -22,7 +22,7 @@ public class Gluttony : Addon
}
public
override
void
OtherEffect
(
PlayerAttackInfo
attackInfo
,
Enemy
enemyInfo
,
string
combo
)
{
if
(
attackInfo
.
damage
>=
enemyInfo
.
c
urrHealth
)
if
(
attackInfo
.
damage
>=
enemyInfo
.
C
urrHealth
)
{
lifeStoneManager
.
FillLifeStone
(
1
,
LifeStoneType
.
Normal
);
}
...
...
Assets/Scripts/Item/Addons/JanusCoin.cs
View file @
06ff808c
...
...
@@ -26,7 +26,7 @@ public class JanusCoin : Addon
}
else
{
return
enemyInfo
.
c
urrHealth
*
0.25f
;
return
enemyInfo
.
C
urrHealth
*
0.25f
;
}
}
}
\ No newline at end of file
Assets/Scripts/Item/Items/ShockStick.cs
View file @
06ff808c
...
...
@@ -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
});
AttackCalculation
(
attack
,
enemy
,
combo
[
1
]);
enemy
.
Get
Damaged
(
attack
);
enemy
.
Get
Hit
(
attack
);
EffectManager
.
Instance
.
StartEffect
(
0
,
enemy
.
gameObject
.
transform
.
position
);
EffectManager
.
Instance
.
StartNumber
(
1
,
enemy
.
gameObject
.
transform
.
position
,
attack
.
damage
);
}
...
...
Assets/Scripts/TetrisMap/Test.cs
View file @
06ff808c
...
...
@@ -57,7 +57,7 @@ public class Test : MonoBehaviour {
}
public
void
SummonEnemy
()
{
EnemyManager
.
Instance
.
SpawnEnemyToMap
_forTest
();
EnemyManager
.
Instance
.
SpawnEnemyToMap
();
}
...
...
ProjectSettings/Physics2DSettings.asset
View file @
06ff808c
...
...
@@ -52,4 +52,4 @@ Physics2DSettings:
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_ColliderAABBColor
:
{
r
:
1
,
g
:
1
,
b
:
0
,
a
:
0.2509804
}
m_LayerCollisionMatrix
:
fedf
fefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9ff6ffffdffffffffffffffedff6ffffffffffffffffffffdff6ffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
m_LayerCollisionMatrix
:
fedf
eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffe9fe6ffffdffffffffffffffedfe6ffffffffffffffffffffdfe6fffed7f6
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ProjectSettings/TagManager.asset
View file @
06ff808c
...
...
@@ -32,7 +32,7 @@ TagManager:
-
EnemyTrigger
-
EnemyAttack
-
Player
-
-
EnemyColliderAir
-
-
-
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment