58 lines
1.4 KiB
C#
58 lines
1.4 KiB
C#
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
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.Entity,
|
||
|
Damage = damage,
|
||
|
Location = new Location()
|
||
|
{
|
||
|
position = hit.point,
|
||
|
rotation = Quaternion.LookRotation(hit.normal),
|
||
|
forward = hit.normal,
|
||
|
}
|
||
|
});
|
||
|
if(damagable.Rigidbody is not null)
|
||
|
{
|
||
|
_rigidbody = damagable.Rigidbody;
|
||
|
}
|
||
|
}
|
||
|
if (_rigidbody)
|
||
|
{
|
||
|
_rigidbody.AddForceAtPositionAsync((hit.point-rigidbody.position).normalized * force, hit.point, ForceMode.Impulse).Forget();
|
||
|
}
|
||
|
rigidbody.Sleep();
|
||
|
|
||
|
if (TryGetComponent<Prop_ReplaceOnSleep>(out var replace))
|
||
|
{
|
||
|
replace.ReplaceImmediate(hit.collider.transform);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|