This commit is contained in:
CortexCore 2023-12-17 02:03:13 +08:00
parent 961ae8feb4
commit 11a8104c75
6 changed files with 79 additions and 56 deletions

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7a686a47eee2fa44cb0a34b5d86e4d5e, type: 3}
m_Name: AI_Shooter
m_EditorClassIdentifier:
_serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"_position":{"x":544.9802,"y":125.6692},"$type":"NodeCanvas.BehaviourTrees.Sequencer","$id":"0"},{"_action":{"sensor":{"_name":"Sensor","_targetVariableID":"d648241e-321f-48dd-a4e3-d661ee461283"},"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"$type":"BITKit.NodeCanvas.SmartTargetDetectionNode"},"_position":{"x":267.8417,"y":287.2277},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"1"},{"_condition":{"conditions":[{"variable":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"_invert":true,"$type":"NodeCanvas.Tasks.Conditions.CheckNull"},{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"$type":"BITKit.TargetIsAlive"}],"$type":"NodeCanvas.Framework.ConditionList"},"_position":{"x":550.1645,"y":275.5882},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"2"},{"_condition":{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"maxDistance":{"_value":64.0},"layerMask":{"_value":{"value":1}},"awarnessDistance":{"_value":1.0},"viewAngle":{"_value":70.0},"offset":{"y":1.0},"$type":"NodeCanvas.Tasks.Conditions.CanSeeTarget"},"_position":{"x":446.8694,"y":498.0947},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"3"},{"dynamic":true,"_position":{"x":478.9857,"y":729.4525},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"4"},{"_action":{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"repeat":{"_value":true},"$type":"BITKit.Node.LookTargetSmooth"},"_position":{"x":87.52032,"y":853.0034},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"5"},{"_condition":{"checkTarget":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"distance":{"_value":1.6},"$type":"NodeCanvas.Tasks.Conditions.CheckDistanceToGameObject"},"_position":{"x":324.6918,"y":862.5242},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"6"},{"_action":{"entity":{"_name":"Entity","_targetVariableID":"9c6ef538-dedf-4070-9feb-a71566e239b8"},"command":{"_value":"Melee"},"intParameter":{},"floatParameter":{},"stringParameter":{},"$type":"BITKit.InvokeEntityCommand"},"_position":{"x":238.2697,"y":986.7622},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"7"},{"_action":{"entity":{"_name":"Entity","_targetVariableID":"9c6ef538-dedf-4070-9feb-a71566e239b8"},"command":{"_value":"Fire"},"intParameter":{},"floatParameter":{},"stringParameter":{},"$type":"BITKit.InvokeEntityCommand"},"_position":{"x":428.3638,"y":987.4536},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"8"},{"_condition":{"checkTarget":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"distance":{"_value":6.0},"$type":"NodeCanvas.Tasks.Conditions.CheckDistanceToGameObject"},"_position":{"x":676.3502,"y":851.4033},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"9"},{"dynamic":true,"_position":{"x":583.298,"y":1056.772},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"10"},{"_condition":{"probability":{"_value":0.16},"maxValue":{"_value":1.0},"$type":"NodeCanvas.Tasks.Conditions.Probability"},"_position":{"x":458.5199,"y":1166.235},"$type":"NodeCanvas.BehaviourTrees.ConditionNode","$id":"11"},{"_action":{"speed":{"_name":"Aim
_serializedGraph: '{"type":"NodeCanvas.BehaviourTrees.BehaviourTree","nodes":[{"dynamic":true,"_position":{"x":544.9802,"y":125.6692},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"0"},{"_action":{"sensor":{"_name":"Sensor","_targetVariableID":"d648241e-321f-48dd-a4e3-d661ee461283"},"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"$type":"BITKit.NodeCanvas.SmartTargetDetectionNode"},"_position":{"x":267.8417,"y":287.2277},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"1"},{"_condition":{"conditions":[{"variable":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"_invert":true,"$type":"NodeCanvas.Tasks.Conditions.CheckNull"},{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"$type":"BITKit.TargetIsAlive"}],"$type":"NodeCanvas.Framework.ConditionList"},"_position":{"x":550.1645,"y":275.5882},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"2"},{"_condition":{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"maxDistance":{"_value":64.0},"layerMask":{"_value":{"value":1}},"awarnessDistance":{"_value":1.0},"viewAngle":{"_value":70.0},"offset":{"y":1.0},"$type":"NodeCanvas.Tasks.Conditions.CanSeeTarget"},"_position":{"x":446.8694,"y":498.0947},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"3"},{"dynamic":true,"_position":{"x":478.9857,"y":729.4525},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"4"},{"_action":{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"repeat":{},"$type":"BITKit.Node.LookTargetSmooth"},"_position":{"x":87.52032,"y":853.0034},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"5"},{"_condition":{"checkTarget":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"distance":{"_value":1.6},"$type":"NodeCanvas.Tasks.Conditions.CheckDistanceToGameObject"},"_position":{"x":324.6918,"y":862.5242},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"6"},{"_action":{"entity":{"_name":"Entity","_targetVariableID":"9c6ef538-dedf-4070-9feb-a71566e239b8"},"command":{"_value":"Melee"},"intParameter":{},"floatParameter":{},"stringParameter":{},"$type":"BITKit.InvokeEntityCommand"},"_position":{"x":238.2697,"y":986.7622},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"7"},{"_action":{"entity":{"_name":"Entity","_targetVariableID":"9c6ef538-dedf-4070-9feb-a71566e239b8"},"command":{"_value":"Fire"},"intParameter":{},"floatParameter":{},"stringParameter":{},"$type":"BITKit.InvokeEntityCommand"},"_position":{"x":428.3638,"y":987.4536},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"8"},{"_condition":{"checkTarget":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"distance":{"_value":6.0},"$type":"NodeCanvas.Tasks.Conditions.CheckDistanceToGameObject"},"_position":{"x":676.3502,"y":851.4033},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"9"},{"dynamic":true,"_position":{"x":583.298,"y":1056.772},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"10"},{"_condition":{"probability":{"_value":0.16},"maxValue":{"_value":1.0},"$type":"NodeCanvas.Tasks.Conditions.Probability"},"_position":{"x":458.5199,"y":1166.235},"$type":"NodeCanvas.BehaviourTrees.ConditionNode","$id":"11"},{"_action":{"speed":{"_name":"Aim
Move Speed","_targetVariableID":"85ddc77d-9e68-4489-bd7d-e9cb23661f86"},"keepDistance":{"_value":0.1},"minWanderDistance":{"_value":0.64},"maxWanderDistance":{"_value":1.0},"$type":"NodeCanvas.Tasks.Actions.Wander"},"_position":{"x":615.5132,"y":1169.973},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"12"},{"dynamic":true,"_position":{"x":810.8378,"y":1050.127},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"13"},{"_action":{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"speed":{"_name":"Basic
Move Speed","_targetVariableID":"efcf1d0b-020c-4c56-af5e-2ae04d2bbf29"},"fledDistance":{"_value":6.0},"lookAhead":{"_value":6.0},"$type":"NodeCanvas.Tasks.Actions.Flee"},"_position":{"x":792.3795,"y":1173.204},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"14"},{"dynamic":true,"_position":{"x":1072.855,"y":796.6577},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"15"},{"_condition":{"targetPosition":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"savePathAs":{"_name":""},"$type":"NodeCanvas.Tasks.Conditions.PathExists"},"_position":{"x":1176.26,"y":893.3289},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"16"},{"_position":{"x":1103.0,"y":1006.667},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"17"},{"_condition":{"LOSTarget":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"layerMask":{"_value":{"value":1}},"offset":{"y":1.0},"saveDistanceAs":{"_name":""},"$type":"NodeCanvas.Tasks.Conditions.CheckLOS"},"_position":{"x":1189.0,"y":1100.667},"$type":"NodeCanvas.BehaviourTrees.BinarySelector","$id":"18"},{"dynamic":true,"_position":{"x":1077.894,"y":1254.667},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"19"},{"_action":{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"speed":{"_name":"Basic
Move Speed","_targetVariableID":"efcf1d0b-020c-4c56-af5e-2ae04d2bbf29"},"keepDistance":{"_value":4.0},"waitUntilFinish":{},"$type":"NodeCanvas.Tasks.Actions.MoveToGameObject"},"_position":{"x":982.2366,"y":1440.21},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"20"},{"_action":{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"repeat":{},"$type":"BITKit.Node.LookTargetSmooth"},"_position":{"x":1139.833,"y":1440.344},"$type":"NodeCanvas.BehaviourTrees.ActionNode","$id":"21"},{"dynamic":true,"_position":{"x":1339.577,"y":1254.394},"$type":"NodeCanvas.BehaviourTrees.Parallel","$id":"22"},{"_action":{"target":{"_name":"Target","_targetVariableID":"7e434d61-d448-41a6-91d9-50c35408f293"},"speed":{"_name":"Basic
@ -23,7 +23,7 @@ MonoBehaviour:
_version: 3.29
_category:
_comments:
_translation: {x: -222, y: -720}
_zoomFactor: 0.6848334
_translation: {x: 73, y: -441}
_zoomFactor: 0.6300746
_haltSerialization: 0
_externalSerializationFile: {fileID: 0}

View File

@ -233,6 +233,7 @@ namespace BITKit.Entities
{
public IOptional<float> Zoom { get; } = new Optional<float>(){Value = 1};
public float Stable { get; set; }
public float Aim { get; set; }
public bool AllowAttack { get; set; }
public bool AllowScope { get; set; }
@ -331,14 +332,14 @@ namespace BITKit.Entities
if (virtualCamera is not null)
{
virtualCamera.m_Lens.FieldOfView =
var targetFov =
Mathf.Lerp(
virtualCamera.m_Lens.FieldOfView,
Zoom.Allow ?
Mathf.Rad2Deg * CalcZoomFOV(Mathf.Deg2Rad * 60f, Zoom.Value) : PlayerConfig.Singleton.Fov,
16*deltaTime
);
virtualCamera.m_Lens.FieldOfView = Mathf.Lerp(PlayerConfig.Singleton.Fov, targetFov, Aim);
float CalcZoomFOV(float baseFOV, float zoom)
{

View File

@ -407,6 +407,7 @@ namespace BITFALL.Guns
_equipService.Zoom.Allow = CurrentState is Aim;
_equipService.Zoom.Value =Mathf.Lerp(1,_gun.InitialAimZoom, _aim);
_equipService.AllowScope = _aim > 0.5f && _gun.IsScopeAim;
_equipService.Aim = _aim;
if (breathingAdditive.Allow)

View File

@ -15,20 +15,20 @@ namespace BITFALL.Rig{
public class TickOverrideTranformService : MonoBehaviour
{
//[BurstCompile]
public struct CopyTransformJob : IJobParallelForTransform
{
[Unity.Collections.ReadOnly]
public NativeArray<float3> positions;
[Unity.Collections.ReadOnly]
public NativeArray<quaternion> rotations;
// The code actually running on the job
public void Execute(int index, TransformAccess transform)
{
transform.SetPositionAndRotation(positions[index],rotations[index]);
}
}
// public struct CopyTransformJob : IJobParallelForTransform
// {
// [Unity.Collections.ReadOnly]
// public NativeArray<float3> positions;
// [Unity.Collections.ReadOnly]
// public NativeArray<quaternion> rotations;
//
//
// // The code actually running on the job
// public void Execute(int index, TransformAccess transform)
// {
// transform.SetPositionAndRotation(positions[index],rotations[index]);
// }
// }
public static void Register(int id,TickOverrideTransform tickOverrideTransform)
{
Dictionary.Add(id,tickOverrideTransform);
@ -47,11 +47,11 @@ namespace BITFALL.Rig{
[SerializeReference, SubclassSelector] private ITicker ticker;
private TransformAccessArray m_AccessArray;
private NativeArray<quaternion> _rotations;
private NativeArray<float3> _positions;
private JobHandle _jobHandle;
private InitializationState _initializationState;
// private TransformAccessArray m_AccessArray;
// private NativeArray<quaternion> _rotations;
// private NativeArray<float3> _positions;
// private JobHandle _jobHandle;
// private InitializationState _initializationState;
private void OnEnable()
{
ticker.Add(Tick);
@ -60,27 +60,40 @@ namespace BITFALL.Rig{
{
ticker.Remove(Tick);
}
// private void OnDestroy()
// {
// if (_initializationState is not InitializationState.Initializing) return;
// _jobHandle.Complete();
// _rotations.Dispose();
// _positions.Dispose();
// }
private void Tick(float obj)
{
switch (_initializationState)
{
case InitializationState.Initializing when _jobHandle.IsCompleted:
_jobHandle.Complete();
_rotations.Dispose();
_positions.Dispose();
_initializationState = InitializationState.Initialized;
break;
case InitializationState.None:
break;
default:
return;
}
// switch (_initializationState)
// {
// case InitializationState.Initializing when _jobHandle.IsCompleted:
// _jobHandle.Complete();
// _rotations.Dispose();
// _positions.Dispose();
// _initializationState = InitializationState.Initialized;
// break;
// case InitializationState.None:
// break;
// default:
// return;
// }
if (IsDirty)
{
var newLength = Dictionary.Count;
Sources = new Transform[newLength];
Targets = new Transform[newLength];
//_positions = new NativeArray<float3>(newLength, Allocator.Persistent);
//_rotations = new NativeArray<quaternion>(newLength, Allocator.Persistent);
var index = 0;
foreach (var x in Dictionary.Values)
{
@ -94,27 +107,34 @@ namespace BITFALL.Rig{
if(length is 0) return;
m_AccessArray = new TransformAccessArray(length);
m_AccessArray.SetTransforms(Sources);
// m_AccessArray = new TransformAccessArray(length);
// m_AccessArray.SetTransforms(Sources);
_positions = new NativeArray<float3>(length, Allocator.Persistent);
_rotations = new NativeArray<quaternion>(length, Allocator.Persistent);
var i = 0;
foreach (var x in Targets)
for (var j = 0; j < length; j++)
{
_positions[i] = x.position;
_rotations[i] = x.rotation;
i++;
Sources[j].SetPositionAndRotation(Targets[j].position,Targets[j].rotation);
}
var _job = new CopyTransformJob()
{
positions = _positions,
rotations = _rotations
};
_jobHandle = _job.Schedule(m_AccessArray);
_initializationState = InitializationState.Initializing;
// foreach (var x in Targets)
// {
// _positions[i] = x.position;
// _rotations[i] = x.rotation;
// i++;
// }
//
// foreach (var x in Sources)
// {
// x.position = _positions[i];
// x.rotation = _rotations[i];
// }
// var _job = new CopyTransformJob()
// {
// positions = _positions,
// rotations = _rotations
// };
// _jobHandle = _job.Schedule(m_AccessArray);
//
// _initializationState = InitializationState.Initializing;
}
}

View File

@ -7,6 +7,7 @@ namespace BITFALL.Player.Equip
{
IOptional<float> Zoom { get; }
float Stable { get; set; }
float Aim { get; set; }
bool AllowAttack { get; set; }
bool AllowScope { get; set; }
IValidHandle AllowEquip { get; }

View File

@ -42,8 +42,8 @@ namespace NodeCanvas.Tasks.Conditions
if ( Vector3.Distance(agent.position, t.position) <= awarnessDistance.value ) {
if ( Physics.Linecast(agent.position + offset, t.position + offset, out hit, layerMask.value) ) {
if ( hit.collider != t.GetComponent<Collider>() ) {
return false;
report = hit.collider.name;
return false;
}
}
report = "Good Vigil Direct Hit";
@ -80,7 +80,7 @@ namespace NodeCanvas.Tasks.Conditions
}
}
report = "Good Vigil";
report = "No Obstacle";
return true;
}