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)); }
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); }
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); } } }
/// <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); }
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>()); }
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>()); }
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); }
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); }
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)); }