void ChargeBoost(MonsterCharacter.ChargeRegenFrame frame) { if (RechargesCells) { if (owner.ammunition[5] < owner.maxAmmo[5]) { if (owner.ChargePoints >= owner.MaxChargePoints) { owner.ChargePoints -= ChargeCostForRecharge; owner.ammunition[5]++; } } } frame.RechargeAmount *= 100 + ChargeBonus; frame.RechargeAmount /= 100; }
private void Awake() { Messaging.GUI.ActiveSlot.Invoke(-1); character = GetComponent <MonsterCharacter>(); character.OnInputRequest = FillInputFrame; character.OnDeath.AddListener(() => { OnDeath(); }); character.OnDamage.AddListener((_) => { Messaging.GUI.Painflash.Invoke(.25f); }); character.OnWeaponChange.AddListener((i) => { PlayerInfo.CurrentLocal.LastPlayerWeaponSwap = i; Messaging.GUI.ActiveSlot.Invoke(i); if (i >= 0 && i < character.weapons.Length && character.weapons[i] != null) { Messaging.GUI.LeftAbilityIcon.Invoke(character.weapons[i].LeftAbilitySprite); Messaging.GUI.RightAbilityIcon.Invoke(character.weapons[i].RightAbilitySprite); } else { Messaging.GUI.LeftAbilityIcon.Invoke(null); Messaging.GUI.RightAbilityIcon.Invoke(null); } }); GetComponent <ThingController>().GridPosChanged.AddListener((p) => { Messaging.Player.PlayerGridPosition.Invoke(p); int r = Room.GetRoomIndex(p); if (r != -1) { Messaging.Player.PlayerEnterRoom.Invoke(r); } }); PlayerInfo.CurrentLocal.PlayerHasBeenInitialized = true; character.OnDeserialize.AddListener(() => { Messaging.CameraControl.Spectator.Invoke(false); Messaging.CameraControl.RemoveShake.Invoke(); Messaging.CameraControl.TargetPosition.Invoke(transform.position); Messaging.CameraControl.TargetRotation.Invoke(0); Messaging.CameraControl.SpeedMultiplier.Invoke(1f); Messaging.CameraControl.Teleport.Invoke(); }); Messaging.Player.EquipPlayerItems.AddListener(() => { for (int w = 0; w < Mathf.Min(PlayerInfo.CurrentLocal.PlayerWeapons.Length, character.weapons.Length); w++) { if (PlayerInfo.CurrentLocal.PlayerWeapons == null) { character.weapons[w] = null; continue; } character.weapons[w] = PlayerInfo.CurrentLocal.PlayerWeapons[w]; } for (int s = 0; s < Mathf.Min(PlayerInfo.CurrentLocal.PlayerSkills.Length, character.Skills.Length); s++) { if (PlayerInfo.CurrentLocal.PlayerSkills == null) { character.Skills[s] = null; continue; } character.Skills[s] = PlayerInfo.CurrentLocal.PlayerSkills[s]; } SetActionBarIcons(); }); Messaging.Player.ForceHolster.AddListener(() => { character.UnEquip(); }); Messaging.Player.DeActivateSkill.AddListener((i) => { character.Skills[i]?.DeActivate(character, i); }); Messaging.Player.ActivateAccessory.AddListener((i) => { if (i >= 0 && i < PlayerInfo.CurrentLocal.PlayerAccessories.Length) { PlayerInfo.CurrentLocal.PlayerAccessories[i]?.Activate(character); } }); Messaging.Player.DeActivateAccessory.AddListener((i) => { if (i >= 0 && i < PlayerInfo.CurrentLocal.PlayerAccessories.Length) { PlayerInfo.CurrentLocal.PlayerAccessories[i]?.DeActivate(character); } }); Messaging.Player.AddTalent.AddListener((talent) => { if (PlayerInfo.CurrentLocal.TalentPoints <= 0) { Messaging.GUI.ScreenMessage.Invoke("NOT ENOUGH TALENT POINTS!", Color.red); return; } PlayerInfo.CurrentLocal.Talents.Add(talent); talent.Activate(character); PlayerInfo.CurrentLocal.TalentPoints--; Messaging.Player.TalentPoints.Invoke(PlayerInfo.CurrentLocal.TalentPoints); }); Messaging.Player.RemoveTalent.AddListener((talent) => { if (!PlayerInfo.CurrentLocal.Talents.Contains(talent)) { Debug.LogError("PlayerControls: RemoveTalent: talent \"" + talent.name + "\" not found in PlayerInfo.CurrentLocal.Talents"); return; } talent.DeActivate(character); PlayerInfo.CurrentLocal.Talents.Remove(talent); PlayerInfo.CurrentLocal.TalentPoints++; Messaging.Player.TalentPoints.Invoke(PlayerInfo.CurrentLocal.TalentPoints); }); Messaging.Player.GetLocalPlayerStats = () => { MonsterCharacter.ChargeRegenFrame frame = new MonsterCharacter.ChargeRegenFrame { RechargeAmount = character.ChargeRegenPerTick }; character.OnChargeRegen.Invoke(frame); return(new PlayerStats() { MaxHealth = character.MaxHitPoints / 1000, MaxCharge = character.MaxChargePoints / 1000, Armor = character.Armor, MovementSpeed = character.walkSpeed, ChargeRegen = (float)frame.RechargeAmount * 50f / 1000f, DamageDecay = (float)character.SoftDamageDecayPerTick * 50f / 1000f, }); }; Messaging.Player.Invulnerable.AddListener((b) => { character.Invulnerable = b; }); Messaging.GUI.OpenCanvas.Invoke("GameCanvas"); }
void TalentBonus(MonsterCharacter.ChargeRegenFrame frame) => frame.RechargeAmount *= 2;