BITFALL/Assets/Artists/Scripts/Props/Prop_Throw.cs

60 lines
1.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BITKit;
using BITKit.Entities;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BITFALL.Props
{
public class Prop_Throw : MonoBehaviour
{
[SerializeField] private new Rigidbody rigidbody;
[SerializeField] private int damage;
[SerializeField] private int force;
[SerializeField] private LayerMask layerMask;
private void FixedUpdate()
{
if (Physics.Linecast(rigidbody.position, rigidbody.position + rigidbody.velocity * Time.fixedDeltaTime,
out var hit,
layerMask
))
{
var _rigidbody = hit.rigidbody;
if(hit.collider.transform.TryGetComponent<IDamagable>(out var damagable))
{
damagable.GiveDamage(new DamageMessage()
{
Target = damagable.UnityEntity,
Damage = damage,
Position = hit.point,
Rotation= Quaternion.LookRotation(hit.normal),
});
if(damagable.Rigidbody is not null)
{
_rigidbody = damagable.Rigidbody;
}
}
transform.position = hit.point;
if (_rigidbody)
{
_rigidbody.AddForceAtPositionAsync((hit.point-rigidbody.position).normalized * force, hit.point, ForceMode.Impulse).Forget();
}
rigidbody.Sleep();
if (hit.collider.TryGetComponent<ITag>(out var tags))
{
DI.Get<VFXService>().Spawn(hit,tags.GetTags());
}
if (TryGetComponent<Prop_ReplaceOnSleep>(out var replace))
{
replace.ReplaceImmediate(hit.collider.transform);
}
}
}
}
}