private void CreateObjectAlias() { objectEntity = OriginalObject.GetComponentInParent <EntityData>(); anchorFace = objectEntity.anchorSide; coloredMaterial = RenderingUtility.CreateColoredMaterial(collisionPositionColor); aliasObject = Instantiate(OriginalObject); PhysicsUtility.SetColliderConvex(aliasObject, true); originalHeadingOffset = aliasObject.transform.eulerAngles.y; aliasObject.transform.rotation = Quaternion.identity; Bounds bounds = PhysicsUtility.GetColliderBounds(aliasObject); aliasObjBoundAnchor = MathUtility.GetBoundsFaceCenter(bounds, anchorFace) - aliasObject.transform.position; aliasObject.transform.SetParent(transform); currentHeadingOffset = 0;// aliasObject.transform.eulerAngles.y; collisionOffset = 0; RenderingUtility.ChangeLayerRecursive(aliasObject, "Ignore Raycast"); RenderingUtility.BackupMaterials(aliasObject, originalMaterialMap); RenderingUtility.ReplaceMaterials(aliasObject, coloredMaterial); collisionState = aliasObject.AddComponent <CollisionState>(); aliasObjectRigidbody = aliasObject.AddComponent <Rigidbody>(); aliasObjectRigidbody.useGravity = false; aliasObjectRigidbody.freezeRotation = true; aliasObjectRigidbody.drag = 1000; //rb.isKinematic = true; }
public virtual bool IsValid(GameObject aliasObject, EntityData entityData, EntityData bearingSurfaceEntity, EntityData collidingEntity, CollisionState collisionState) { if (!CanBeLeantAgainst(entityData, bearingSurfaceEntity) || !CanCollideWith(entityData, bearingSurfaceEntity, collidingEntity, collisionState)) { return(false); } // other tests... return(true); }
public virtual bool CanCollideWith(EntityData entityData, EntityData bearingSurfaceEntity, EntityData collidingEntity, CollisionState collisionState) { return(!collisionState.IsColliding || collidingEntity == bearingSurfaceEntity); }