コード例 #1
0
        private IVisualEffect?GetAttackVisualEffect(IGraphNode targetNode, Vector2 targetSpritePosition,
                                                    ActDescription usedActDescription)
        {
            // Selection actors only is prevention of a error when a monster stays on a loot bag.
            var actorViewModels  = _sectorViewModelContext.GameObjects.Where(x => x is IActorViewModel);
            var targetGameObject = actorViewModels.SingleOrDefault(x => x.Node == targetNode);

            if (targetGameObject is null)
            {
                // This means the attacker missed.
                // This situation can be then the target actor moved before the attack reaches the target.
                return(null);
            }

            var difference        = targetSpritePosition - _rootSprite.Position;
            var hitEffectPosition = (difference / 2) + _rootSprite.Position + HitEffectPosition;
            var direction         = difference;

            direction.Normalize();

            var hitEffect = new HitEffect(this, targetGameObject, _gameObjectVisualizationContentStorage,
                                          hitEffectPosition, direction, usedActDescription);

            _sectorViewModelContext.EffectManager.VisualEffects.Add(hitEffect);

            return(hitEffect);
        }
コード例 #2
0
        private void ShowHitAnimation(int deltaTurns)
        {
            Vector3 startDirection = Vector3.zero;

            startDirection.x = 90f;
            startDirection.z = m_Player.m_FistTransform.localRotation.eulerAngles.z;
            // make opposite
            startDirection.z += 180;
            // count step of changing angle, use half plain
            float angleStep = 180 / deltaTurns;

            startDirection.z = startDirection.z - 90 + angleStep / 2;

            for (int i = 0; i < deltaTurns; i++)
            {
                // create effect and setup its geometry
                HitEffect effect = Instantiate <HitEffect> (m_HitEffect, m_Player.m_Transform.parent);
                effect.transform.position      = m_Player.m_FistTransform.position;
                effect.transform.localRotation = Quaternion.Euler(startDirection);
                // set effect parameters
                effect.m_AnimationLength        = HitAnimationLength;
                effect.m_AnimationDistanceDelta = HitAnimationDistanceDelta;
                // shift to next angle
                startDirection.z = startDirection.z + angleStep;
            }
        }
コード例 #3
0
 // Start is called before the first frame update
 void Start()
 {
     originalPosition = transform.position;
     originalRotation = transform.rotation;
     animator         = GetComponentInChildren <Animator>();
     _hitEffect       = GetComponentInChildren <HitEffect>();
 }
コード例 #4
0
ファイル: Teleport.cs プロジェクト: qwo330/Stack
    void ShowSkillEffect(Vector3 position)
    {
        HitEffect effect = ObjectPool.Get.GetObject(Defines.key_HitEffect).GetComponent <HitEffect>();

        effect.transform.position = position + Vector3.back;
        effect.ShowEffect();
    }
コード例 #5
0
ファイル: Bullet.cs プロジェクト: samafshar/MenOfFreedom
    private void MarkHitDecal(HitEffect effect, RaycastHit hitInfo)
    {
        if (hitInfo.collider.renderer == null)
        {
            return;
        }

        if (effect.Hit_Texture.Length == 0)
        {
            Debug.LogError("no texture in decal");
            return;
        }

        if (MarkObject != null)
        {
            GameObject markObj = GameObject.Instantiate(MarkObject, hitInfo.point,
                                                        Quaternion.FromToRotation(Vector3.up, hitInfo.normal)) as GameObject;

            MarkHandler markHandler = markObj.GetComponent <MarkHandler>();
            markHandler.GenerateMark(effect.Hit_Texture[Random.Range(0, effect.Hit_Texture.Length)],
                                     hitInfo);
        }

        #region Decal On All Surface Performance problem
        //GameObject obj = GameObject.Instantiate(DecalObject, hitInfo.point,
        //                        Quaternion.FromToRotation(Vector3.forward, -hitInfo.normal)) as GameObject;
        //DecalHandler decalHandler = obj.GetComponent<DecalHandler>();
        //decalHandler.GenerateDecal(effect.Hit_Texture[Random.Range(0, effect.Hit_Texture.Length)],
        //                                    hitInfo.collider.gameObject);
        #endregion
    }
コード例 #6
0
    protected override void OnBeginHumanState(HumanState state)
    {
        if (state == HumanState.Dying)
        {
            TrashWorld.Instance.DecrementWasters();

            ThrowItem();

            StopAllCoroutines();

            CachedAnimator.enabled       = false;
            CachedRigidbody2D.fixedAngle = false;

            HitEffect h = GameObject.Instantiate(deathEffect) as HitEffect;

            h.SetEffect(CachedTransform.position, 0f, deathColor, AnnouncementType.Kill);

            //TrashUIManager.Instance.MakeAnnouncement (announcementBind, AnnouncementType.Kill, 0f);

            TemporarilyEnableRagdoll();
        }
        else if (state == HumanState.Idle)
        {
            BeginIdle();
        }
    }
コード例 #7
0
ファイル: Unit.cs プロジェクト: makscee/SquareFast
 private void _TakeDmgAnim()
 {
     HitEffect.Create(transform.position, this);
     if (HP <= 0)
     {
         Destroy(gameObject);
     }
 }
コード例 #8
0
    private void Start()
    {
        animationScaredTrigger = Animator.StringToHash("Scared");

        rb     = GetComponent <Rigidbody2D>();
        hit    = GetComponentInChildren <HitEffect>();
        player = GameObject.FindGameObjectWithTag("Player").transform;
    }
コード例 #9
0
    private void Start()
    {
        canMove = true;

        rb          = GetComponent <Rigidbody2D>();
        audioPlayer = GetComponent <AudioSource>();
        hit         = GetComponentInChildren <HitEffect>();
    }
コード例 #10
0
ファイル: ThrowObject.cs プロジェクト: SonGit/NoisyBoy
    public void CFXM_Hit_Effect(Transform pos)
    {
        HitEffect hitEffect = ObjectPool.instance.GetHitEffect();

        hitEffect.transform.position = pos.position;
        hitEffect.Destroy();
        StartCoroutine(WaitDestroy());
    }
コード例 #11
0
 private void Start()
 {
     originPosition = transform.position;
     audioSource    = GetComponent <AudioSource>();
     hit            = GetComponentInChildren <HitEffect>();
     rb             = GetComponent <Rigidbody2D>();
     player         = GameObject.FindGameObjectWithTag("Player").transform;
 }
コード例 #12
0
 //被攻击
 public void BeHit(int _damage, HitEffect _effect)
 {
     if (properties.HpCurrentValue > 0 && !isDamaged)
     {
         _effect.Show(this.gameObject);
         properties.HpCurrentValue -= _damage;
         StartCoroutine("Damaged");
     }
 }
コード例 #13
0
ファイル: HitEffect.cs プロジェクト: Epicguru/NotQuiteDead
    public static void Spawn(Vector2 position, float rotation, float FPS, Color colour, Sprite[] sprites, HitEffectLightMode lightMode)
    {
        GameObject prefab = Spawnables.I.HitEffect;
        GameObject go     = ObjectPool.Instantiate(prefab, PoolType.HIT_EFFECT);

        HitEffect effect = go.GetComponent <HitEffect>();

        effect.Init(position, rotation, FPS, colour, sprites, lightMode);
    }
コード例 #14
0
    private void Start()
    {
        canMove = true;

        rb          = GetComponent <Rigidbody2D>();
        audioPlayer = GetComponent <AudioSource>();
        hit         = GetComponentInChildren <HitEffect>();
        player      = GameObject.FindGameObjectWithTag("Player").transform;
    }
コード例 #15
0
ファイル: Bullet.cs プロジェクト: samafshar/MenOfFreedom
    private void PlayHitSound(HitEffect effect)
    {
        if (effect.Hit_Sound.Length == 0)
        {
            return;
        }

        audioInfo.PlayClip(effect.Hit_Sound[Random.Range(0, effect.Hit_Sound.Length)]);
    }
コード例 #16
0
    public HitEffect GetHitEffectForScore(float n)
    {
        int index = (int)(n * (float)hitEffects.Length);

        index = Mathf.Clamp(index, 0, hitEffects.Length - 1);

        HitEffect o = GameObject.Instantiate(hitEffects [index]) as HitEffect;

        return(o);
    }
コード例 #17
0
        private void Actor_UsedAct(object?sender, UsedActEventArgs e)
        {
            var stats = e.TacticalAct.Stats;

            if (stats is null)
            {
                throw new InvalidOperationException("The act has no stats to select visualization.");
            }

            Debug.WriteLine(e.TacticalAct);

            if (CanDraw)
            {
                if (stats.Effect == TacticalActEffectType.Damage && stats.IsMelee)
                {
                    var serviceScope = ((LivGame)_game).ServiceProvider;

                    var animationBlockerService = serviceScope.GetRequiredService <IAnimationBlockerService>();

                    var hexSize = MapMetrics.UnitSize / 2;
                    var playerActorWorldCoords = HexHelper.ConvertToWorld(((HexNode)e.TargetNode).OffsetCoords);
                    var newPosition            = new Vector2(
                        (float)(playerActorWorldCoords[0] * hexSize * Math.Sqrt(3)),
                        playerActorWorldCoords[1] * hexSize * 2 / 2
                        );

                    var targetSpritePosition = newPosition;

                    var attackSoundEffectInstance = GetSoundEffect(e.TacticalAct.Stats);
                    _actorStateEngine =
                        new ActorMeleeAttackEngine(
                            _rootSprite,
                            targetSpritePosition,
                            animationBlockerService,
                            attackSoundEffectInstance);

                    // Selection actors only prevent error when monster stays on loot bag.
                    var targetGameObject =
                        _sectorViewModelContext.GameObjects.SingleOrDefault(x =>
                                                                            x is IActorViewModel && x.Node == e.TargetNode);
                    if (targetGameObject is null)
                    {
                        // This means the attacker is miss.
                        // This situation can be then the target actor moved before the attack reaches the target.
                    }
                    else
                    {
                        var hitEffect = new HitEffect((LivGame)_game,
                                                      targetSpritePosition + targetGameObject.HitEffectPosition,
                                                      targetSpritePosition - _rootSprite.Position);
                        _sectorViewModelContext.EffectManager.VisualEffects.Add(hitEffect);
                    }
                }
            }
        }
コード例 #18
0
        private HitEffect FindEffectForPosition(int position, DynamicEnumProvider dep, Dictionary <int, HitEffect> effects, Dictionary <int, Match> dcPositions)
        {
            HitEffect effect;
            var       dc = dcPositions.LastOrDefault(d => d.Key < position || d.Key - 20 < position && d.Value.Value.Contains("escape"));

            if (!dc.Equals(default(KeyValuePair <int, Match>)))
            {
                if (!effects.ContainsKey(dc.Key))
                {
                    effects[dc.Key] = new HitEffect();
                    if (dc.Value.Value.Contains("escape"))
                    {
                        effects[dc.Key].DC = new SkillCheck
                        {
                            Skill = Skill.Acrobatics | Skill.Athletics,
                            Value = Convert.ToInt32(dc.Value.Groups[5].Value)
                        };
                    }
                    else if (dc.Value.Value.Contains("check"))
                    {
                        effects[dc.Key].DC = new SkillCheck
                        {
                            Value = Convert.ToInt32(dc.Value.Groups[7].Value)
                        };
                        var reg = new Regex(@"\([A-Za-z]*\)");
                        foreach (var s in reg.Matches(dc.Value.Value).Select(s => Enum.Parse <Skill>(s.Value.Trim('(', ')'), true)))
                        {
                            ((SkillCheck)effects[dc.Key].DC).Skill |= s;
                        }
                    }
                    else if (dc.Value.Value.Contains("saving throw"))
                    {
                        var str = dc.Value.Value.Replace("saving throw", "").Replace("DC " + dc.Value.Groups[2].Value, "").Trim();
                        effects[dc.Key].DC = new SavingThrow()
                        {
                            Value   = Convert.ToInt32(dc.Value.Groups[2].Value),
                            Ability = dep.GetEnumValues("Ability").Parse(str)
                        };
                    }
                }
                effect = effects[dc.Key];
            }
            else
            {
                if (!effects.ContainsKey(0))
                {
                    effects[0] = new HitEffect();
                }
                effect = effects[0];
            }
            return(effect);
        }
コード例 #19
0
 public void BeHit(int _damage, HitEffect _effect)
 {
     //挨打效果
     _effect.Show(this.gameObject);
     properties.hp -= _damage;
     if (properties.hp <= 0)
     {
         //死亡效果
         properties.dieAction.Die();
         //hp空延迟销毁
         Destroy(this.gameObject, properties.destroyDelay);
     }
 }
コード例 #20
0
ファイル: CircleEnemy.cs プロジェクト: makscee/SquareFast
    public void Swallow()
    {
        AnimationSpeedUp = 3f;
        Scale            = new Vector3(1.5f, 1.5f, 1f);
        var ut = GetComponent <UnitedTint>();

        ut.Color = ut.Color.ChangeAlpha(0.4f);
        Level.Instance.Clear(Position.IntX());
        Player.Instance.Swallowed = this;
        _hasSwallowed             = true;
        Position = Player.Instance.Position;
        _actPos  = new Vector3(100, 0, 0);
        HitEffect.Create(Player.Instance.transform.position, Player.Instance);
    }
コード例 #21
0
ファイル: Bullet.cs プロジェクト: samafshar/MenOfFreedom
    private void PlayHitParticle(HitEffect effect, RaycastHit hitInfo)
    {
        float epsilon = -0.03f;

        Vector3 hitPoint = hitInfo.point + (hitInfo.normal * epsilon);
        Vector3 hitUpDir = hitInfo.normal;

        if (effect.Hit_Particle.Length == 0)
        {
            Debug.LogError("no particle");
            return;
        }
        GameObject obj = Instantiate(effect.Hit_Particle[Random.Range(0, effect.Hit_Particle.Length)], hitPoint,
                                     Quaternion.FromToRotation(Vector3.forward, hitUpDir)) as GameObject;
    }
コード例 #22
0
ファイル: Bullet.cs プロジェクト: samafshar/MenOfFreedom
    private void DoHitEffect(RaycastHit hitInfo)
    {
        string hitTag = hitInfo.collider.tag.ToLower();

        HitEffect effect = hitManager.GetRelativeHitEffect(hitTag);

        if (effect == null)
        {
            return;
        }

        PlayHitSound(effect);
        PlayHitParticle(effect, hitInfo);
        MarkHitDecal(effect, hitInfo);
    }
コード例 #23
0
    public void HealthDecrease()
    {
        if (Hp > 0)
        {
            Hp--;
            HitEffect.SetActive(false);
            HitEffect.SetActive(true);
            Cake.GetComponent <Animator>().SetTrigger("Demage");
            cameras.GetComponent <Animator>().SetTrigger("Shake");

            for (int i = Hpbar.Length; i > Hp; i--)
            {
                Hpbar[i - 1].GetComponent <Image>().color = notActive;
            }
        }
    }
コード例 #24
0
    public void MultHit(Vector3 position)
    {
        HitEffect hitEffect = GameObject.Instantiate <HitEffect>(hitEffectPrefab, position, Quaternion.identity, this.transform);

        hitEffect.Init(color);

        if (health > 0)
        {
            health--;
            healthBar.SetHealth(health);

            if (health == 0)
            {
                Die();
            }
        }
    }
コード例 #25
0
        public virtual void BeAttacked(BaseActorObj attacker, Vector3 position, HitEffect hitEffect, float Damage = 0)
        {
            if (IsHoly)
            {
                return;
            }

            /*
             * //受击特效
             * if (_ActorPropty. != null && _ActorPropty.ActorInfo.BloodName != "")
             * {
             *  GameObject blood = EffectManager.Manager.GenEffect(_ActorPropty.ActorInfo.BloodName);
             *  float dir = attacker.transform.position.x - this.transform.position.x;
             *  Vector3 scale = blood.transform.localScale;
             *  if (scale.x * dir < 0)
             *  {
             *      scale.x *= -1;
             *      blood.transform.localScale = scale;
             *  }
             *  blood.transform.position = position;
             * }*/
            Vector2 faceDir = attacker.transform.position - transform.position;

            faceDir.y = 0;
            FaceToDir(faceDir);
            Hurt(Damage);
            if (m_ActorPropty.IsDeath)
            {
                m_ActionCtrler.SetTriiger("Death");
            }
            //受击效果
            BeHitEffect = hitEffect;
            //动画状态处理
            switch (hitEffect.HitType)
            {
            case HitEffectType.HitBack:
                m_ActionCtrler.SetTriiger("HitBack");

                break;

            case HitEffectType.ClickFly:
                m_ActionCtrler.SetTriiger("ClickFly");

                break;
            }
        }
コード例 #26
0
 public void BeHit(int _damage, HitEffect _effect)
 {
     _effect.Show(this.gameObject);
     hp -= _damage;
     //半血一下更换贴图
     if (hp <= halfHp)
     {
         if (spriteRenderer.sprite != helfHpSprite)
         {
             spriteRenderer.sprite = helfHpSprite;
         }
     }
     if (hp <= 0)
     {
         animator.SetBool("Broken", true);
         Destroy(gameObject, destroyDelay);
     }
 }
コード例 #27
0
ファイル: PowerEffect.cs プロジェクト: Sasho/mooege
        public void PlayHitEffect(HitEffect id, Actor target, Actor from)
        {
            if (target == null) return;

            foreach (Mooege.Core.GS.Player.Player player in target.World.GetPlayersInRange(target.Position, 150f))
            {
                player.InGameClient.SendMessage(new PlayHitEffectMessage()
                {
                    Id = 0x7b,
                    ActorID = target.DynamicID,
                    HitDealer = from.DynamicID,
                    Field2 = (int)id,
                    Field3 = false
                });

                SendDWordTick(player.InGameClient);
            }
        }
コード例 #28
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.gameObject.layer == 9) //9 = PlayerAttack layer
     {
         HitEffect hit = collision.GetComponent <HitEffect>();
         health            -= hit.damage;
         hit.hitbox.enabled = false;
         if (health <= 0)
         {
             Death();
         }
         else
         {
             invincible         = true;
             invincibilityTimer = 0;
             Instantiate(damageEffect, transform.position, Quaternion.identity);
         }
     }
 }
コード例 #29
0
    public static HitEffect getHit(string alias)
    {
        HitEffect foundHit = null;

        foreach (HitEffect splode in getAM().splodes)
        {
            if (splode.getAlias() == alias)
            {
                foundHit = splode;
            }
        }


        if (foundHit == null)
        {
            Debug.Log(alias + " does not reference any known hit effect");
        }

        return(foundHit);
    }
コード例 #30
0
 public UnitController(UnitModel unitModel,
                       UnitView unitView,
                       UnitSide unitSide,
                       UnitWeapon unitWeapon,
                       SignalBus signalBus,
                       GameSettings gameSettings,
                       HitEffect hitEffect)
 {
     _unitModel    = unitModel;
     _unitView     = unitView;
     _unitSide     = unitSide;
     _unitWeapon   = unitWeapon;
     _signalBus    = signalBus;
     _gameSettings = gameSettings;
     _hitEffect    = hitEffect;
     _hitEffect.transform.parent = _unitView.transform;
     _unitModel.Configure();
     _unitView.Configure(_unitModel);
     _unitWeapon.Configure(unitView, unitSide, _unitModel.AttackSpeed);
 }
コード例 #31
0
    public override void Hit(int _damage, HitEffect _hitEffect)
    {
        //计算方向
        Vector2 dir = (prePos + rb2d.velocity * Time.deltaTime) - prePos;
        //计算射线距离
        float rayDistance = (rb2d.velocity * Time.deltaTime).magnitude;
        //获取第一次碰撞
        RaycastHit2D hitInfo2d = Physics2D.Raycast(prePos, dir, rayDistance);

        if (hitInfo2d.collider != null)
        {
            if (hitInfo2d.collider.gameObject.GetComponent <IBeHitMessage>() != null)
            {
                //事件
                ExecuteEvents.Execute <IBeHitMessage>(hitInfo2d.collider.gameObject, null, (x, y) => x.BeHit(_damage, _hitEffect));
                //“销毁”
                this.gameObject.SetActive(false);
            }
        }
    }