public static SpeculativeRigidbody GenerateOrAddToRigidBody(GameObject targetObject, CollisionLayer collisionLayer, PixelCollider.PixelColliderGeneration colliderGenerationMode = PixelCollider.PixelColliderGeneration.Tk2dPolygon, bool collideWithTileMap = false, bool CollideWithOthers = true, bool CanBeCarried = true, bool CanBePushed = false, bool RecheckTriggers = false, bool IsTrigger = false, bool replaceExistingColliders = false, bool UsesPixelsAsUnitSize = false, IntVector2?dimensions = null, IntVector2?offset = null) { SpeculativeRigidbody orAddComponent = targetObject.GetOrAddComponent <SpeculativeRigidbody>(); orAddComponent.CollideWithOthers = CollideWithOthers; orAddComponent.CollideWithTileMap = collideWithTileMap; orAddComponent.Velocity = Vector2.zero; orAddComponent.MaxVelocity = Vector2.zero; orAddComponent.ForceAlwaysUpdate = false; orAddComponent.CanPush = false; orAddComponent.CanBePushed = CanBePushed; orAddComponent.PushSpeedModifier = 1f; orAddComponent.CanCarry = false; orAddComponent.CanBeCarried = CanBeCarried; orAddComponent.PreventPiercing = false; orAddComponent.SkipEmptyColliders = false; orAddComponent.RecheckTriggers = RecheckTriggers; orAddComponent.UpdateCollidersOnRotation = false; orAddComponent.UpdateCollidersOnScale = false; IntVector2 intVector = IntVector2.Zero; IntVector2 intVector2 = IntVector2.Zero; if (colliderGenerationMode != PixelCollider.PixelColliderGeneration.Tk2dPolygon) { if (dimensions != null) { intVector2 = dimensions.Value; if (!UsesPixelsAsUnitSize) { intVector2 = new IntVector2(intVector2.x * 16, intVector2.y * 16); } } if (offset != null) { intVector = offset.Value; if (!UsesPixelsAsUnitSize) { intVector = new IntVector2(intVector.x * 16, intVector.y * 16); } } } PixelCollider item = new PixelCollider { ColliderGenerationMode = colliderGenerationMode, CollisionLayer = collisionLayer, IsTrigger = IsTrigger, BagleUseFirstFrameOnly = (colliderGenerationMode == PixelCollider.PixelColliderGeneration.Tk2dPolygon), SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = intVector.x, ManualOffsetY = intVector.y, ManualWidth = intVector2.x, ManualHeight = intVector2.y, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }; if (replaceExistingColliders | orAddComponent.PixelColliders == null) { orAddComponent.PixelColliders = new List <PixelCollider> { item }; } else { orAddComponent.PixelColliders.Add(item); } if (orAddComponent.sprite && colliderGenerationMode == PixelCollider.PixelColliderGeneration.Tk2dPolygon) { Bounds bounds = orAddComponent.sprite.GetBounds(); orAddComponent.sprite.GetTrueCurrentSpriteDef().colliderVertices = new Vector3[] { bounds.center - bounds.extents, bounds.center + bounds.extents }; } return(orAddComponent); }
public static SpeculativeRigidbody GenerateOrAddToRigidBody(GameObject targetObject, CollisionLayer collisionLayer, PixelCollider.PixelColliderGeneration colliderGenerationMode = PixelCollider.PixelColliderGeneration.Tk2dPolygon, bool collideWithTileMap = false, bool CollideWithOthers = true, bool CanBeCarried = true, bool CanBePushed = false, bool RecheckTriggers = false, bool IsTrigger = false, bool replaceExistingColliders = false, bool UsesPixelsAsUnitSize = false, IntVector2?dimensions = null, IntVector2?offset = null) { SpeculativeRigidbody m_CachedRigidBody = GameObjectExtensions.GetOrAddComponent <SpeculativeRigidbody>(targetObject); m_CachedRigidBody.CollideWithOthers = CollideWithOthers; m_CachedRigidBody.CollideWithTileMap = collideWithTileMap; m_CachedRigidBody.Velocity = Vector2.zero; m_CachedRigidBody.MaxVelocity = Vector2.zero; m_CachedRigidBody.ForceAlwaysUpdate = false; m_CachedRigidBody.CanPush = false; m_CachedRigidBody.CanBePushed = CanBePushed; m_CachedRigidBody.PushSpeedModifier = 1f; m_CachedRigidBody.CanCarry = false; m_CachedRigidBody.CanBeCarried = CanBeCarried; m_CachedRigidBody.PreventPiercing = false; m_CachedRigidBody.SkipEmptyColliders = false; m_CachedRigidBody.RecheckTriggers = RecheckTriggers; m_CachedRigidBody.UpdateCollidersOnRotation = false; m_CachedRigidBody.UpdateCollidersOnScale = false; IntVector2 Offset = IntVector2.Zero; IntVector2 Dimensions = IntVector2.Zero; if (colliderGenerationMode != PixelCollider.PixelColliderGeneration.Tk2dPolygon) { if (dimensions.HasValue) { Dimensions = dimensions.Value; if (!UsesPixelsAsUnitSize) { Dimensions = (new IntVector2(Dimensions.x * 16, Dimensions.y * 16)); } } if (offset.HasValue) { Offset = offset.Value; if (!UsesPixelsAsUnitSize) { Offset = (new IntVector2(Offset.x * 16, Offset.y * 16)); } } } PixelCollider m_CachedCollider = new PixelCollider() { ColliderGenerationMode = colliderGenerationMode, CollisionLayer = collisionLayer, IsTrigger = IsTrigger, BagleUseFirstFrameOnly = (colliderGenerationMode == PixelCollider.PixelColliderGeneration.Tk2dPolygon), SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = Offset.x, ManualOffsetY = Offset.y, ManualWidth = Dimensions.x, ManualHeight = Dimensions.y, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0 }; if (replaceExistingColliders | m_CachedRigidBody.PixelColliders == null) { m_CachedRigidBody.PixelColliders = new List <PixelCollider> { m_CachedCollider }; } else { m_CachedRigidBody.PixelColliders.Add(m_CachedCollider); } if (m_CachedRigidBody.sprite && colliderGenerationMode == PixelCollider.PixelColliderGeneration.Tk2dPolygon) { Bounds bounds = m_CachedRigidBody.sprite.GetBounds(); m_CachedRigidBody.sprite.GetTrueCurrentSpriteDef().colliderVertices = new Vector3[] { bounds.center - bounds.extents, bounds.center + bounds.extents }; // m_CachedRigidBody.ForceRegenerate(); // m_CachedRigidBody.RegenerateCache(); } return(m_CachedRigidBody); }