/// <summary> /// Shortcut for initializing a custom drone model. Only applies when work flow is followed the same as this mod's drones. /// </summary> /// <param name="droneModel">The custom drone model to initialize.</param> /// <param name="droneBody">The associated body of the model.</param> /// <param name="colliderMultiplier"> /// Collider size multiplier to be applied to the collider in the CharacterBody object. /// The basis would be the collider found within the model. A small collider may result in clipping through the map. /// </param> public static void InitializeDroneModelComponents(this GameObject droneModel, CharacterBody droneBody, float colliderMultiplier) { CapsuleCollider hurtBoxCapsuleCollider = droneModel.GetComponentInChildren <CapsuleCollider>(); if (!hurtBoxCapsuleCollider) { Log.Warning("Extensions.InitializeDroneModelComponents: CapsuleCollider not found! Cannot setup HurtBoxes without it."); return; } CharacterModel characterModel = droneModel.AddComponent <CharacterModel>(); characterModel.body = droneBody; characterModel.BuildRendererInfos(droneModel); characterModel.autoPopulateLightInfos = true; characterModel.invisibilityCount = 0; characterModel.temporaryOverlays = new List <TemporaryOverlay>(); HurtBoxGroup hurtBoxGroup = droneModel.AddComponent <HurtBoxGroup>(); HurtBox hurtBox = hurtBoxCapsuleCollider.gameObject.AddComponent <HurtBox>(); hurtBox.gameObject.layer = LayerIndex.entityPrecise.intVal; hurtBox.healthComponent = droneBody.GetComponent <HealthComponent>(); hurtBox.isBullseye = true; hurtBox.damageModifier = HurtBox.DamageModifier.Normal; hurtBox.hurtBoxGroup = hurtBoxGroup; hurtBox.indexInGroup = 0; hurtBoxGroup.hurtBoxes = new HurtBox[] { hurtBox }; hurtBoxGroup.mainHurtBox = hurtBox; hurtBoxGroup.bullseyeCount = 1; CapsuleCollider capsuleCollider = droneBody.GetComponent <CapsuleCollider>(); if (capsuleCollider) { capsuleCollider.center = hurtBoxCapsuleCollider.center; capsuleCollider.radius = hurtBoxCapsuleCollider.radius * colliderMultiplier; capsuleCollider.height = hurtBoxCapsuleCollider.height * colliderMultiplier; capsuleCollider.direction = hurtBoxCapsuleCollider.direction; } }
/// <summary> /// Builds the renderer information data structure from scratch based on the given GameObject's MeshRenderer components. /// This overload uses a ShadowCastingMode of Off and IgnoreOverlays of value false. /// </summary> /// <param name="model">Model to apply the new RendererInfos</param> /// <param name="basisObject">The object basis of where the MeshRenderers will be used to build off with</param> /// <returns>A new set of RendererInfos</returns> public static RendererInfo[] BuildRendererInfos(this CharacterModel model, GameObject basisObject) { return(model.BuildRendererInfos(basisObject, ShadowCastingMode.On, false)); }