Example #1
0
 public void OnUnEquip(ACharacter character)
 {
     foreach (string targetStat in EquipEffects.Keys)
     {
         ((AbstractStat)character.myStats[targetStat]).Value -= EquipEffects[targetStat];
     }
 }
Example #2
0
 public void SetZeroHP(ACharacter defender)
 {
     if (defender.CharacterStatus.CurrentHP <= 0)
     {
         defender.CharacterStatus.CurrentHP = 0;
     }
 }
Example #3
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);
        }
Example #4
0
 public void RemoveCharacter(ACharacter character)
 {
     if (Characters.Contains(character))
     {
         Console.WriteLine("Attempted to remove nonexistance character in " + Name + ", they were " + character);
     }
 }
Example #5
0
 public void SetMaxHP(ACharacter defender)
 {
     if (defender.CharacterStatus.CurrentHP > defender.CharacterStats.HP)
     {
         defender.CharacterStatus.CurrentHP = defender.CharacterStats.HP;
     }
 }
Example #6
0
        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);
        }
Example #8
0
 public void RegisterCharacter(ACharacter character)
 {
     if (!Characters.Contains(character))
     {
         Characters.Add(character);
         CameraFollow.Instance.RegisterTarget(character.CharacterTransform);
     }
 }
Example #9
0
 public Boost(ACharacter character, PlayerManager playerManager)
 {
     Name  = "Boost";
     Level = character.Ability1Level;
     EnergyDrainPerSecond = 1;
     IsActive             = false;
     PlayerManager        = playerManager;
     Character            = character;
 }
Example #10
0
 public Freeze(ACharacter character, PlayerManager playerManager)
 {
     Name  = "Freeze";
     Level = character.Ability1Level;
     EnergyDrainPerSecond = 0;
     IsActive             = false;
     PlayerManager        = playerManager;
     Character            = character;
     SetLoaded();
 }
Example #11
0
 public Shield(ACharacter character, PlayerManager playerManager)
 {
     Name  = "Shield";
     Level = character.Ability2Level;
     EnergyDrainPerSecond = 0;
     IsActive             = false;
     PlayerManager        = playerManager;
     Character            = character;
     SetLoaded();
 }
Example #12
0
 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);
     }
 }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #15
0
        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);
        }
Example #16
0
    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;
    }
Example #17
0
        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();
        }
Example #18
0
        // 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;
            }
        }
Example #19
0
        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;
            }
        }
Example #20
0
 /// <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;
 }
Example #21
0
        public virtual bool CanUnequip(ACharacter character)
        {
            // TODO Implement Curses? For now, return true

            return(true);
        }
 public void Initialize(PlayerManager playerManager)
 {
     _characterController = playerManager.CharacterController;
 }
Example #23
0
 public List <ACharacter> GetOpponents(ACharacter myself)
 {
     return(AliveCharacters.FindAll(c => c != myself));
 }
 public void Setup()
 {
     EventBus.Clean();
     character1 = ACharacter.Create();
     character2 = ACharacter.Create();
 }
Example #25
0
        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();
            }
        }
Example #26
0
 /** 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);
Example #27
0
 public virtual bool CanEquip(ACharacter character)
 {
     return(eReqs.CanIEquip(character));
 }