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); }
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; } }
// Start is called before the first frame update void Start() { originalPosition = transform.position; originalRotation = transform.rotation; animator = GetComponentInChildren <Animator>(); _hitEffect = GetComponentInChildren <HitEffect>(); }
void ShowSkillEffect(Vector3 position) { HitEffect effect = ObjectPool.Get.GetObject(Defines.key_HitEffect).GetComponent <HitEffect>(); effect.transform.position = position + Vector3.back; effect.ShowEffect(); }
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 }
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(); } }
private void _TakeDmgAnim() { HitEffect.Create(transform.position, this); if (HP <= 0) { Destroy(gameObject); } }
private void Start() { animationScaredTrigger = Animator.StringToHash("Scared"); rb = GetComponent <Rigidbody2D>(); hit = GetComponentInChildren <HitEffect>(); player = GameObject.FindGameObjectWithTag("Player").transform; }
private void Start() { canMove = true; rb = GetComponent <Rigidbody2D>(); audioPlayer = GetComponent <AudioSource>(); hit = GetComponentInChildren <HitEffect>(); }
public void CFXM_Hit_Effect(Transform pos) { HitEffect hitEffect = ObjectPool.instance.GetHitEffect(); hitEffect.transform.position = pos.position; hitEffect.Destroy(); StartCoroutine(WaitDestroy()); }
private void Start() { originPosition = transform.position; audioSource = GetComponent <AudioSource>(); hit = GetComponentInChildren <HitEffect>(); rb = GetComponent <Rigidbody2D>(); player = GameObject.FindGameObjectWithTag("Player").transform; }
//被攻击 public void BeHit(int _damage, HitEffect _effect) { if (properties.HpCurrentValue > 0 && !isDamaged) { _effect.Show(this.gameObject); properties.HpCurrentValue -= _damage; StartCoroutine("Damaged"); } }
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); }
private void Start() { canMove = true; rb = GetComponent <Rigidbody2D>(); audioPlayer = GetComponent <AudioSource>(); hit = GetComponentInChildren <HitEffect>(); player = GameObject.FindGameObjectWithTag("Player").transform; }
private void PlayHitSound(HitEffect effect) { if (effect.Hit_Sound.Length == 0) { return; } audioInfo.PlayClip(effect.Hit_Sound[Random.Range(0, effect.Hit_Sound.Length)]); }
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); }
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); } } } }
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); }
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); } }
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); }
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; }
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); }
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; } } }
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(); } } }
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; } }
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); } }
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); } }
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); } } }
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); }
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); }
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); } } }