asset modified

This commit is contained in:
2026-09-25 06:27:30 +09:00
parent 0aba40db2b
commit 84dd12414a
626 changed files with 86385 additions and 112 deletions
@@ -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];
}
}
}