From 0d6592a51d2cb967cf2463a65762a21aa77a2b94 Mon Sep 17 00:00:00 2001 From: da1kon Date: Fri, 15 Mar 2024 17:35:51 +0300 Subject: [PATCH] Complite chapter 11.5 --- data/FirstPersonShooter.world | 100 ++++++- .../FP_controller/components/Bullet.cs | 54 ++++ .../FP_controller/components/Bullet.cs.meta | 10 + .../components/EnemyFireController.cs | 61 +++++ .../components/EnemyFireController.cs.meta | 10 + .../FP_controller/components/EnemyLogic.cs | 243 ++++++++++++++++++ .../components/EnemyLogic.cs.meta | 10 + .../first_person_controller.node | 48 ++-- data/fps/bullet/bullet.node | 13 +- data/fps/robot/robot_enemy.node | 46 ++-- data/guids.db | 6 + 11 files changed, 552 insertions(+), 49 deletions(-) create mode 100644 data/csharp_template/FP_controller/components/Bullet.cs create mode 100644 data/csharp_template/FP_controller/components/Bullet.cs.meta create mode 100644 data/csharp_template/FP_controller/components/EnemyFireController.cs create mode 100644 data/csharp_template/FP_controller/components/EnemyFireController.cs.meta create mode 100644 data/csharp_template/FP_controller/components/EnemyLogic.cs create mode 100644 data/csharp_template/FP_controller/components/EnemyLogic.cs.meta diff --git a/data/FirstPersonShooter.world b/data/FirstPersonShooter.world index e305f0b..4b77c2c 100644 --- a/data/FirstPersonShooter.world +++ b/data/FirstPersonShooter.world @@ -2470,9 +2470,94 @@ 1 2.5243552e-29 0 0.0 -2.5243552e-29 1 -1.4210854e-14 0.0 -3.5873241e-43 1.4210855e-14 1 0.0 4.0681005 -1.2260934 5.4835181 1.0 - - guid://59e4bb833f8dab069c5b06ad189c382836a5bd67 - -0.99999982 -8.7422762e-08 0 0.0 8.7422769e-08 -0.99999988 0 0.0 0 0 0.99999976 0.0 8 11.499999 0.99999994 1.0 + + + + 0.300000012 + 1.14999998 + + + + + 1 + 2 + 1303834765 + 0.100000001 + 100000 + + + + 1303834765 + 036d975119765037c8ffff946a805cb6d3ccf640 + 1277251179 + 89f9e2eb8cec4e8579167ee622b67d8f601db972 + + + guid://8c628a2a1e96b3815d3476ec7c87055be14f7afe + guid://dda131848d3d0f13356549567731f0bdb2587af8 + + + -0.99999982 -8.7422492e-08 0 0.0 8.7422762e-08 -0.99999982 0 0.0 0 0 0.9999997 0.0 8 11.499999 0.99999994 1.0 + + 75 + 100000 + 0 0 -1 0 + 0 + 1 + 1 + 1 + 1 -3.7421756e-14 0 0.0 0 5.9604638e-08 0.99999982 0.0 -3.742176e-14 -1 5.9604652e-08 0.0 0 0 1.65 1.0 + + 1.0000001 0 0 0.0 0 5.9604645e-08 -0.99999994 0.0 0 1.0000004 5.9604673e-08 0.0 0 0 0 1.0 + + guid://60020a35ebc7961062ebf22feb7ff9c29363ee39 + -1 + 30 + 0 + 30 + + + + 6255027986d202efac987f4adfd5f19c8f358f25 + 036d975119765037c8ffff946a805cb6d3ccf640 + guid://e61be599754592242eb5b733e6a292f613446ddd + guid://5b9eff0f2598e1220b37ee19579500a41d4553b3 + guid://0618cf62aee4875963a848e477497ef3f97a37b6 + guid://cbfdf1845c72cf13e5a0095692adb0bd26213af8 + guid://4dbed84c58ba373b54a8435e27ffd325d12a6a40 + guid://6e5043b26ddd4f69bf90d1b424eb5183d4a74906 + + + 1 1.6689304e-06 4.0911085e-14 0.0 -1.6689298e-06 1 2.4335923e-08 0.0 -2.9612317e-16 -2.4335897e-08 0.99999988 0.0 5.4846364e-21 0.25 -0.02499938 1.0 + + joint_hold + 0.17363977 0.25486851 0.95125794 0.0 -4.068017e-06 0.96593118 -0.2587992 0.0 -0.9848094 0.044934005 0.16772509 0.0 0.17025253 0.16304654 -0.028451072 1.0 + + 0.99999988 0 0 0.0 0 1.0000004 0 0.0 0 0 1 0.0 0 0 0 1.0 + + guid://2a8475f4b0fc28c3ac85b7462c1525ed9ac34e68 + -1 + 30 + 0 + 30 + + 1 -5.8887914e-25 2.9611872e-16 0.0 -3.8976016e-24 1 2.4335929e-08 0.0 -2.9611872e-16 -2.4335929e-08 1 0.0 0 0 0 1.0 + + 0.99999982 -2.9802322e-08 1.1920929e-07 0.0 1.1920929e-07 1.0000008 8.9406967e-08 0.0 -1.4901161e-08 -1.3783574e-07 0.99999982 0.0 0.0040171146 0.28044361 0.084044278 1.0 + + + + + + + 0 + 0 + guid://89640b0d7ffa9f7f02a1a97753abc138ef6e3f24 + + 1 -7.1054274e-15 2.9611872e-16 0.0 7.1054274e-15 1 2.4335929e-08 0.0 -2.9611893e-16 -2.4335929e-08 1 0.0 5.5368699e-21 3.765877e-14 0 1.0 + + + @@ -2482,6 +2567,15 @@ 1 0 0 0.0 0 1 0 0.0 0 0 1 0.0 0 0 0 1.0 + + guid://acc02afac5babe113e4e603c069dbe6b04c340ce + 3 + 1 0 0 0.0 0 1 0 0.0 0 0 1 0.0 0 0 0 1.0 + + + guid://1052eb5f16b3c132e06baee99e58ab34533a5d03 + 1 0 0 0.0 0 1 0 0.0 0 0 1 0.0 0.075533859 5.9413724 0.99999994 1.0 + 4 diff --git a/data/csharp_template/FP_controller/components/Bullet.cs b/data/csharp_template/FP_controller/components/Bullet.cs new file mode 100644 index 0000000..9e7f0d4 --- /dev/null +++ b/data/csharp_template/FP_controller/components/Bullet.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Unigine; + +#region Math Variables +#if UNIGINE_DOUBLE +using Vec3 = Unigine.dvec3; +#else +using Vec3 = Unigine.vec3; +#endif +#endregion + +[Component(PropertyGuid = "88d6112b0032ace8365867c48dbe1958c29471f7")] +public class Bullet : Component +{ + public float speed = 10.0f; + public int damage = 1; + + public AssetLink hitPrefab = null; + + [ParameterMask] + public int intersectionMask = ~0; + + private WorldIntersectionNormal hitInfo = new WorldIntersectionNormal(); + + private void Update() + { + // устанавливаем текущую позицию пули + Vec3 currentPosition = node.WorldPosition; + // устанавливаем направление движения пули вдоль оси Y + vec3 currentDirection = node.GetWorldDirection(MathLib.AXIS.Y); + + // обновляем положение пули вдоль траектории в соответствии с заданной скоростью + node.WorldPosition += currentDirection * speed * Game.IFps; + + // ищем пересечение траектории пули с каким-либо объектом + Unigine.Object hitObject = World.GetIntersection(currentPosition, node.WorldPosition, intersectionMask, hitInfo); + + // если пересечений не найдено, ничего не делаем + if (!hitObject) + return; + + // иначе загружаем NodeReference с эффектом попадания + Node hitEffect = World.LoadNode(hitPrefab.AbsolutePath); + // устанавливаем NodeReference в точку попадания и ориентируем его по нормали к поверхности + hitEffect.Parent = hitObject; + hitEffect.WorldPosition = hitInfo.Point; + hitEffect.SetWorldDirection(hitInfo.Normal, vec3.UP, MathLib.AXIS.Y); + + // удаляем пулю + node.DeleteLater(); + } +} \ No newline at end of file diff --git a/data/csharp_template/FP_controller/components/Bullet.cs.meta b/data/csharp_template/FP_controller/components/Bullet.cs.meta new file mode 100644 index 0000000..5349840 --- /dev/null +++ b/data/csharp_template/FP_controller/components/Bullet.cs.meta @@ -0,0 +1,10 @@ + + + 27288c553eaee1ae73cc529616f559e6334c2941 + component + 0625c6a5 + + + + + diff --git a/data/csharp_template/FP_controller/components/EnemyFireController.cs b/data/csharp_template/FP_controller/components/EnemyFireController.cs new file mode 100644 index 0000000..a79c062 --- /dev/null +++ b/data/csharp_template/FP_controller/components/EnemyFireController.cs @@ -0,0 +1,61 @@ +using System.Collections; +using System.Collections.Generic; +using Unigine; + +[Component(PropertyGuid = "7eb5cbfb6c98181a790c65d41fb95f354d95dfc7")] +public class EnemyFireController : Component +{ + public Node leftMuzzle = null; + public Node rightMuzzle = null; + + public AssetLink bulletPrefab = null; + + public float shootInterval = 1.0f; + + private float currentTime = 0.0f; + private bool isLeft = false; + private bool isFiring = false; + + public void StartFiring() + { + isFiring = true; + } + + public void StopFiring() + { + isFiring = false; + } + + private void Init() + { + // сброс таймера + currentTime = 0.0f; + // переключаем стрельбу на правый ствол + isLeft = false; + } + + private void Update() + { + // если робот не в состоянии атаки (Бездействие или Преследование), то ничего не делаем + if (!isFiring) + return; + + // обновляем таймер + currentTime += Game.IFps; + + // проверка интервала стрельбы + if (currentTime > shootInterval) + { + // сброс таймера + currentTime -= shootInterval; + // создаем пулю из ассета назначенного в bulletPrefab + Node bullet = World.LoadNode(bulletPrefab.AbsolutePath); + + // устанавливаем положение пули в зависимости от того, с какой стороны стреляем + bullet.WorldTransform = (isLeft) ? leftMuzzle.WorldTransform : rightMuzzle.WorldTransform; + // меняем ствол для следующего выстрела + isLeft = !isLeft; + + } + } +} \ No newline at end of file diff --git a/data/csharp_template/FP_controller/components/EnemyFireController.cs.meta b/data/csharp_template/FP_controller/components/EnemyFireController.cs.meta new file mode 100644 index 0000000..5fb884f --- /dev/null +++ b/data/csharp_template/FP_controller/components/EnemyFireController.cs.meta @@ -0,0 +1,10 @@ + + + 4b3823a5c4fc24a3c73f5f268369b30430346791 + component + 7b1849b4 + + + + + diff --git a/data/csharp_template/FP_controller/components/EnemyLogic.cs b/data/csharp_template/FP_controller/components/EnemyLogic.cs new file mode 100644 index 0000000..2546a34 --- /dev/null +++ b/data/csharp_template/FP_controller/components/EnemyLogic.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Unigine; + +#region Math Variables +#if UNIGINE_DOUBLE +using Vec3 = Unigine.dvec3; +#else +using Vec3 = Unigine.vec3; +#endif +#endregion + +// определяем состояния врага +public enum EnemyLogicState +{ + Idle, + Chase, + Attack, +} + +[Component(PropertyGuid = "5efec285bbcacbfd75d58238dff8fedd1ee54024")] +public class EnemyLogic : Component +{ + public Node player = null; + public Node intersectionSocket = null; + public float reachRadius = 0.5f; + public float attackInnerRadius = 5.0f; + public float attackOuterRadius = 7.0f; + public float speed = 1.0f; + public float rotationStiffness = 8.0f; + public float routeRecalculationInterval = 3.0f; + + [ParameterMask(MaskType = ParameterMaskAttribute.TYPE.INTERSECTION)] + public int playerIntersectionMask = ~0; + + // инициализируем состояние врага + private EnemyLogicState currentState = EnemyLogicState.Idle; + + private bool targetIsVisible; + private Vec3 lastSeenPosition; + private vec3 lastSeenDirection; + private float lastSeenDistanceSqr; + + private BodyRigid bodyRigid = null; + private WorldIntersection hitInfo = new WorldIntersection(); + private Node[] hitExcludes = new Node[2]; + + private EnemyFireController fireController = null; + // создаем очередь для точек пути + private Queue calculatedRoute = new Queue(); + + private PathRoute route = new PathRoute(); + private bool shouldUpdateRoute = true; + private float lastCalculationTime = 0.0f; + private bool IsTargetVisible() + { + Vec3 direction = (player.WorldPosition - intersectionSocket.WorldPosition); + Vec3 p0 = intersectionSocket.WorldPosition; + Vec3 p1 = p0 + direction; + + Unigine.Object hitObject = World.GetIntersection(p0, p1, playerIntersectionMask, hitExcludes, hitInfo); + if (!hitObject) + return false; + + return player.ID == hitObject.ID; + } + + private void Init() + { + // задаем начальные значения параметров движения по пути внутри навигационной области + route.Radius = 0.0f; + route.Height = 1.0f; + route.MaxAngle = 0.5f; + + bodyRigid = node.ObjectBodyRigid; + hitExcludes[0] = node; + hitExcludes[1] = node.GetChild(0); + + targetIsVisible = false; + // берем компонент EnemyFireController + fireController = node.GetComponent(); + shouldUpdateRoute = true; + lastCalculationTime = Game.Time; + + } + + private void Update() + { + UpdateTargetState(); + UpdateOrientation(); + UpdateRoute(); + + // переключение состояний врага + switch (currentState) + { + case EnemyLogicState.Idle: ProcessIdleState(); break; + case EnemyLogicState.Chase: ProcessChaseState(); break; + case EnemyLogicState.Attack: ProcessAttackState(); break; + } + + // переключение цвета в зависимости от текущего состояния + vec4 color = vec4.BLACK; + switch (currentState) + { + case EnemyLogicState.Idle: color = vec4.BLUE; break; + case EnemyLogicState.Chase: color = vec4.YELLOW; break; + case EnemyLogicState.Attack: color = vec4.RED; break; + } + + // визуализируем состояния врага + Visualizer.RenderPoint3D(node.WorldPosition + vec3.UP * 2.0f, 0.25f, color); + Visualizer.RenderPoint3D(node.WorldPosition + vec3.UP * 3.0f, 0.25f, IsTargetVisible() ? vec4.GREEN : vec4.RED); + Visualizer.RenderPoint3D(lastSeenPosition, 0.1f, vec4.MAGENTA); + + // визуализируем радиус атаки + Visualizer.RenderSphere(attackInnerRadius, node.WorldTransform, vec4.RED); + Visualizer.RenderSphere(attackOuterRadius, node.WorldTransform, vec4.RED); + + // визуализируем точки маршрута + foreach (vec3 route_point in calculatedRoute) + Visualizer.RenderPoint3D(route_point + vec3.UP, 0.25f, vec4.BLACK); + + } + private void UpdateRoute() + { + if (Game.Time - lastCalculationTime < routeRecalculationInterval) + return; + + if (shouldUpdateRoute) + { + // рассчитываем путь до игрока + route.Create2D(node.WorldPosition, lastSeenPosition, 1); + shouldUpdateRoute = false; + } + + // если расчет пути окончен + if (route.IsReady) + { + // проверяем, не достигнута ли целевая точка + if (route.IsReached) + { + // очищаем очередь точек пути + calculatedRoute.Clear(); + + // добавляем все корневые точки в очередь + for (int i = 1; i < route.NumPoints; ++i) + calculatedRoute.Enqueue(route.GetPoint(i)); + + shouldUpdateRoute = true; + lastCalculationTime = Game.Time; + } + else + // пересчитываем путь, если целевая точка не была достигнута + shouldUpdateRoute = true; + } + } + + private void UpdateTargetState() + { + targetIsVisible = IsTargetVisible(); + if (targetIsVisible) + lastSeenPosition = player.WorldPosition; + + lastSeenDirection = (vec3)(lastSeenPosition - node.WorldPosition); + lastSeenDistanceSqr = lastSeenDirection.Length2; + lastSeenDirection.Normalize(); + } + + private void UpdateOrientation() + { + vec3 direction = lastSeenDirection; + direction.z = 0.0f; + + quat targetRotation = new quat(MathLib.SetTo(vec3.ZERO, direction.Normalized, vec3.UP, MathLib.AXIS.Y)); + quat currentRotation = node.GetWorldRotation(); + + currentRotation = MathLib.Slerp(currentRotation, targetRotation, Game.IFps * rotationStiffness); + node.SetWorldRotation(currentRotation); + } + + private void ProcessIdleState() + { + // если видна цель (игрок) - переход Бездействие -> Преследование (Chase) + if (targetIsVisible) + currentState = EnemyLogicState.Chase; + } + + private void ProcessChaseState() + { + + vec3 currentVelocity = bodyRigid.LinearVelocity; + currentVelocity.x = 0.0f; + currentVelocity.y = 0.0f; + if (calculatedRoute.Count > 0) + { + float distanceToTargetSqr = (float)(calculatedRoute.Peek() - node.WorldPosition).Length2; + + bool targetReached = (distanceToTargetSqr < reachRadius * reachRadius); + if (targetReached) + calculatedRoute.Dequeue(); + + if (calculatedRoute.Count > 0) + { + vec3 direction = (vec3)(calculatedRoute.Peek() - node.WorldPosition); + direction.z = 0.0f; + direction.Normalize(); + currentVelocity.x = direction.x * speed; + currentVelocity.y = direction.y * speed; + } + + } + + // если цель не видна - переход Преследование -> Бездействие + if (!targetIsVisible) + currentState = EnemyLogicState.Idle; + + // проверка дистанции и переход Преследование -> Атака + else if (lastSeenDistanceSqr < attackInnerRadius * attackInnerRadius) + { + currentState = EnemyLogicState.Attack; + currentVelocity.x = 0.0f; + currentVelocity.y = 0.0f; + // начинаем стрельбу + if (fireController) + fireController.StartFiring(); + } + + bodyRigid.LinearVelocity = currentVelocity; + } + + private void ProcessAttackState() + { + // проверка дистанции и переход Атака -> Преследование + if (!targetIsVisible || lastSeenDistanceSqr > attackOuterRadius * attackOuterRadius) + { + currentState = EnemyLogicState.Chase; + // прекращаем стрельбу + if (fireController) + fireController.StopFiring(); + } + } +} \ No newline at end of file diff --git a/data/csharp_template/FP_controller/components/EnemyLogic.cs.meta b/data/csharp_template/FP_controller/components/EnemyLogic.cs.meta new file mode 100644 index 0000000..e7cee7b --- /dev/null +++ b/data/csharp_template/FP_controller/components/EnemyLogic.cs.meta @@ -0,0 +1,10 @@ + + + 5158593f996ef01aae4f3a2a8ce7a21d539470f6 + component + bc5e00f5 + + + + + diff --git a/data/csharp_template/FP_controller/first_person_controller.node b/data/csharp_template/FP_controller/first_person_controller.node index 1a3d025..82c3d17 100644 --- a/data/csharp_template/FP_controller/first_person_controller.node +++ b/data/csharp_template/FP_controller/first_person_controller.node @@ -1,35 +1,35 @@ - - - + + + 0.300000012 1.14999998 - + 1 2 - 958275346 + 910867488 0.100000001 100000 - - - 958275346 - df8abf61f7c18b5cf1135c64dee627712bdd4810 - 2091699848 - 0586297bde8ca54cb09e8836a39c2dc9f5ca7bc2 + + + 910867488 + 7479cda9696b2cbacde01f3aee8963494ea4d355 + 1611135398 + 0df24103e1f46fea06370afc4e193f634baa384f 0xffffffff - + guid://8c628a2a1e96b3815d3476ec7c87055be14f7afe guid://dda131848d3d0f13356549567731f0bdb2587af8 - 1 -2.6290081e-13 0 0.0 0 0.99999994 0 0.0 0 0 0.99999994 0.0 0 0 0 1.0 - + 1 -2.7000624e-13 0 0.0 0 0.99999994 0 0.0 0 0 0.99999994 0.0 0 0 0 1.0 + 75 100000 0 0 -1 0 @@ -38,9 +38,9 @@ 1 1 1 -3.7421756e-14 0 0.0 0 5.9604638e-08 0.99999982 0.0 -3.742176e-14 -1 5.9604652e-08 0.0 0 0 1.65 1.0 - + 1.0000001 0 0 0.0 0 5.9604645e-08 -0.99999994 0.0 0 1.0000004 5.9604673e-08 0.0 0 0 0 1.0 - + guid://60020a35ebc7961062ebf22feb7ff9c29363ee39 -1 30 @@ -48,9 +48,9 @@ 30 - - 25b0548915fd9197f385d19abb2397a9e5e40435 - df8abf61f7c18b5cf1135c64dee627712bdd4810 + + 717480773af6b0753b001e0211708f9893b1e84e + 7479cda9696b2cbacde01f3aee8963494ea4d355 guid://e61be599754592242eb5b733e6a292f613446ddd guid://5b9eff0f2598e1220b37ee19579500a41d4553b3 guid://0618cf62aee4875963a848e477497ef3f97a37b6 @@ -60,12 +60,12 @@ 1 1.6689304e-06 4.0911085e-14 0.0 -1.6689298e-06 1 2.4335923e-08 0.0 -2.9612317e-16 -2.4335897e-08 0.99999988 0.0 5.4846364e-21 0.25 -0.02499938 1.0 - + joint_hold 0.17363977 0.25486851 0.95125794 0.0 -4.068017e-06 0.96593118 -0.2587992 0.0 -0.9848094 0.044934005 0.16772509 0.0 0.17025253 0.16304654 -0.028451072 1.0 - + 0.99999988 0 0 0.0 0 1.0000004 0 0.0 0 0 1 0.0 0 0 0 1.0 - + guid://2a8475f4b0fc28c3ac85b7462c1525ed9ac34e68 -1 30 @@ -73,14 +73,14 @@ 30 1 -5.8887914e-25 2.9611872e-16 0.0 -3.8976016e-24 1 2.4335929e-08 0.0 -2.9611872e-16 -2.4335929e-08 1 0.0 0 0 0 1.0 - + 0.99999982 -2.9802322e-08 1.1920929e-07 0.0 1.1920929e-07 1.0000008 8.9406967e-08 0.0 -1.4901161e-08 -1.3783574e-07 0.99999982 0.0 0.0040171146 0.28044361 0.084044278 1.0 - + 0 0 guid://89640b0d7ffa9f7f02a1a97753abc138ef6e3f24 diff --git a/data/fps/bullet/bullet.node b/data/fps/bullet/bullet.node index 960753c..70e866d 100644 --- a/data/fps/bullet/bullet.node +++ b/data/fps/bullet/bullet.node @@ -1,17 +1,20 @@ - + 0 0 guid://0527657119e3201c2e7ebccb87ea6bae0e3bbf35 - + 5 + + guid://8c628a2a1e96b3815d3476ec7c87055be14f7afe + - 1 2.208811e-29 2.1175814e-21 0.0 -2.2087505e-29 0.99999988 -2.8421701e-13 0.0 -2.1175814e-21 2.8421704e-13 1 0.0 1.9073486e-06 -2.8610229e-06 0.73676431 1.0 - + 1 2.208811e-29 2.1175814e-21 0.0 -2.2087505e-29 0.99999988 -2.8421701e-13 0.0 -2.1175814e-21 2.8421704e-13 1 0.0 1.9073486e-06 -2.8610229e-06 0.73676425 1.0 + 2 2 1 0.200000003 0 @@ -86,7 +89,7 @@ - + 1 -2.2087513e-29 -2.1175824e-21 0.0 2.2088104e-29 1.0000005 2.8421728e-13 0.0 2.1175818e-21 -2.8421734e-13 1.0000002 0.0 0 0.11498165 1.9639169e-12 1.0 diff --git a/data/fps/robot/robot_enemy.node b/data/fps/robot/robot_enemy.node index a7b8fa9..9e9f8cf 100644 --- a/data/fps/robot/robot_enemy.node +++ b/data/fps/robot/robot_enemy.node @@ -1,15 +1,27 @@ - - + + 0 0 0 - + 0.5 0.699999988 + + + 1481376270 + 390761584 + guid://ec33ae15d2782870bf95a10f4fab1b221b40e019 + + + 131174606 + 981409570 + 0xffffffff + + 1 0 0 0.0 0 1 0 0.0 0 0 1 0.0 0 0 0 1.0 - + guid://113ec57667d1fe5d0486ec1847b280978e7aa50a -1 30 @@ -21,54 +33,54 @@ 0.49999994 -3.7865182e-29 4.2351652e-22 0.0 3.7865191e-29 0.5 -3.5527162e-15 0.0 -4.2351657e-22 3.5527162e-15 0.5 0.0 0 0 0 1.0 - + joint_2 0.71341574 -0.69943857 0.042703133 0.0 0.55578786 0.60190356 0.57342124 0.0 -0.42677617 -0.38535389 0.818147 0.0 0.27450061 0.27222845 0.76832491 1.0 - + guid://0a134f9336798fd67bd0853d9e11057894320a77 2.0000455 4.5448542e-07 7.7486038e-07 0.0 -2.2940338e-05 2.0000837 4.7683716e-07 0.0 1.5363097e-05 1.3530254e-05 2.0000713 0.0 -1.9073486e-06 -1.6391277e-06 -0.23828951 1.0 - + joint_3 -0.69019872 -0.71501589 -0.11125735 0.0 0.64177847 -0.67588562 0.36235246 0.0 -0.33428502 0.17869264 0.92537683 0.0 0.27457523 -0.2628285 0.76287109 1.0 - + guid://0a134f9336798fd67bd0853d9e11057894320a77 2.0000529 7.1525574e-07 -2.8312206e-07 0.0 2.5868416e-05 2.0000694 0 0.0 -6.1839819e-06 5.0067902e-06 2.0000868 0.0 8.3446503e-07 -7.1525574e-07 -0.24650681 1.0 - + joint_4 -0.66923231 0.73246187 -0.12501162 0.0 -0.695288 -0.55793941 0.45307654 0.0 0.26211244 0.39013252 0.88266277 0.0 -0.25062135 -0.26249185 0.72265375 1.0 - + guid://0a134f9336798fd67bd0853d9e11057894320a77 2.0000427 -6.92904e-07 2.9802322e-07 0.0 -2.2009015e-05 2.0000668 -2.3841858e-07 0.0 1.4021993e-05 1.5318394e-05 2.0000677 0.0 -1.3113022e-06 -2.0861626e-06 -0.23225865 1.0 - + joint_5 0.73238534 0.6773814 0.069038153 0.0 -0.6677205 0.69467193 0.26754504 0.0 0.13327116 -0.24204428 0.96106887 0.0 -0.250696 0.2725651 0.72810757 1.0 - + guid://0a134f9336798fd67bd0853d9e11057894320a77 2.0000515 -1.0430813e-07 4.4703484e-08 0.0 2.669543e-05 2.000087 0 0.0 -7.0631504e-06 6.0796738e-06 2.0000861 0.0 1.0430813e-06 -9.5367432e-07 -0.2365478 1.0 - + joint_8 0.99988168 -1.7359685e-05 0.015381269 0.0 -0.00013943078 0.99994802 0.010192467 0.0 -0.015380647 -0.010193406 0.99982971 0.0 -0.63721955 0.39293978 1.4175342 1.0 - + 0.99999994 0 0 0.0 0 0.99999994 0 0.0 0 0 0.99999988 0.0 0 0.80000001 -1.1920929e-07 1.0 - + joint_11 0.99988168 -1.7359685e-05 0.015381269 0.0 -0.00013943078 0.99994802 0.010192467 0.0 -0.015380647 -0.010193406 0.99982971 0.0 0.62459785 0.39291796 1.4369448 1.0 - + 1 1.4551915e-11 0 0.0 0 1 -9.3132257e-10 0.0 9.3132257e-10 0 0.99999994 0.0 0 0.80000001 0 1.0 - + 1 0 0 0.0 0 1 0 0.0 0 0 1 0.0 0 0 0.90023208 1.0 diff --git a/data/guids.db b/data/guids.db index 912dada..be8e242 100644 --- a/data/guids.db +++ b/data/guids.db @@ -266,11 +266,14 @@ "fe7e107fcadf21ef96ab03e986da74a12658a17c": "csharp_template/template_render_settings/template_virtual_reality.render.meta", "ea9d2d9f8f3d2a3b4d2c360902b89a2e21bcd11c": "configs/default.user.meta", "6b18eb69621c7af732ddd3fab60909c6ceedc515": "csharp_template/FP_controller/components/HUD.cs.meta", + "5ba43a89968ee98f08942f6c3c90ba959cb72398": "csharp_template/FP_controller/components/EnemyLogic.cs.meta", "cb3839fe5ac15e0145621fbc772e1e9caa5a4247": "fps/components/Lifetime.cs.meta", "b27eae5f554475bb72d78fc8446f0ebec0ed12eb": "csharp_template/FP_controller/components/VFXController.cs.meta", + "250dcf5fc4592814fceeb4c89d5c69e19dd8a3eb": "csharp_template/FP_controller/components/EnemyFireController.cs.meta", "117116973d68f9d5d633e5a255fb6f67627b61ee": "csharp_template/FP_controller/components/HandAnimationController.cs.meta", "1e9d3c93b8b196fb5847ecccb5871f542bef2adf": "csharp_template/FP_controller/components/WeaponController.cs.meta", "cd808aa08f142fcaf8300c9eea1d61eaa8c28057": "csharp_template/FP_controller/components/FirstPersonController.cs.meta", + "f3ec078f3b4f18aab54af5b819464b7260a2c11b": "csharp_template/FP_controller/components/Bullet.cs.meta", "720f8709336da3c5346e8e1a4a1710b611222eb5": "csharp_template/FP_controller/components/ShootInput.cs.meta", "373e54478e60df440dd556c14a217d4a0dab2a36": "fps/particles/textures/normal.dds.meta", "606e65e9f22fcdbe867c20631e72229baa3c44ae": "configs/default.controls.meta", @@ -2047,11 +2050,14 @@ "0c8e43c90ace7f55fc25e143ee2cb296e8fb540e": "configs/default.user", "31882be4a9adaffa787a3342ade773c4defe75cb": "editor2/resources/template_graphs/material_graph_decal_water", "5faca71f8446cfac3ee60b883c3368aef60d5fab": "csharp_template/FP_controller/components/HUD.cs", + "5158593f996ef01aae4f3a2a8ce7a21d539470f6": "csharp_template/FP_controller/components/EnemyLogic.cs", "4aed6f037c03c8869f9b862d692fb1a8ee0be8e7": "fps/components/Lifetime.cs", "b23baaa53cabf948b0118226ccc00803ae73be91": "csharp_template/FP_controller/components/VFXController.cs", + "4b3823a5c4fc24a3c73f5f268369b30430346791": "csharp_template/FP_controller/components/EnemyFireController.cs", "4e28861d843434e837504ef0429bf99b43420c5c": "csharp_template/FP_controller/components/HandAnimationController.cs", "1005e2b9f814eb840a73c08a2aabf58cc6fbbb65": "csharp_template/FP_controller/components/WeaponController.cs", "5fc06ee29974a0d934a294642d945473e5d80f36": "csharp_template/FP_controller/components/FirstPersonController.cs", + "27288c553eaee1ae73cc529616f559e6334c2941": "csharp_template/FP_controller/components/Bullet.cs", "37c301bff495e86069da00a84295485df343e04b": "csharp_template/FP_controller/components/ShootInput.cs", "6fbaf9250d79793e257226fcbca7afaeb81f7c26": "fps/particles/textures/normal.dds", "14cf5f169cc59cb3e00722a41fee17ee6a0dcc15": "configs/default.controls",