/// <summary> /// This section checks if the force pool allows for the casting of the spell. /// </summary> /// <param name="verbAbility"></param> /// <param name="reason">Why did we fail?</param> /// <returns></returns> public override bool CanCastPowerCheck(Verb_UseAbility verbAbility, out string reason) { reason = ""; ForceAbilityDef forceDef = (ForceAbilityDef)verbAbility.useAbilityProps.abilityDef; if (forceDef != null) { if (forceDef.requiresAlignment) { if (forceDef.requiredAlignmentType != ForceAlignmentType.Gray && forceDef.requiredAlignmentType != this.ForceAlignmentType) { reason = "WrongAlignment"; return(false); } } if (ForcePool != null) { if (forceDef.forcePoolCost > 0 && forceDef.forcePoolCost > ForcePool.CurLevel) { reason = "DrainedForcePool"; return(false); } } } return(true); }
public override void PostAbilityAttempt(Pawn caster, AbilityDef ability) { ForceAbilityDef forceDef = ability as ForceAbilityDef; if (forceDef != null) { if (forceDef.changedAlignmentType != ForceAlignmentType.None) { //Log.Message("Alignment: " + AlignmentValue.ToStringPercent()); //Log.Message("Alignment Change: " + forceDef.changedAlignmentRate.ToStringPercent()); AlignmentValue += forceDef.changedAlignmentRate; //Log.Message("New Alignment: " + AlignmentValue.ToStringPercent()); UpdateAlignment(); } if (ForcePool != null) { float poolCost = 0f; //Log.Message("PC" + forceDef.forcePoolCost.ToString()); poolCost = forceDef.forcePoolCost - (forceDef.forcePoolCost * (0.15f * (float)ForceSkillLevel("PJ_ForcePool"))); //Log.Message("PC" + poolCost.ToString()); ForcePool.UseForcePower(poolCost); } } }
/// <summary> /// This section checks what force abilities were used, and thus their effect on the Jedi's force powers. /// </summary> public override void PostCastAbilityEffects(Verb_UseAbility verbAbility) { ForceAbilityDef forceDef = (ForceAbilityDef)verbAbility.useAbilityProps.abilityDef; if (forceDef != null) { if (ForcePool != null) { float value = ForcePool.CurLevel - forceDef.forcePoolCost; ForcePool.CurLevel = Mathf.Clamp(value, 0.01f, 0.99f); } } }
/// <summary> /// Shows the required alignment (optional), /// alignment change (optional), /// and the force pool usage /// </summary> /// <param name="verb"></param> /// <returns></returns> public override string PostAbilityVerbDesc(Verb_UseAbility verb) { string result = ""; StringBuilder postDesc = new StringBuilder(); ForceAbilityDef forceDef = (ForceAbilityDef)verb.useAbilityProps.abilityDef; if (forceDef != null) { string alignDesc = ""; string changeDesc = ""; string pointsDesc = ""; if (forceDef.requiresAlignment) { alignDesc = "ForceAbilityDescAlign".Translate(new object[] { forceDef.requiredAlignmentType.ToString(), }); } if (forceDef.changesAlignment) { changeDesc = "ForceAbilityDescChange".Translate(new object[] { forceDef.changedAlignmentType.ToString(), forceDef.changedAlignmentRate.ToString("p1") }); } pointsDesc = "ForceAbilityDescPoints".Translate(new object[] { forceDef.forcePoolCost.ToString("p1") }); if (alignDesc != "") { postDesc.AppendLine(alignDesc); } if (changeDesc != "") { postDesc.AppendLine(changeDesc); } if (pointsDesc != "") { postDesc.AppendLine(pointsDesc); } result = postDesc.ToString(); } return(result); }
/// <summary> /// Shows the required alignment (optional), /// alignment change (optional), /// and the force pool usage /// </summary> /// <param name="verb"></param> /// <returns></returns> public override string PostAbilityVerbCompDesc(VerbProperties_Ability verbDef) { string result = ""; StringBuilder postDesc = new StringBuilder(); ForceAbilityDef forceDef = (ForceAbilityDef)verbDef.abilityDef; if (forceDef != null) { string alignDesc = ""; string changeDesc = ""; string pointsDesc = ""; if (forceDef.changedAlignmentType != ForceAlignmentType.None) { alignDesc = "ForceAbilityDescAlign".Translate(new object[] { forceDef.requiredAlignmentType.ToString(), }); } if (forceDef.changedAlignmentType != ForceAlignmentType.None) { changeDesc = "ForceAbilityDescChange".Translate(new object[] { forceDef.changedAlignmentType.ToString(), forceDef.changedAlignmentRate.ToString("p1") }); } if (ForceSkillLevel("PJ_ForcePool") > 0) { float poolCost = 0f; //Log.Message("PC" + forceDef.forcePoolCost.ToString()); poolCost = forceDef.forcePoolCost - (forceDef.forcePoolCost * (0.15f * (float)ForceSkillLevel("PJ_ForcePool"))); pointsDesc = "ForceAbilityDescOriginPoints".Translate(new object[] { forceDef.forcePoolCost.ToString("p1") }) + "\n" + "ForceAbilityDescNewPoints".Translate(new object[] { poolCost.ToString("p1") }) ; } else { pointsDesc = "ForceAbilityDescPoints".Translate(new object[] { forceDef.forcePoolCost.ToString("p1") }); } if (alignDesc != "") { postDesc.AppendLine(alignDesc); } if (changeDesc != "") { postDesc.AppendLine(changeDesc); } if (pointsDesc != "") { postDesc.AppendLine(pointsDesc); } result = postDesc.ToString(); } return(result); }
public static void PowersGUIHandler(Rect inRect, CompForceUser compForce, List <ForcePower> forcePowers, Texture2D pointTexture) { float buttonYOffset = inRect.y; foreach (ForcePower power in forcePowers) { Rect buttonRect = new Rect(inRect.x, buttonYOffset, ForceButtonSize, ForceButtonSize); TooltipHandler.TipRegion(buttonRect, () => power.abilityDef.label + "\n\n" + power.abilityDef.description + "\n\n" + "PJ_CheckStarsForMoreInfo".Translate(), 398462); if (compForce.ForceData.AbilityPoints == 0 || power.level >= 3) { Widgets.DrawTextureFitted(buttonRect, power.Icon, 1.0f); } else if (Widgets.ButtonImage(buttonRect, power.Icon) && (compForce.AbilityUser.Faction == Faction.OfPlayer)) { ForceAbilityDef powerDef = power.nextLevelAbilityDef as ForceAbilityDef; if (powerDef.requiredAlignmentType != ForceAlignmentType.None && powerDef.requiredAlignmentType != compForce.ForceAlignmentType) { Messages.Message("PJ_NextLevelAlignmentMismatch".Translate(new object[] { powerDef.requiredAlignmentType.ToString(), compForce.ForceAlignmentType.ToString() }), MessageTypeDefOf.RejectInput); return; } if (compForce.LightsidePoints < powerDef.lightsideTreePointsRequired) { Messages.Message("PJ_LightsidePointsRequired".Translate(new object[] { powerDef.lightsideTreePointsRequired }), MessageTypeDefOf.RejectInput); return; } if (compForce.DarksidePoints < powerDef.darksideTreePointsRequired) { Messages.Message("PJ_DarksidePointsRequired".Translate(new object[] { powerDef.darksideTreePointsRequired }), MessageTypeDefOf.RejectInput); return; } if (compForce.ForceData.AbilityPoints < powerDef.abilityPoints) { Messages.Message("PJ_NotEnoughAbilityPoints".Translate(new object[] { compForce.ForceData.AbilityPoints, powerDef.abilityPoints }), MessageTypeDefOf.RejectInput); return; } if (compForce.AbilityUser.story != null && (compForce.AbilityUser.WorkTagIsDisabled(WorkTags.Violent) && power.abilityDef.MainVerb.isViolent)) { Messages.Message("IsIncapableOfViolenceLower".Translate(new object[] { compForce.parent.LabelShort }), MessageTypeDefOf.RejectInput); return; } compForce.LevelUpPower(power); compForce.ForceData.AbilityPoints -= powerDef.abilityPoints; } for (int i = 0; i < 3; i++) { float drawXOffset = ForceButtonSize + 1f; if (i != 0) { drawXOffset += (ForceButtonPointSize * i); } float drawYOffset = buttonYOffset + (ForceButtonSize / 3f); Rect powerRegion = new Rect(inRect.x + drawXOffset, drawYOffset, ForceButtonPointSize, ForceButtonPointSize); if (power.level > i) { Widgets.DrawTextureFitted(powerRegion, pointTexture, 1.0f); } else { Widgets.DrawTextureFitted(powerRegion, TexButton.PJTex_ForcePointDim, 1.0f); } ForceAbilityDef powerDef = power.GetAbilityDef(i) as ForceAbilityDef; if (powerDef != null) { TooltipHandler.TipRegion(powerRegion, () => powerDef.GetDescription() + "\n" + compForce.PostAbilityVerbCompDesc(powerDef.MainVerb) + "\n" + powerDef.GetPointDesc(), 398462); } } buttonYOffset += ForceButtonSize + 1; } }