public void OnUnEquip(ACharacter character) { foreach (string targetStat in EquipEffects.Keys) { ((AbstractStat)character.myStats[targetStat]).Value -= EquipEffects[targetStat]; } }
public void SetZeroHP(ACharacter defender) { if (defender.CharacterStatus.CurrentHP <= 0) { defender.CharacterStatus.CurrentHP = 0; } }
public int Action(ACharacter attacker, ACharacter defender) { var level = attacker.CharacterStats.LVL; var attackerTemperBuff = attacker.CharacterBuffsDebuff.BuffsDebuffsValueList[0]; var attackerBreakBuff = attacker.CharacterBuffsDebuff.BuffsDebuffsValueList[3]; var attack = attacker.CharacterStats.ATK + attackerTemperBuff - attackerBreakBuff; var defenderProtectBuff = defender.CharacterBuffsDebuff.BuffsDebuffsValueList[2]; var defenderBreakBuff = defender.CharacterBuffsDebuff.BuffsDebuffsValueList[3]; var defense = defender.CharacterStats.DEF + defenderProtectBuff - defenderProtectBuff; var damage = (int)Math.Round((((attack + level) * 5) - defense)); if (damage <= 0) { damage = 1; } attacker.CharacterStatus.CurrentSP = 0; defender.CharacterStatus.CurrentHP -= damage; SetZeroHP(defender); return(damage); }
public void RemoveCharacter(ACharacter character) { if (Characters.Contains(character)) { Console.WriteLine("Attempted to remove nonexistance character in " + Name + ", they were " + character); } }
public void SetMaxHP(ACharacter defender) { if (defender.CharacterStatus.CurrentHP > defender.CharacterStats.HP) { defender.CharacterStatus.CurrentHP = defender.CharacterStats.HP; } }
private void SetIdleLastCharacter(ACharacter c) { var animID = 0; int Row = 0; Canvas Canvas = null; string path = ""; if (c is PlayerCharacter) { var player = (PlayerCharacter)c; Row = App.charactersLists.GetPlayerRow(player); Canvas = (Canvas)PlayerField.Children[Row]; path = App.resourcePaths.GetPlayerPath(c.CharacterID); Grid.SetRow(Canvas, Row); Grid.SetColumn(Canvas, 1); if (player.CharacterStatus.CheckDying(player)) { animID = 5; } } else if (c is EnemyCharacter) { var enemy = (EnemyCharacter)c; Row = App.charactersLists.GetEnemyRow(enemy); Canvas = (Canvas)MonsterField.Children[Row]; path = App.resourcePaths.GetEnemyPath(c.CharacterID); } c.SwitchAnimation(Canvas, animID, path); }
public bool CanIEquip(ACharacter character) { foreach (BodyPart part in NeededParts) { if (!character.BodyParts.ContainsValue(part)) { return(false); } } foreach (BaseStat baseStat in MinBaseStats) { if (character.GetBaseStat(baseStat).Value < baseStat.Value) { return(false); } } foreach (DerivedStat derivedStat in MinDerivedStats) { if (character.GetDerivedStat(derivedStat).Value < derivedStat.Value) { return(false); } } return(true); }
public void RegisterCharacter(ACharacter character) { if (!Characters.Contains(character)) { Characters.Add(character); CameraFollow.Instance.RegisterTarget(character.CharacterTransform); } }
public Boost(ACharacter character, PlayerManager playerManager) { Name = "Boost"; Level = character.Ability1Level; EnergyDrainPerSecond = 1; IsActive = false; PlayerManager = playerManager; Character = character; }
public Freeze(ACharacter character, PlayerManager playerManager) { Name = "Freeze"; Level = character.Ability1Level; EnergyDrainPerSecond = 0; IsActive = false; PlayerManager = playerManager; Character = character; SetLoaded(); }
public Shield(ACharacter character, PlayerManager playerManager) { Name = "Shield"; Level = character.Ability2Level; EnergyDrainPerSecond = 0; IsActive = false; PlayerManager = playerManager; Character = character; SetLoaded(); }
public void AddCharacter(ACharacter newChar, bool allowDuplicates = false) { if (Characters.Contains(newChar) && !allowDuplicates) { Console.WriteLine("Duplicate Character in " + Name + " when trying to add " + newChar); } else { Characters.Add(newChar); } }
public int Action(ACharacter attacker, ACharacter defender) { var recovery = (int)Math.Round(attacker.CharacterStats.MAGATK + attacker.CharacterStats.LVL); attacker.CharacterStatus.CurrentMP -= Cost; defender.CharacterStatus.CurrentHP += recovery; SetMaxHP(defender); return(recovery); }
public int Action(ACharacter attacker, ACharacter defender) { var attackerTemperBuff = attacker.CharacterBuffsDebuff.BuffsDebuffsValueList[0]; var attackerBreakBuff = attacker.CharacterBuffsDebuff.BuffsDebuffsValueList[3]; var attack = attacker.CharacterStats.ATK + attackerTemperBuff - attackerBreakBuff; var defenderProtectBuff = defender.CharacterBuffsDebuff.BuffsDebuffsValueList[2]; var defenderBreakBuff = defender.CharacterBuffsDebuff.BuffsDebuffsValueList[3]; var defense = defender.CharacterStats.DEF + defenderProtectBuff - defenderProtectBuff; var player = (PlayerCharacter)attacker; if (player.CharacterClass is ClassVanguard) { attack *= 1.25; } else if (player.CharacterClass is ClassAssassin) { attack *= 2; } else if (player.CharacterClass is ClassMarksman) { attack *= 1.75; } else { attack *= 1.5; } var damage = (int)Math.Round((attack - defense)); if (damage <= 0) { damage = 1; } attacker.CharacterStatus.CurrentMP -= Cost; defender.CharacterStatus.CurrentHP -= damage; SetZeroHP(defender); return(damage); }
public int Action(ACharacter attacker, ACharacter defender) { var attack = attacker.CharacterStats.MAGATK * attacker.CharacterStats.RESFIRE; var defense = defender.CharacterStats.MAGDEF * defender.CharacterStats.RESFIRE; var damage = (int)Math.Round((attack - defense)); if (damage <= 0) { damage = 1; } else if (defender.CharacterStats.RESFIRE >= 2) { damage = 0; } defender.CharacterStatus.CurrentHP -= damage; SetZeroHP(defender); return(damage); }
public void ReadCharacter(int id) { MakeActive("CharacterGroup"); ACharacter chr = GameLogic.CharacterLogic.family [id]; GameObject photo = transform.Find("CharacterGroup").Find("CharacterPhoto").gameObject; if (chr.gender) { int index = 0; photo.SendMessage("ChangePhoto", index); } else if (!chr.gender) { int index = 1; photo.SendMessage("ChangePhoto", index); } string _text = " " + chr.familyName + " " + chr.givenName + " " + chr.age + "岁" + " " + chr.profession + " " + chr.mission.name; transform.Find("CharacterGroup").Find("CharacterInfomation").Find("Text").gameObject.GetComponent <Text> ().text = _text; }
private void CheckCharacterStatus(bool status, ACharacter last) { if (status) { if (last is PlayerCharacter) { var enemy = (EnemyCharacter)damageInfo.Target; App.charactersLists.CharacterOrder.Remove(enemy); setOnField.DeleteEnemyElement(enemy, App.charactersLists.EnemyList, MonsterField, EnemyMenu); setOnField.SetCharacterOrder(App.charactersLists, CharacterOrder); } else if (last is EnemyCharacter) { var player = (PlayerCharacter)damageInfo.Target; var playerCanvas = (Canvas)PlayerField.Children[App.charactersLists.GetPlayerRow(player)]; player.SwitchAnimation(playerCanvas, 6, App.resourcePaths.GetPlayerPath(player.CharacterID), null, 0, false); App.charactersLists.CharacterOrder.Remove(player); setOnField.SetCharacterOrder(App.charactersLists, CharacterOrder); } } damageInfo.DamageStop(); }
// pass bool = false to get the width of the line to be drawn without actually drawing anything. Useful for aligning text. unsafe void writeTexture_Line(List <AAtom> atoms, uint *rPtr, ref int x, int y, int linewidth, int maxHeight, ref int lineheight, bool draw) { for (int i = 0; i < atoms.Count; i++) { AFont font = TextUni.GetFont((int)atoms[i].Font); if (lineheight < font.Height) { lineheight = font.Height; } if (draw) { if (atoms[i] is CharacterAtom) { CharacterAtom atom = (CharacterAtom)atoms[i]; ACharacter character = font.GetCharacter(atom.Character); // HREF links should be colored white, because we will hue them at runtime. uint color = atom.IsHREF ? 0xFFFFFFFF : Utility.UintFromColor(atom.Color); character.WriteToBuffer(rPtr, x, y, linewidth, maxHeight, font.Baseline, atom.Style_IsBold, atom.Style_IsItalic, atom.Style_IsUnderlined, atom.Style_IsOutlined, color, 0xFF000008); } else if (atoms[i] is ImageAtom) { ImageAtom atom = (ImageAtom)atoms[i]; if (lineheight < atom.Height) { lineheight = atom.Height; } Images.AddImage(new Rectangle(x, y + (lineheight - atom.Height) / 2, atom.Width, atom.Height), atom.Texture, GumpData.GetGumpXNA(atom.ValueOver), GumpData.GetGumpXNA(atom.ValueDown)); atom.AssociatedImage = Images[Images.Count - 1]; } } x += atoms[i].Width; } }
void getTextDimensions(Reader reader, int maxwidth, int maxheight, out int width, out int height, out int ascender) { width = 0; height = 0; ascender = 0; int lineheight = 0; int widestline = 0; int descenderheight = 0; int linecount = 0; List <AAtom> word = new List <AAtom>(); int additionalwidth = 0; // for italic + outlined characters, which need a little more room for their slant/outline. int word_width = 0; for (int i = 0; i < reader.Length; ++i) { word_width += reader.Atoms[i].Width; additionalwidth -= reader.Atoms[i].Width; if (additionalwidth < 0) { additionalwidth = 0; } if (lineheight < reader.Atoms[i].Height) { lineheight = reader.Atoms[i].Height; } if (reader.Atoms[i].IsThisAtomALineBreak) { if (width + additionalwidth > widestline) { widestline = width + additionalwidth; } height += lineheight; linecount += 1; descenderheight = 0; lineheight = 0; width = 0; } else { word.Add(reader.Atoms[i]); // we may need to add additional width for special style characters. if (reader.Atoms[i] is CharacterAtom) { CharacterAtom atom = (CharacterAtom)reader.Atoms[i]; AFont font = TextUni.GetFont((int)atom.Font); ACharacter ch = font.GetCharacter(atom.Character); // italic characters need a little extra width if they are at the end of the line. if (atom.Style_IsItalic) { additionalwidth = font.Height / 2; } if (atom.Style_IsOutlined) { additionalwidth += 2; } if (ch.YOffset + ch.Height - lineheight > descenderheight) { descenderheight = ch.YOffset + ch.Height - lineheight; } if (ch.YOffset < 0 && linecount == 0 && ascender > ch.YOffset) { ascender = ch.YOffset; } } if (reader.Atoms[i].Alignment != Alignments.Left) { widestline = maxwidth; } if (i == reader.Length - 1 || reader.Atoms[i + 1].CanBreakAtThisAtom) { // Now make sure this line can fit the word. if (width + word_width + additionalwidth <= maxwidth) { // it can fit! width += word_width + additionalwidth; word_width = 0; word.Clear(); // if this word is followed by a space, does it fit? If not, drop it entirely and insert \n after the word. if (!(i == reader.Length - 1) && reader.Atoms[i + 1].IsThisAtomABreakingSpace) { int charwidth = reader.Atoms[i + 1].Width; if (width + charwidth <= maxwidth) { // we can fit an extra space here. width += charwidth; i++; } else { // can't fit an extra space on the end of the line. replace the space with a \n. ((CharacterAtom)reader.Atoms[i + 1]).Character = '\n'; } } } else { // this word cannot fit in the current line. if ((width > 0) && (i - word.Count >= 0)) { // if this is the last word in a line. Replace the last space character with a line break // and back up to the beginning of this word. if (reader.Atoms[i - word.Count].IsThisAtomABreakingSpace) { ((CharacterAtom)reader.Atoms[i - word.Count]).Character = '\n'; i = i - word.Count - 1; } else { reader.Atoms.Insert(i - word.Count, new CharacterAtom('\n')); i = i - word.Count; } word.Clear(); word_width = 0; } else { // this is the only word on the line and we will need to split it. // first back up until we've reached the reduced the size of the word // so that it fits on one line, and split it there. int iWordWidth = word_width; for (int j = word.Count - 1; j >= 1; j--) { int iDashWidth = TextUni.GetFont((int)word[j].Font).GetCharacter('-').Width; if (iWordWidth + iDashWidth <= maxwidth) { reader.Atoms.Insert(i - (word.Count - j) + 1, new CharacterAtom('\n')); reader.Atoms.Insert(i - (word.Count - j) + 1, new CharacterAtom('-')); break; } iWordWidth -= word[j].Width; } i -= word.Count + 2; if (i < 0) { i = -1; } word.Clear(); width = 0; word_width = 0; } } } } } width += additionalwidth; height += lineheight + descenderheight; linecount += 1; if (widestline > width) { width = widestline; } }
/// <summary> /// Pre-initialization of character component called on Awake /// </summary> /// <param name="controlledChar">Character using this component</param> public virtual void PreInitComponent(ACharacter controlledChar) { controlledCharacter = controlledChar; }
public virtual bool CanUnequip(ACharacter character) { // TODO Implement Curses? For now, return true return(true); }
public void Initialize(PlayerManager playerManager) { _characterController = playerManager.CharacterController; }
public List <ACharacter> GetOpponents(ACharacter myself) { return(AliveCharacters.FindAll(c => c != myself)); }
public void Setup() { EventBus.Clean(); character1 = ACharacter.Create(); character2 = ACharacter.Create(); }
private void PlayerAction(ACharacter activePlayer) { var player = (PlayerCharacter)activePlayer; string enemyCursor = Grid.GetRow(EnemyMenuCursor).ToString() + Grid.GetColumn(EnemyMenuCursor).ToString(); if (lastAction is BattlePageMenuAction) { var playerRow = App.charactersLists.GetPlayerRow(player); var enemy = App.charactersLists.EnemyList[TargetTranslate(enemyCursor)]; damageInfo = new DamageInfoVisibility(enemy); var playerCanvas = (Canvas)PlayerField.Children[playerRow]; Grid.SetRow(playerCanvas, Grid.GetRow(EnemyMenuCursor)); Grid.SetColumn(playerCanvas, 0); int damage = -1; if (lastAction.CurrentIndex == 0) { var behavior = player.BehaviorList[0]; damage = behavior.Action(player, enemy); player.SwitchAnimation(playerCanvas, 2, App.resourcePaths.GetPlayerPath(player.CharacterID), damageInfo.DamageTimer, 0, false); ShowEnemyDamage(damage.ToString(), enemy); } else if (lastAction.CurrentIndex == 2) { Grid.SetRow(playerCanvas, App.charactersLists.GetPlayerRow(player)); Grid.SetColumn(playerCanvas, 1); player.CharacterBuffsDebuff.SetDefense(player.CharacterStats); player.SwitchAnimation(playerCanvas, 7, App.resourcePaths.GetPlayerPath(player.CharacterID), damageInfo.DamageTimer, 0, false); ShowSkillName("Defense Up", true); ShowPlayerDamage("", player); } else if (lastAction.CurrentIndex == 4) { var behavior = player.BehaviorList[1]; damage = behavior.Action(player, enemy); ShowSkillName(behavior.Name, true); player.SwitchAnimation(playerCanvas, 4, App.resourcePaths.GetPlayerPath(player.CharacterID), damageInfo.DamageTimer, 0, false); player.CharacterStatus.ResetSP(); setOnField.SetPlayerStatus(App.charactersLists.GetPlayerRow(player), player, PlayerMenu); ShowEnemyDamage(damage.ToString(), enemy); } ResetTurn(); } else if (lastAction is BattlePageSubMenuAction) { var playerRow = App.charactersLists.GetPlayerRow(player); var behaviorList = player.BehaviorList.GetRange(2, player.BehaviorList.Count - 2); var playerCanvas = (Canvas)PlayerField.Children[playerRow]; var behavior = behaviorList[lastAction.CurrentIndex]; ShowSkillName(behavior.Name, true); var damage = 0; if (menuAction is BattlePageTargetMenuAction) { var enemy = App.charactersLists.EnemyList[TargetTranslate(enemyCursor)]; damageInfo = new DamageInfoVisibility(enemy); Grid.SetRow(playerCanvas, Grid.GetRow(EnemyMenuCursor)); Grid.SetColumn(playerCanvas, 0); damage = behavior.Action(player, enemy); if (behavior is SkillAttackBehavior) { player.SwitchAnimation(playerCanvas, 2, App.resourcePaths.GetPlayerPath(player.CharacterID), damageInfo.DamageTimer, 0, false); } else { player.SwitchAnimation(playerCanvas, 3, App.resourcePaths.GetPlayerPath(player.CharacterID), damageInfo.DamageTimer, 4); } setOnField.SetPlayerStatus(App.charactersLists.GetPlayerRow(player), player, PlayerMenu); ShowEnemyDamage(damage.ToString(), enemy); } else if (menuAction is BattlePagePlayerMenuAction) { var target = App.charactersLists.PlayerList[menuAction.CurrentIndex]; damageInfo = new DamageInfoVisibility(target); damage = behavior.Action(player, target); player.SwitchAnimation(playerCanvas, 3, App.resourcePaths.GetPlayerPath(player.CharacterID), damageInfo.DamageTimer, 4); setOnField.SetPlayerStatus(App.charactersLists.GetPlayerRow(target), target, PlayerMenu); ShowPlayerDamage(damage.ToString(), target); } ResetTurn(); } }
/** Update CurentTimeStamp from passed in DeltaTime. * It will measure the accuracy between passed in DeltaTime and how Server will calculate its DeltaTime. * If inaccuracy is too high, it will reset CurrentTimeStamp to maintain a high level of accuracy. * @return DeltaTime to use for Client's physics simulation prior to replicate move to server. */ public float UpdateTimeStampAndDeltaTime(float DeltaTime, ACharacter& CharacterOwner, class UCharacterMovementComponent& CharacterMovementComponent);
public virtual bool CanEquip(ACharacter character) { return(eReqs.CanIEquip(character)); }