feat: SongCreator 씬 완성 — Beat Sage URL 지원, info.dat 메타데이터 자동 추출

- BeatSageUploader: audio_url 지원(UploadFromUrl), PollAndDownload 공통화, ZIP 500 오류 3회 재시도
- BeatSageConverter: info.dat 파싱(SongMetadata), BPM 자동 감지 → 노트 타이밍 변환에 적용
- SongCreatorManager: title/BPM 필수 입력 제거, 난이도 4개 자동 선택, GenerateFlowFromUrl 버그 수정
- NasPublisher: audioPath null 허용(URL 흐름에서 로컬 파일 없는 경우 스킵)
- .gitignore/.gitattributes 초기 설정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-21 23:37:34 +09:00
commit 4dad9e5d5b
1068 changed files with 175146 additions and 0 deletions
@@ -0,0 +1,56 @@
using UnityEngine;
namespace DamageSystem
{
/// <summary>
/// This component report all limb damage to the the AI
/// </summary>
public class DamageableLimb : Damageable
{
[SerializeField] private float damageMultiplier = 1.0f;
private DamageableManager owner = null;
//public Rigidbody RB { get { return rb; } }
public DamageableManager Owner { get { return owner; } }
public void SetOwner(DamageableManager owner)
{
this.owner = owner;
}
public override void DoDamage(DamageInfo info)
{
info.dmg *= damageMultiplier;
//owner.DoDamage(info, this);
}
private void ProcessHit(Rigidbody rb)
{
DamageInfo info = new DamageInfo();
info.damageType = DamageType.Physical;
info.hitDir = rb.linearVelocity.normalized;
info.dmg = rb.linearVelocity.magnitude * damageMultiplier;
info.hitForce = rb.linearVelocity.magnitude;
DoDamage(info);
}
private void OnCollisionEnter(Collision other)
{
//in this way we can respond to hits from objects and apply damage,
//like the player throwing a box to a enemy
if (other.rigidbody != null)
{
ProcessHit( other.rigidbody );
}
}
}
}