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(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(out var replace)) { replace.ReplaceImmediate(hit.collider.transform); } } } } }