asset modified
This commit is contained in:
@@ -5,15 +5,22 @@ namespace BumpCombat.Defense
|
||||
[DisallowMultipleComponent]
|
||||
public sealed class DefenseSummonUnit : MonoBehaviour
|
||||
{
|
||||
private static Sprite[] idleFrames;
|
||||
private static Sprite[] attackFrames;
|
||||
private Sprite[] idleFrames;
|
||||
private Sprite[] attackFrames;
|
||||
private string idleKey;
|
||||
private string attackKey;
|
||||
private float spriteFrameTime;
|
||||
private int spriteFrame;
|
||||
private bool playingAttack;
|
||||
private bool isWalking;
|
||||
private string walkKey;
|
||||
private Sprite[] walkFrames;
|
||||
|
||||
private DefenseTower owner;
|
||||
private DefensePrototypeController controller;
|
||||
private Vector2 anchorLocalPosition;
|
||||
private SpriteRenderer spriteRenderer;
|
||||
private float attackCooldown;
|
||||
private float attackAnimationTime = -1f;
|
||||
|
||||
public void Configure(
|
||||
DefenseTower tower,
|
||||
@@ -24,22 +31,42 @@ namespace BumpCombat.Defense
|
||||
controller = prototypeController;
|
||||
anchorLocalPosition = localAnchor;
|
||||
spriteRenderer = gameObject.AddComponent<SpriteRenderer>();
|
||||
idleFrames ??= Resources.LoadAll<Sprite>("Tutorial/Swordsman_Idle");
|
||||
attackFrames ??= Resources.LoadAll<Sprite>("Tutorial/Swordsman_BumpAttack-v1");
|
||||
spriteRenderer.color = Color.white;
|
||||
spriteRenderer.sortingOrder = 11;
|
||||
RefreshArt();
|
||||
}
|
||||
|
||||
public void RefreshArt()
|
||||
{
|
||||
if (spriteRenderer == null || owner == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string family = owner.Tier == 4 && owner.Branch == DefenseTowerBranch.First
|
||||
? "GiantSlime"
|
||||
: owner.Tier == 4 && owner.Branch == DefenseTowerBranch.Second
|
||||
? "LavaSlime" : "Slime";
|
||||
idleKey = $"Summons/{family}/Idle";
|
||||
attackKey = $"Summons/{family}/Attack01";
|
||||
walkKey = $"Summons/{family}/Walk";
|
||||
idleFrames = DefenseTowerArt.Load(idleKey);
|
||||
attackFrames = DefenseTowerArt.Load(attackKey);
|
||||
walkFrames = DefenseTowerArt.Load(walkKey);
|
||||
spriteFrame = 0;
|
||||
spriteFrameTime = 0f;
|
||||
playingAttack = false;
|
||||
if (idleFrames.Length > 0)
|
||||
{
|
||||
spriteRenderer.sprite = idleFrames[0];
|
||||
}
|
||||
spriteRenderer.color = new Color32(255, 234, 137, 255);
|
||||
spriteRenderer.sortingOrder = 11;
|
||||
float scale = owner.Tier == 4 && owner.Branch == DefenseTowerBranch.First
|
||||
? 1.35f : 0.9f;
|
||||
float scale = family == "GiantSlime" ? 1.55f
|
||||
: family == "LavaSlime" ? 1.15f : 1.1f;
|
||||
transform.localScale = new Vector3(scale, scale, 1f);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
UpdateAttackSprite();
|
||||
UpdateSpriteAnimation();
|
||||
if (owner == null
|
||||
|| !owner.isActiveAndEnabled
|
||||
|| controller == null
|
||||
@@ -56,19 +83,20 @@ namespace BumpCombat.Defense
|
||||
DefenseTowerKind.Summon);
|
||||
if (target == null)
|
||||
{
|
||||
Vector2 previous = transform.position;
|
||||
transform.position = Vector2.MoveTowards(
|
||||
transform.position,
|
||||
anchor,
|
||||
controller.Tuning.SummonUnitMoveSpeed * Time.deltaTime);
|
||||
previous, anchor, controller.Tuning.SummonUnitMoveSpeed * Time.deltaTime);
|
||||
isWalking = ((Vector2)transform.position - previous).sqrMagnitude > 0.000001f;
|
||||
return;
|
||||
}
|
||||
|
||||
Vector2 targetPosition = target.transform.position;
|
||||
spriteRenderer.flipX = targetPosition.x < transform.position.x;
|
||||
Vector2 previousPosition = transform.position;
|
||||
transform.position = Vector2.MoveTowards(
|
||||
transform.position,
|
||||
targetPosition,
|
||||
previousPosition, targetPosition,
|
||||
controller.Tuning.SummonUnitMoveSpeed * Time.deltaTime);
|
||||
isWalking = ((Vector2)transform.position - previousPosition).sqrMagnitude > 0.000001f;
|
||||
float attackRange = controller.Tuning.SummonAttackRange
|
||||
* (owner.Tier == 4 && owner.Branch == DefenseTowerBranch.Second ? 2.5f : 1f);
|
||||
if (attackCooldown <= 0f
|
||||
@@ -86,34 +114,45 @@ namespace BumpCombat.Defense
|
||||
|
||||
private void PlayAttackSprite()
|
||||
{
|
||||
if (attackFrames.Length == 0)
|
||||
if (attackFrames == null || attackFrames.Length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
attackAnimationTime = 0f;
|
||||
playingAttack = true;
|
||||
spriteFrameTime = 0f;
|
||||
spriteFrame = 0;
|
||||
spriteRenderer.sprite = attackFrames[0];
|
||||
}
|
||||
|
||||
private void UpdateAttackSprite()
|
||||
private void UpdateSpriteAnimation()
|
||||
{
|
||||
if (attackAnimationTime < 0f || attackFrames == null
|
||||
|| attackFrames.Length == 0)
|
||||
Sprite[] frames = playingAttack ? attackFrames : isWalking ? walkFrames : idleFrames;
|
||||
string key = playingAttack ? attackKey : isWalking ? walkKey : idleKey;
|
||||
if (spriteRenderer == null || frames == null || frames.Length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
attackAnimationTime += Time.deltaTime;
|
||||
int frame = Mathf.FloorToInt(attackAnimationTime * 12f);
|
||||
if (frame >= attackFrames.Length)
|
||||
spriteFrameTime += Time.deltaTime;
|
||||
while (spriteFrameTime >= DefenseTowerArt.FrameSeconds(key, spriteFrame))
|
||||
{
|
||||
attackAnimationTime = -1f;
|
||||
if (idleFrames != null && idleFrames.Length > 0)
|
||||
spriteFrameTime -= DefenseTowerArt.FrameSeconds(key, spriteFrame);
|
||||
spriteFrame++;
|
||||
if (spriteFrame >= frames.Length)
|
||||
{
|
||||
spriteRenderer.sprite = idleFrames[0];
|
||||
if (playingAttack)
|
||||
{
|
||||
playingAttack = false;
|
||||
spriteFrame = 0;
|
||||
frames = idleFrames;
|
||||
key = idleKey;
|
||||
}
|
||||
else
|
||||
{
|
||||
spriteFrame = 0;
|
||||
}
|
||||
}
|
||||
return;
|
||||
spriteRenderer.sprite = frames[spriteFrame];
|
||||
}
|
||||
spriteRenderer.sprite = attackFrames[frame];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user