private void Btn_Unlock() { var cost = trayInfo.costToUnlock[this.slotID]; if (!isUnlockable()) { ConfirmYesNoInterface.Ask("Research Lab", "You need\n<color={0}><size=+20>{2} {1}</size></color>\nto unlock this slot.".Format2(ColorConstants.HTML_GOLD, cost.type, cost.amount), "OK"); return; } ConfirmYesNoInterface.Ask("Research Lab", "Would you like\nto unlock this\nResearch Slot?\n<size=+20><color={0}>{2} {1}</color></size>".Format2(ColorConstants.HTML_GOLD, cost.type, cost.amount)) .Then(answer => { if (answer == "NO") { TimelineTween.ShakeError(this.gameObject); return; } ChangeStatus(ResearchSlotStatus.UNLOCKED, cost.type, cost.amount) .Then(slot => { FXPulse(imgStatus.transform); INTERFACE.UpdateAllSlots(); }); }); }
public static int ConversionCost(FunctionParameter dest, VariableType src) { if (dest.VarType == src) { return(0); //exact match } if (src?.PropertyType == EPropertyType.Vector && dest.VarType?.PropertyType == EPropertyType.Vector || src?.PropertyType == EPropertyType.Rotator && dest.VarType?.PropertyType == EPropertyType.Rotator) { return(0); } if (dest.VarType is Class c && (src is null || src is ClassType && !c.IsInterface)) { return(0); } if (dest.VarType is DelegateType && src is null) { return(0); } if (dest.IsOut) { return(int.MaxValue); } if (INTERFACE.CaseInsensitiveEquals(dest.VarType?.Name) && src is Class cls && cls.SameAsOrSubClassOf(INTERFACE)) { return(1); //Interface subclass } if (!INTERFACE.CaseInsensitiveEquals(dest.VarType?.Name) && dest.VarType is Class && src is Class) { return(2); } ECast conversion = GetConversion(dest.VarType, src); //if it has 'coerce', any valid conversion is acceptable, otherwise only autoconversions are acceptable if (dest.Flags.Has(UnrealFlags.EPropertyFlags.CoerceParm) ? conversion != ECast.Max : conversion.Has(ECast.AutoConvert)) { if (conversion.Has(ECast.Truncate)) { return(104); //lossy conversion } if (dest.VarType == SymbolTable.FloatType && (src == SymbolTable.IntType || src?.PropertyType == EPropertyType.Byte)) { return(103); //int to float conversion } return(101); //lossless conversion } return(int.MaxValue); }