This commit is contained in:
CortexCore 2023-07-17 10:23:47 +08:00
parent 3a61f6677b
commit 936a94c84b
17 changed files with 161 additions and 47 deletions

View File

@ -4,7 +4,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
<PackageId>BITKit</PackageId>
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
@ -44,6 +44,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0-preview.4.23259.5" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="MySql.EntityFrameworkCore" Version="6.0.13" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.3-beta1" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.5" />

View File

@ -57,6 +57,8 @@ namespace BITKit.IO
}
zipFile.Dispose();
BIT4Log.Log<BITAssets>($"已创建Assets:\n{path}");
}
public static T ReadAs<T>(string path)

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5ae1e7f59a6a2c64db48d78763a6dfa3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
namespace BITKit
{
public interface IDoubleBuffer<T>
{
T Current { get; }
void Release(T newValue);
event Action<T> OnRelease;
bool TryGetRelease(out T result);
}
public class DoubleBuffer<T> : IDoubleBuffer<T>
{
public T Current
{
get;
// ReSharper disable once MemberCanBePrivate.Global
protected set;
}
public void Release(T newValue)
{
Current = newValue;
OnRelease?.Invoke(newValue);
}
public event Action<T> OnRelease;
private readonly Queue<T> _releases = new();
public bool TryGetRelease(out T result)
{
return _releases.TryDequeue(out result);
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: aa92f9c5ddad64741a2a86086b4fc977
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 088acda9508faea49be2d9f04eb1308e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
namespace BITKit
{
public interface ITextValidation
{
bool IsTextValid(string text, out string errorReason);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7b3c05c0c7e840340a827ea12e285666
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -56,6 +56,7 @@ namespace BITKit
public const string Internal = "Internal";
}
public const string Value = "Value";
public const string EmetyString = "";
public static Func<bool> True => () => true;
public static Func<bool> False => () => false;
public class EmetyClass { }

View File

@ -48,6 +48,11 @@ namespace BITKit.Animations
layerInfos.Add(new());
}
}
if (index > layerInfos.Count - 1)
{
throw new Exception("Index out of range");
}
return layerInfos[index];
}
}
@ -107,10 +112,9 @@ namespace BITKit.Animations
private void Update()
{
int index = 0;
foreach (var x in layerInfos)
for (var i = 0; i < animator.layerCount; i++)
{
x.currentState = animator.GetCurrentAnimatorStateInfo(index++);
this[i].currentState = animator.GetCurrentAnimatorStateInfo(i);
}
isMatchingTarget = animator.isMatchingTarget;
}

View File

@ -4,12 +4,15 @@ using UnityEngine;
using BITKit;
namespace BITKit.Entities
{
public class EntityHitbox : EntityComponent
public class EntityHitbox : EntityComponent,IDamagable
{
public IEntity Entity => entity;
public Rigidbody Rigidbody => m_rigidbody;
public void GiveDamage(DamageMessage message)
{
entity.Invoke(message);
}
public Rigidbody m_rigidbody;
}

View File

@ -4,9 +4,9 @@
"references": [
"GUID:a209c53514018594f9f482516f2a6781",
"GUID:274d4ecae4648e94c8b2cee7218378a0",
"GUID:66d2ae14764cc7d49aad4b16930747c0",
"GUID:14fe60d984bf9f84eac55c6ea033a8f4",
"GUID:9400d40641bab5b4a9702f65bf5c6eb5"
"GUID:9400d40641bab5b4a9702f65bf5c6eb5",
"GUID:d525ad6bd40672747bde77962f1c401e"
],
"includePlatforms": [],
"excludePlatforms": [],
@ -14,9 +14,7 @@
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [
"ODIN_INSPECTOR"
],
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -1,7 +1,7 @@
using System.Collections;
using System.Collections.Generic;
using AYellowpaper.SerializedCollections;
using UnityEngine;
using RotaryHeart.Lib.SerializableDictionary;
namespace BITKit.ObjectMaterial
{
[System.Serializable]
@ -16,29 +16,13 @@ namespace BITKit.ObjectMaterial
{
ObjectMaterialInfo GetObjectMaterial(string action = "None", Vector3 pos = default);
}
public class ObjectMaterialScriptableObject : BITKitSO
public class ObjectMaterialScriptableObject : ScriptableObject
{
[Header(Constant.Header.Settings)]
public new string name;
[Header(Constant.Header.Prefabs)]
public SerializableDictionaryBase<string, ObjectMaterialInfo> dictionary = new();
public override void RegisterAssets()
{
Data.Set<ObjectMaterialScriptableObject>(name, this);
dictionary.Values.ForEach(x =>
{
x.clips.ForEach(x =>
{
Data.Set<AudioSO>(x.name, x);
});
x.prefabs.ForEach(x=>
{
Data.Set<Transform>(x.name,x);
});
});
}
public ObjectMaterialInfo Get(string name)=>dictionary[name];
public SerializedDictionary<string, ObjectMaterialInfo> dictionary = new();
public ObjectMaterialInfo Get(string _name)=>dictionary[_name];
}
}

View File

@ -6,11 +6,11 @@ namespace BITKit
{
public static class PhysicsHelper
{
public static async void AddForceAtPositionAsync(this Rigidbody rigidbody, Vector3 force, Vector3 position)
public static async void AddForceAtPositionAsync(this Rigidbody rigidbody, Vector3 force, Vector3 position,ForceMode forceMode=ForceMode.Force)
{
await UniTask.DelayFrame(8);
if (rigidbody is not null)
rigidbody.AddForceAtPosition(force, position);
rigidbody.AddForceAtPosition(force, position,forceMode);
}
}
}

View File

@ -7,12 +7,16 @@ namespace BITKit
{
Rigidbody GetRigidbody();
Collider GetCollider();
float AddForceMultiple { get; }
}
public class PhysicsInfo : MonoBehaviour, IPhysicsInfo
{
[SerializeField] Rigidbody mRigidbody;
[SerializeField] Collider mCollider;
[SerializeField] private Rigidbody mRigidbody;
[SerializeField] private Collider mCollider;
[SerializeField] private float addForcemultiple;
public Rigidbody GetRigidbody() => mRigidbody;
public Collider GetCollider() => mCollider;
public float AddForceMultiple => addForcemultiple;
}
}

View File

@ -1,3 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@ -13,6 +14,7 @@ namespace BITKit.Sensors
public float radius;
public int fov;
public bool requireSight;
public bool autoUpdate;
[Header(Constant.Header.Settings)]
public LayerMask blockLayer;
[Header(Constant.Header.InternalVariables)]
@ -25,6 +27,14 @@ namespace BITKit.Sensors
Vector3 dir;
float maxDistance;
public override IEnumerable<Transform> Get() => detecteds;
private void Update()
{
if (autoUpdate)
{
Execute().Forget();
}
}
public override UniTask Execute()
{
if (frameUpdater)
@ -120,4 +130,7 @@ namespace BITKit.Sensors
return Vector3.Distance(collider.transform.position, transform.position) <= radius;
}
}
#if UNITY_EDITOR
#endif
}

View File

@ -28,25 +28,16 @@ namespace BITKit.Sensors
// ReSharper disable once FieldCanBeMadeReadOnly.Local
private List<Collider> detected = new();
private Queue<Collider> triggerEnterQueue=new();
private Queue<Collider> triggerExitQueue=new();
private readonly Queue<Collider> triggerEnterQueue=new();
private readonly Queue<Collider> triggerExitQueue=new();
private void OnTriggerEnter(Collider _collider)
{
triggerEnterQueue.Enqueue(_collider);
// if (IsValid(_collider) is false) return;
// if (detected.Contains(_collider)) return;
// detected.Add(_collider);
// onDetected.Invoke(_collider);
}
private void OnTriggerExit(Collider _collider)
{
triggerExitQueue.Enqueue(_collider);
// if (IsValid(_collider) is false) return;
// if (!detected.Remove(_collider)) return;
// onLost.Invoke(_collider);
}
private void OnCollisionEnter(Collision collision)
@ -102,7 +93,36 @@ namespace BITKit.Sensors
}
}
#if UNITY_EDITOR
[CustomEditor(typeof(TriggerSensor))]
[CustomEditor(typeof(Sensor),true)]
public class SensorInspector:BITInspector<Sensor>
{
private VisualElement detectedContainer;
public override VisualElement CreateInspectorGUI()
{
FillDefaultInspector();
detectedContainer = root.Create<VisualElement>();
return root;
}
protected override void OnUpdate()
{
if (detectedContainer is null) return;
detectedContainer.Clear();
foreach (var x in agent.Get())
{
ObjectField objectField = new()
{
objectType = x.GetType(),
value = x,
};
objectField.SetEnabled(false);
detectedContainer.Add(objectField);
}
}
}
[CustomEditor(typeof(TriggerSensor),true)]
public class TriggerSensorInspector:BITInspector<TriggerSensor>
{
private VisualElement detectedContainer;