Example #1
0
    void Update()
    {
        lifetime -= Time.deltaTime;

        if (lifetime < 0)
        {
            Explode();
        }
        else if (torpedoShip.Target)
        {
            /* if target dies, the ship will just keep moving towards its
            last position */
            var toTarget = torpedoShip.Target.transform.position - transform.position;
            
            var dist2 = toTarget.sqrMagnitude;
            var proximity2 = explodeProximity * explodeProximity;

            if (dist2 < proximity2)
            {
                //TODO: damage in a sphere instead
                var damage = new HitDamage(transform.position, explodeDamage, owner);

                torpedoShip.Target.SendMessage("OnTakeDamage", damage, SendMessageOptions.DontRequireReceiver);

                Explode();
            }
            else
            {
                torpedoShip.ResetControls(thrust: 1);
                torpedoShip.RotateToDirection(toTarget.normalized);
            }
        }
    }
Example #2
0
        public static void CheckHitEffectAfter(LiveMonster src, LiveMonster dest, HitDamage dam)
        {
            if (!src.BuffManager.HasBuff(BuffEffectTypes.NoSkill))
            {
                src.SkillManager.CheckHitEffectAfter(src, dest, dam);
            }

            if (!dest.BuffManager.HasBuff(BuffEffectTypes.NoSkill))
            {
                dest.SkillManager.CheckHitEffectAfter(src, dest, dam);
            }
        }
Example #3
0
        public static HitDamage GetDamage(LiveMonster src, LiveMonster dest)
        {
            HitDamage damage;
            double    attrRateOn = 1; //属性相克的伤害修正
            bool      isCrt      = false;

            if (dest.Avatar.MonsterConfig.AttrDef != null)
            {
                attrRateOn -= dest.Avatar.MonsterConfig.AttrDef[src.AttackType];
            }

            if (src.RealCrt > 0)//存在暴击率
            {
                if (MathTool.GetRandom(100) < src.RealCrt * GameConstants.CrtToRate)
                {
                    attrRateOn *= (GameConstants.DefaultCrtDamage + src.CrtDamAddRate);
                    isCrt       = true;
                }
            }

            var realAttackType = MonsterBook.HasTag(src.CardId, "mattack") ? src.Attr : src.AttackType;

            if (realAttackType == 0)                                                                                              //物理攻击
            {
                var damValue      = Math.Max(1, (int)(src.RealAtk * (1 - FormulaBook.GetPhyDefRate(dest.RealDef)) * attrRateOn)); //至少有1点伤害
                var noDefDamValue = (int)(src.RealAtk * attrRateOn);
                damage = new HitDamage(damValue, noDefDamValue, 0, DamageTypes.Physical);
            }
            else
            {
                var damValue = (int)(src.RealAtk * (1 + src.RealMag * GameConstants.MagToRate) * (1 - FormulaBook.GetMagDefRate(dest.RealMag)) * attrRateOn);
                damage = new HitDamage(damValue, damValue, realAttackType, DamageTypes.Magic);
                dest.CheckMagicDamage(damage);
            }
            damage.IsCrt = isCrt;

            bool nodef = false; //无视防御

            if (!src.BuffManager.HasBuff(BuffEffectTypes.NoSkill))
            {
                src.SkillManager.CheckDamage(src, dest, true, damage, ref nodef);
            }
            if (!dest.BuffManager.HasBuff(BuffEffectTypes.NoSkill))
            {
                dest.SkillManager.CheckDamage(src, dest, false, damage, ref nodef);
            }

            damage.SetDamage(DamageTypes.All, damage.Value);
            return(damage);
        }
Example #4
0
 public FlowDamageInfo(HitDamage dam, Point point)
     : base("", point, 3, "Coral", 0, -10, 0, 2, 30)
 {
     damage = dam;
     word   = damage.Value.ToString();
     if (damage.IsCrt)
     {
         size += 6;//±©»÷×ÖÌå·Å´ó£¬Òƶ¯ËٶȼõÂý
         font.Dispose();
         font = new Font("΢ÈíÑźÚ", this.size * 1.33f, FontStyle.Bold, GraphicsUnit.Pixel);
         speedY--; //-4
         word = damage.Value.ToString() + "!";
     }
 }
Example #5
0
        private void CheckDamageBuffEffect(LiveMonster src, HitDamage dam)
        {
            if (dam.Dtype == DamageTypes.Physical)
            {
                if (BuffManager.HasBuff(BuffEffectTypes.Chaos) && MathTool.GetRandom(100) < 25)
                {
                    src.HpBar.OnDamage(dam);
                    dam.SetDamage(DamageTypes.Physical, 0);
                }
            }

            if (BuffManager.HasBuff(BuffEffectTypes.Shield))
            {
                dam.SetDamage(DamageTypes.All, 1);
            }
        }
Example #6
0
        public void OnDamage(HitDamage damage)
        {
            BattleManager.Instance.StatisticData.GetPlayer(!self.IsLeft).DamageTotal += damage.Value;

            if (damage.Dtype != DamageTypes.Magic && PArmor > 0)
            {
                AddPArmor(-damage.Value);
                return;
            }
            if (damage.Dtype != DamageTypes.Physical && MArmor > 0)
            {
                AddMArmor(-damage.Value);
                return;
            }
            Life -= damage.Value;
            BattleManager.Instance.FlowWordQueue.Add(new FlowDamageInfo(damage, self.CenterPosition), false);//掉血显示
        }
Example #7
0
        public void CheckHitEffectAfter(LiveMonster src, LiveMonster dest, HitDamage damage, int key)
        {
            if (SkillInfo.SkillConfig.AfterHit != null)
            {
                SkillInfo.SkillConfig.AfterHit(SkillInfo, src, dest, damage, Level);
                SendSkillIcon(key);
                if (SkillInfo.SkillConfig.EffectArea != "")
                {
                    SendAreaEffect(SkillInfo.SkillConfig.PointSelf ? Self.Position : dest.Position);
                }
            }

            if (SkillInfo.SkillConfig.DeathHit != null && !dest.IsAlive)
            {
                SkillInfo.SkillConfig.DeathHit(SkillInfo, src, dest, damage, Level);
                SendSkillIcon(key);
                if (SkillInfo.SkillConfig.EffectArea != "")
                {
                    SendAreaEffect(SkillInfo.SkillConfig.PointSelf ? Self.Position : dest.Position);
                }
            }
        }
 void OnTakeDamage(HitDamage damage)
 {
     ai.ClearTasks();
 }
	void OnTakeDamage(HitDamage damage)
	{
		TakeDamage(damage.Amount);
	}
    public void Hit(HitDamage place)
    {
        if (place == HitDamage.Left && !(place == HitDamage.Right && place == HitDamage.Full))
        {
            hp = hp - FruitKill.hitDamge;
            if (hp >= 100)
            {
                blade1.SetActive(true);
                blade2.SetActive(true);
                blade3.SetActive(true);
                blade4.SetActive(true);
                blade5.SetActive(true);
            }

            if (hp <= 99 && hp >= 50)
            {
                blade1.SetActive(false);
                blade2.SetActive(true);
                blade3.SetActive(false);
                blade4.SetActive(false);
                blade5.SetActive(false);
            }
            if (hp < 50 && hp >= 20)
            {
                blade1.SetActive(false);
                blade2.SetActive(false);
                blade3.SetActive(true);
                blade4.SetActive(false);
                blade5.SetActive(false);
            }
            if (hp < 20 && hp >= 1)
            {
                blade1.SetActive(false);
                blade2.SetActive(false);
                blade3.SetActive(false);
                blade4.SetActive(true);
                blade5.SetActive(false);
            }
            if (hp <= 0)
            {
                blade1.SetActive(false);
                blade2.SetActive(false);
                blade3.SetActive(false);
                blade4.SetActive(false);
                blade5.SetActive(true);

                OnPlayerDied();
                hp = 100;
            }
        }

        if (place == HitDamage.Right && !(place == HitDamage.Left && place == HitDamage.Full))
        {
            hp = hp - 10;
            if (hp == 100)
            {
                blade1.SetActive(true);
                blade2.SetActive(true);
                blade3.SetActive(true);
                blade4.SetActive(true);
                blade5.SetActive(true);
            }

            if (hp == 90)
            {
                blade1.SetActive(false);
                blade2.SetActive(true);
                blade3.SetActive(false);
                blade4.SetActive(false);
                blade5.SetActive(false);
            }
            if (hp == 60)
            {
                blade1.SetActive(false);
                blade2.SetActive(false);
                blade3.SetActive(true);
                blade4.SetActive(false);
                blade5.SetActive(false);
            }
            if (hp == 30)
            {
                blade1.SetActive(false);
                blade2.SetActive(false);
                blade3.SetActive(false);
                blade4.SetActive(true);
                blade5.SetActive(false);
            }
            if (hp <= 0)
            {
                blade1.SetActive(false);
                blade2.SetActive(false);
                blade3.SetActive(false);
                blade4.SetActive(false);
                blade5.SetActive(true);

                OnPlayerDied();
                hp = 100;
            }
        }
    }
Example #11
0
        public void NextAction(float pastRound)
        {
            LeftCount  = 0;
            RightCount = 0;
            List <int> removeMids = new List <int>();

            foreach (var mon in monsters)
            {
                var rival = mon.Rival as Player;
                if (rival.DirectDamage > 0)
                {
                    HitDamage damage = new HitDamage(rival.DirectDamage, rival.DirectDamage, 0, DamageTypes.Magic);
                    mon.HpBar.OnDamage(damage);
                }
                if (!mon.IsAlive)
                {
                    if (!mon.IsGhost)
                    {
                        mon.OnDie();
                    }
                    else
                    {
                        if (mon.OwnerPlayer.SpikeManager.HasSpike("grave") || (mon.Rival as Player).SpikeManager.HasSpike("grave"))
                        {
                            mon.GhostTime += 0.005f;
                        }
                        else
                        {
                            mon.GhostTime += 0.01f;
                        }
                        if (mon.GhostTime >= 1)
                        {
                            removeMids.Add(mon.Id);
                        }
                    }
                }
                else
                {
                    if (!mon.IsLeft)
                    {
                        RightCount = RightCount + 1;
                    }
                    else
                    {
                        LeftCount = LeftCount + 1;
                    }
                }
            }
            BattleManager.Instance.PlayerManager.LeftPlayer.DirectDamage  = 0;//伤害清除
            BattleManager.Instance.PlayerManager.RightPlayer.DirectDamage = 0;

            foreach (int mid in removeMids)
            {
                Remove(mid);
            }


            foreach (var roundMonster in monsters)
            {
                if (roundMonster.IsGhost)
                {
                    continue;
                }

                int tile  = BattleManager.Instance.MemMap.GetMouseCell(roundMonster.Position.X, roundMonster.Position.Y).Tile;
                var match = TileBook.IsTileMatch(tile, roundMonster.Avatar.MonsterConfig.Attr);
                roundMonster.Next(pastRound, match);
            }

            foreach (var lm in toAdd)//添加延时怪
            {
                Add(lm);
            }
            toAdd.Clear();
        }