Exemple #1
0
        protected virtual Quaternion GetHitboxRotation(BoxDefinitionBase hitboxDefinitionBase)
        {
            BoxDefinition hitboxDefinition = (BoxDefinition)hitboxDefinitionBase;

            return(Quaternion.Euler(new Vector3(0, 0, manager.visual.transform.localScale.x < 0 ? 180 : 0)
                                    + hitboxDefinition.rotation));
        }
Exemple #2
0
        protected virtual Vector3 GetHitboxPosition(BoxDefinitionBase hitboxDefinitionBase)
        {
            BoxDefinition hitboxDefinition = (BoxDefinition)hitboxDefinitionBase;

            return(manager.transform.position
                   + manager.GetVisualBasedDirection(Vector3.right) * hitboxDefinition.offset.x * ((EntityManager)manager).FaceDirection
                   + manager.GetVisualBasedDirection(Vector3.up) * hitboxDefinition.offset.y);
        }
Exemple #3
0
        private void OnDrawGizmos()
        {
            int size = this.VisibilityProbe.GetSize();

            if (size > 0)
            {
                var BoxDefinition = new BoxDefinition(this.B1);
                for (int i = 0; i < size; i++)
                {
                    Gizmos.DrawWireSphere(
                        BoxDefinition.LocalToWorld.MultiplyPoint(this.VisibilityProbe[i]), 0.1f);
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Create the hitbox group of the given index.
        /// </summary>
        /// <param name="index">The index of the hitbox group.</param>
        public void CreateHitboxGroup(int index)
        {
            // Group was already created.
            if (hitboxGroups.ContainsKey(index))
            {
                return;
            }

            // Variables.
            BoxGroup      currentGroup    = combatManager.CurrentAttack.attackDefinition.boxGroups[index];
            List <Hitbox> groupHitboxList = new List <Hitbox>(currentGroup.boxes.Count);

            // Keep track of what the hitbox ID has hit.
            if (!hurtablesHit.ContainsKey(currentGroup.ID))
            {
                hurtablesHit.Add(currentGroup.ID, new List <IHurtable>());
                hurtablesHit[currentGroup.ID].Add(combatManager);
            }

            // Loop through all the hitboxes in the group.
            for (int i = 0; i < currentGroup.boxes.Count; i++)
            {
                // Instantiate the hitbox with the correct position and rotation.
                BoxDefinition hitboxDefinition = currentGroup.boxes[i];
                Vector3       pos = controller.GetVisualBasedDirection(Vector3.forward) * hitboxDefinition.offset.z
                                    + controller.GetVisualBasedDirection(Vector3.right) * hitboxDefinition.offset.x
                                    + controller.GetVisualBasedDirection(Vector3.up) * hitboxDefinition.offset.y;

                Hitbox hitbox = InstantiateHitbox(controller.transform.position + pos,
                                                  Quaternion.Euler(controller.transform.eulerAngles + hitboxDefinition.rotation));

                // Attach the hitbox if neccessary.
                if (currentGroup.attachToEntity)
                {
                    hitbox.transform.SetParent(controller.transform, true);
                }

                hitbox.Initialize(controller.gameObject, controller.visual.transform, currentGroup.boxes[i].shape,
                                  currentGroup.hitboxHitInfo, hurtablesHit[currentGroup.ID]);
                int cID        = currentGroup.ID;
                int groupIndex = index;
                hitbox.OnHurt += (hurtable, hitInfo) => { OnHitboxHurt(hurtable, hitInfo, cID, groupIndex); };
                hitbox.Activate();
                groupHitboxList.Add(hitbox);
            }
            // Add the hitbox group to our list.
            hitboxGroups.Add(index, groupHitboxList);
        }
Exemple #5
0
        protected Hitbox3D InstantiateHitbox(BoxDefinition boxDefinition)
        {
            GameManager gm = GameManager.current;

            Vector3 position = transform.position
                               + transform.forward * boxDefinition.offset.z
                               + transform.right * boxDefinition.offset.x
                               + transform.up * boxDefinition.offset.y;

            Vector3 rotation = transform.eulerAngles + boxDefinition.rotation;

            GameObject hitbox = GameObject.Instantiate(gm.gameVariables.combat.hitbox, position, Quaternion.Euler(rotation));

            hitbox.transform.SetParent(transform, true);
            return(hitbox.GetComponent <Hitbox3D>());
        }
Exemple #6
0
        protected override HitboxBase InstantiateHitbox(BoxDefinitionBase hitboxDefinitionBase)
        {
            BoxDefinition boxDefinition = (BoxDefinition)hitboxDefinitionBase;
            GameManager   gm            = GameManager.current;

            Vector3 position = manager.transform.position
                               + manager.GetVisualBasedDirection(Vector3.forward) * boxDefinition.offset.z
                               + manager.GetVisualBasedDirection(Vector3.right) * boxDefinition.offset.x
                               + manager.GetVisualBasedDirection(Vector3.up) * boxDefinition.offset.y;

            Vector3 rotation = manager.visual.transform.eulerAngles + boxDefinition.rotation;

            GameObject hitbox = GameObject.Instantiate(gm.gameVariables.combat.hitbox, position, Quaternion.Euler(rotation));

            return(hitbox.GetComponent <Hitbox3D>());
        }
Exemple #7
0
    public static void ExtractBoxColliderWorldPointsV2(BoxDefinition BoxDefinition, out Vector3 C1, out Vector3 C2, out Vector3 C3, out Vector3 C4, out Vector3 C5, out Vector3 C6, out Vector3 C7, out Vector3 C8)
    {
        ExtractBoxColliderLocalPoints(BoxDefinition.LocalCenter, BoxDefinition.LocalSize, out Vector3 lC1, out Vector3 lC2, out Vector3 lC3, out Vector3 lC4, out Vector3 lC5,
                                      out Vector3 lC6, out Vector3 lC7, out Vector3 lC8);

        var boxLocalToWorld = BoxDefinition.LocalToWorld;

        C1 = boxLocalToWorld.MultiplyPoint(lC1);
        C2 = boxLocalToWorld.MultiplyPoint(lC2);
        C3 = boxLocalToWorld.MultiplyPoint(lC3);
        C4 = boxLocalToWorld.MultiplyPoint(lC4);
        C5 = boxLocalToWorld.MultiplyPoint(lC5);
        C6 = boxLocalToWorld.MultiplyPoint(lC6);
        C7 = boxLocalToWorld.MultiplyPoint(lC7);
        C8 = boxLocalToWorld.MultiplyPoint(lC8);
    }
Exemple #8
0
        public void WithRotateCube()
        {
            var sphereWorldPosition = Vector3.zero;
            var sphereRadius        = 0.5f;

            BoxCollider box = this.CreateBoxCollider();

            this.InitBox(ref box, Vector3.one, Quaternion.Euler(90f, 90f, 90f));

            var boxDefinition = new BoxDefinition(box);

            this.AssertBox(Vector3.forward, 0.1f, ref box, boxDefinition, sphereWorldPosition, sphereRadius);
            this.AssertBox(Vector3.back, 0.1f, ref box, boxDefinition, sphereWorldPosition, sphereRadius);
            this.AssertBox(Vector3.up, 0.1f, ref box, boxDefinition, sphereWorldPosition, sphereRadius);
            this.AssertBox(Vector3.down, 0.1f, ref box, boxDefinition, sphereWorldPosition, sphereRadius);
            this.AssertBox(Vector3.left, 0.1f, ref box, boxDefinition, sphereWorldPosition, sphereRadius);
            this.AssertBox(Vector3.right, 0.1f, ref box, boxDefinition, sphereWorldPosition, sphereRadius);
        }
Exemple #9
0
        private void AssertBox(Vector3 moveDirection, float directionDelta, ref BoxCollider box, BoxDefinition boxDefinition, Vector3 sphereWorldPosition, float sphereRadius)
        {
            box.transform.position = moveDirection;
            Assert.IsTrue(Intersection.BoxIntersectsOrEntirelyContainedInSphere(boxDefinition, sphereWorldPosition, sphereRadius));

            box.transform.position = moveDirection + (moveDirection * (-1 * directionDelta));
            Assert.IsTrue(Intersection.BoxIntersectsOrEntirelyContainedInSphere(boxDefinition, sphereWorldPosition, sphereRadius));

            box.transform.position = moveDirection + (moveDirection * directionDelta);
            Assert.IsFalse(Intersection.BoxIntersectsOrEntirelyContainedInSphere(boxDefinition, sphereWorldPosition, sphereRadius));
        }