module TutorialHidingComponentPartsModule
private func hideComponent(componentName: String) -> Void {
let player = GetPlayer(GetGameInstance());
let component: ref<IComponent> = player.FindComponentByName(t(componentName))
// or cast the component to a different type
// by using "as entSkinnedMeshComponent" / changing e.g. ref<entSkinnedMeshComponent>
if IsDefined(component) {
component.Toggle(false);
}
}
// If you don't know the component name, you can iterate over the components
private func showComponent(componentName: String) -> Void {
let player = GetPlayer(GetGameInstance());
let components = player.GetComponents();
for component in components {
if StrContains(s"\(component.GetName())", componentName) {
component.Toggle(true);
}
}
}
@wrapMethod(PlayerPuppet)
protected cb func OnWeaponEquipEvent(event: ref<WeaponEquipEvent>) -> Bool {
let weaponRecord: wref<ItemObject> = event.item;
if !IsDefined(weaponRecord) {
return wrappedMethod(event);
}
let id = weaponRecord.GetItemID();
let id_str = TDBID.ToStringDEBUG(ItemID.GetTDBID(id));
if StrContains(id_str, "Items.your_weapon") {
hideComponent("your_component_name");
}
wrappedMethod(event);
}
private func OnItemUnequipped(slot: TweakDBID, item: ItemID) -> Void {
if StrContains(TDBID.ToStringDEBUG(ItemID.GetTDBID(item)), "Items.your_weapon") {
showComponent("your_component_name");
}
}
private class PlayerPuppetAttachmentSlotsCallbackVenuzdnor extends PlayerPuppetAttachmentSlotsCallback {
public let m_player: wref<PlayerPuppet>;
public func OnItemUnequipped(slot: TweakDBID, item: ItemID) -> Void {
OnItemUnequipped(slot, item);
}
}
@wrapMethod(EquipmentSystemPlayerData)
func OnRestored() -> Void {
if IsDefined(this.m_owner as PlayerPuppet) {
let attachmentSlotCallback: ref<PlayerPuppetAttachmentSlotsCallback> = new PlayerPuppetAttachmentSlotsCallbackVenuzdnor();
attachmentSlotCallback.m_player = (this.m_owner as PlayerPuppet);
attachmentSlotCallback.slotID = t"AttachmentSlots.WeaponRight";
GameInstance.GetTransactionSystem((this.m_owner as PlayerPuppet).GetGame()).RegisterAttachmentSlotListener(this.m_owner, attachmentSlotCallback);
}
wrappedMethod();
}