コード例 #1
0
    protected override void OnRemovedFromInventory()
    {
        PlayerActionEventManager.RemoveEvent(PlayerActions.GunShoot, onShoot);

        // Destroy Phantom Pistol Object
        Destroy(phantomPistolObject);
    }
コード例 #2
0
    public override void Init_Start(GameObject gameObject)
    {
        base.Init_Start(gameObject);

        // For Checking When Player Gets Knockbacked
        PlayerActionEventManager.AddEvent(PlayerActions.Knockbacked, this.NewPlayerActionEvent(() => KnockbackStarted = true));
    }
コード例 #3
0
    public override void OnExit()
    {
        // Reset Value
        dashTimer.SetActive(false).Reset();
        dashDir       = 0;
        curDist       = 0;
        curSpeed      = 0;
        curTime       = 0;
        curTrailCount = 0;
        DashDone      = false;

        // Reset Velocity
        data.RB2D.velocity = Vector2.zero;

        // Remove Status Effect
        PlayerStatus.RemoveEffect(status_IgnoreDamage);

        // Trigger Event
        PlayerActionEventManager.Trigger(PlayerActions.DashEnd);

        // When Using Melee Weapon
        if (isUsingMelee)
        {
            isUsingMelee = false;

            // Unlock Slot
            PlayerInventoryManager.weaponHotbar.LockSlots(this, false);
        }
    }
コード例 #4
0
    private float DamageShield(float damageAmount)
    {
        foreach (var shield in shields.Reverse())
        {
            ShieldHealth box = shield.Value;

            if (box.shieldHealth.Value == 0)
            {
                continue;
            }

            // Calculate Overkill Damage
            float overkillDmg = Mathf.Max(damageAmount - box.shieldHealth.Value, 0);

            // Trigger Event
            PlayerActionEventManager.Trigger(PlayerActions.ShieldDamaged);

            // Damage Shield
            box.shieldHealth.ModFlat -= damageAmount;

            // Trigger Event
            PlayerActionEventManager.Trigger(PlayerActions.ShieldChanged);

            // Damage Player
            damageAmount = overkillDmg;

            if (damageAmount == 0)
            {
                return(0);
            }
        }

        return(damageAmount);
    }
コード例 #5
0
    public override void OnFixedUpdate()
    {
        // Detect Ground
        data.groundDetectionData.DetectGround(!jumpData.isJumping, data.RB2D, transform);
        data.groundDetectionData.ExecuteOnGroundMethod(this);

        // Fall Through
        fallThroughKeyPressed = PlayerInputManager.Inst.Input_FallThrough;
        data.groundDetectionData.FallThrough(ref fallThroughKeyPressed, data.RB2D, transform, oneWayCollider);

        // Walk
        PlayerStats.Inst.walkData.Walk(PlayerInputManager.Inst.Input_WalkDir, data.RB2D, jumpData.isJumping);

        // Follow Moving Platform
        data.groundDetectionData.FollowMovingPlatform(data.RB2D);

        // Jump
        if (jumpData.Jump(ref PlayerInputManager.Inst.Input_Jump, data.RB2D, transform))
        {
            PlayerActionEventManager.Trigger(PlayerActions.Jump);
        }

        // Gravity
        Gravity_Logic.ApplyGravity(data.RB2D,
                                   data.groundDetectionData.isGrounded || jumpData.isJumping
            ? GravityData.Zero
            : data.gravityData);

        // Update Animation
        UpdateAnimation();
    }
コード例 #6
0
    public void Init(IceStaffItem iceStaffItem, OBB_IceStaff_Data data)
    {
        this.iceStaffItem = iceStaffItem;
        this.data         = data;
        iceStaffItem.Sub_DamageTick.SetActive(true);
        iceStaffItem.Sub_ManaUsageTick.SetActive(true);

        onKill = this.NewPlayerActionEvent(() =>
        {
            if (PlayerStats.Inst.CurAttackData.HasValue && PlayerStats.Inst.CurAttackData.Value.damageDealer == gameObject)
            {
                var dropTable = PlayerStats.Inst.KilledMob.GetComponent <Mob_DropItem>();
                if (dropTable == null)
                {
                    return;
                }

                dropTable.add_drop_table(ItemDB.Inst.GetItemPrefab <FrozenSoul>(), 100f, new RangeInt()
                {
                    min = 1, max = 1
                });
            }
        });

        PlayerActionEventManager.AddEvent(PlayerActions.Kill, onKill);
    }
コード例 #7
0
    public override void OnAdd(InventoryBase inventory)
    {
        base.OnAdd(inventory);

        PlayerActionEventManager.AddEvent(PlayerActions.HealthDamaged, onDamaged);
        PlayerActionEventManager.AddEvent(PlayerActions.DamageDealt, onDealDamage);
    }
コード例 #8
0
 public void Stun_Remove()
 {
     IsStunned.Set(false);
     if (!IsStunned.Value)
     {
         PlayerActionEventManager.Trigger(PlayerActions.StunEnd);
     }
 }
コード例 #9
0
    public override void OnAdd(InventoryBase inventory)
    {
        base.OnAdd(inventory);

        PlayerActionEventManager.AddEvent(PlayerActions.GunShoot, onShoot);

        // Spawn Phantom Pistol Object
        phantomPistolObject = Instantiate(phantomPistolObjectPrefab, GM.PlayerObj.transform.position, Quaternion.identity);
    }
コード例 #10
0
    public void End()
    {
        iceStaffItem.Sub_DamageTick.SetActive(false).ToEnd();
        iceStaffItem.Sub_ManaUsageTick.SetActive(false).ToEnd();

        PlayerActionEventManager.RemoveEvent(PlayerActions.Kill, onKill);

        Destroy(gameObject);
    }
コード例 #11
0
    protected override void OnRemovedFromInventory()
    {
        // Remove Player Action Event
        PlayerActionEventManager.RemoveEvent(PlayerActions.Dashing, onDashing);
        PlayerActionEventManager.RemoveEvent(PlayerActions.DashEnd, onDashEnd);

        // Destory Particle
        Destroy(flameParticle.gameObject);
    }
コード例 #12
0
    private void AnimEvent_ShootArrow()
    {
        SpawnArrow();
        VisualEffect();

        // Trigger Item Effect
        PlayerActionEventManager.Trigger(PlayerActions.WeaponMain);
        PlayerActionEventManager.Trigger(PlayerActions.BowShoot);
    }
コード例 #13
0
    public override void OnEnter()
    {
        // Trigger Item Effect
        PlayerActionEventManager.Trigger(PlayerActions.MeleeDashAttack);

        // Look Dir
        Flip_Logic.FlipXTo(GM.Player.Data.Dir, transform);

        // Animation
        data.Animator.Play("Dash");
    }
コード例 #14
0
    public void GainStamina(float amount)
    {
        if (amount <= 0)
        {
            return;
        }

        PlayerActionEventManager.Trigger(PlayerActions.StaminaGained);
        stamina.ModFlat += amount;
        PlayerActionEventManager.Trigger(PlayerActions.StaminaChanged);
    }
コード例 #15
0
    public void Konckback_Remove()
    {
        curKnockback = null;

        curKnockbackMode        = KnockbackMode.Weak;
        ResetGravityOnKnockback = false;
        KnockbackDir            = Vector2.zero;
        KnockbackCurve          = null;

        PlayerActionEventManager.Trigger(PlayerActions.KnockbackEnd);
    }
コード例 #16
0
    public override void OnEnter()
    {
        // Timer
        weaponItem.Main_CD.Reset();

        // Animation
        data.Animator.Play("Main_Attack");

        // Trigger Item Effect
        PlayerActionEventManager.Trigger(PlayerActions.WeaponMain);
    }
コード例 #17
0
    public bool UseStamina(float amount)
    {
        if (stamina.Value < amount)
        {
            return(false);
        }

        PlayerActionEventManager.Trigger(PlayerActions.StaminaUsed);
        stamina.ModFlat -= amount;
        PlayerActionEventManager.Trigger(PlayerActions.StaminaChanged);
        return(true);
    }
コード例 #18
0
    public override void OnAdd(InventoryBase inventory)
    {
        base.OnAdd(inventory);

        // Add Player Action Event
        PlayerActionEventManager.AddEvent(PlayerActions.Dashing, onDashing);
        PlayerActionEventManager.AddEvent(PlayerActions.DashEnd, onDashEnd);

        // Spawn Particle
        flameParticle = Instantiate(flameParticlePrefab, GM.PlayerObj.transform).GetComponent <ParticleSystem>();
        flameParticle.transform.localPosition = flameParticle.transform.localPosition.Add(y: -0.2f);
    }
コード例 #19
0
    public bool DealDamage(AttackData attackData, GameObject target, params PlayerActions[] actionToTrigger)
    {
        // Get IDamage
        IDamage iDamage = target.GetComponent <IDamage>();

        if (iDamage == null)
        {
            return(false);
        }

        // Check Ignore Hit (피해 무시)
        if (target.GetComponent <StatusEffect_IgnoreHit>() != null)
        {
            return(false);
        }

        // Store Damage
        DamageToDeal = attackData.damage.Value;

        // Store Attack Data
        CurAttackData = attackData;

        // Store Damaged Mob
        DamagedMob = target.GetComponent <Mob_Base>();

        // Trigger Item Effect
        PlayerActionEventManager.Trigger(PlayerActions.DamageDealt);
        for (int i = 0; i < actionToTrigger.Length; i++)
        {
            PlayerActionEventManager.Trigger(actionToTrigger[i]);
        }

        attackData.damage = new FloatStat(DamageToDeal);

        if (iDamage.CheckDeath(attackData))
        {
            KilledMob = target.GetComponent <Mob_Base>();
            PlayerActionEventManager.Trigger(PlayerActions.Kill);
        }

        // Damage Mob
        iDamage.Hit(attackData);

        // Reset Attack Data
        CurAttackData = null;

        // Reset Damaged Mob
        DamagedMob = null;

        return(true);
    }
コード例 #20
0
    public override void InitStats()
    {
        // Init Cooldown
        CooldownTimer.EndTime = 10f;

        // Init Mana Usage
        ManaUsage = new FloatStat(20, min: 0);

        // Init Duration
        durationTimer.EndTime = 10f;
        durationTimer
        .SetTick(gameObject)
        .SetAction(
            onEnd: () =>
        {
            corutine_CheckAllCorpseAbsorbed = StartCoroutine(CheckAllCorpseAbsorbed());
            PlayerActionEventManager.RemoveEvent(PlayerActions.Kill, onKill);
        })
        .SetActive(false);

        IEnumerator CheckAllCorpseAbsorbed()
        {
            while (true)
            {
                // Check if All Corpses all Absorbed
                if (IsActive && durationTimer.IsEnded && corpsesToAbsorb == 0)
                {
                    PlayerStats.Inst.Heal(PlayerStats.Inst.GetShieldAt(shieldIndex).Value *healMultiplier);

                    // TODO
                    // 시체 블록 풀링하기 때문에 소환할때 리셋 해야함!!!
                    //for (int i = 0; i < Mathf.FloorToInt(PlayerStats.Inst.GetShieldAt(shieldIndex).Value / shieldGainPerKill); i++)
                    //{
                    //    coprsePrefabs[i].
                    //        GetComponent<PoolingObj>().Spawn(GM.PlayerPos).
                    //        GetComponent<Rigidbody2D>().AddForce(Vector2.right * GM.Player.Data.Dir * 50f, ForceMode2D.Impulse);
                    //}

                    Deactivate();

                    corutine_CheckAllCorpseAbsorbed = null;
                    yield return(null);
                }

                yield return(new WaitForEndOfFrame());
            }
        }

        // Init Shield HP
        shieldHealth = new FloatStat(0, min: 0, max: 40);
    }
コード例 #21
0
    public void Damage(AttackData attackData)
    {
        // Check Ignore Damage
        if (PlayerStatus.IgnoreDamage.Value)
        {
            return;
        }

        // Store Damage Amount
        DamageToReceive = PlayerStatus.AbsorbDamage.Value ? 0 : attackData.damage.Value;

        // Trigger Event
        PlayerActionEventManager.Trigger(PlayerActions.Damaged);

        if (DamageToReceive == 0)
        {
            return;
        }

        DamageToReceive = DamageShield(DamageToReceive);

        if (DamageToReceive == 0)
        {
            return;
        }

        // Trigger Event
        PlayerActionEventManager.Trigger(PlayerActions.HealthDamaged);

        // Apply Damage
        health.ModFlat -= DamageToReceive;

        // Death
        if (health.Value == 0)
        {
            Death();
        }

        // Trigger Event
        PlayerActionEventManager.Trigger(PlayerActions.HealthChanged);

        if (IsDead)
        {
            return;
        }

        // Visual Effect
        PlayerHitEft.Create(transform.position);
        GetComponent <HitColorEffect>().OnHit();
    }
コード例 #22
0
    public int AddShield(FloatStat shieldHealth)
    {
        // Trigger Event
        PlayerActionEventManager.Trigger(PlayerActions.ShieldGained);

        shields.Add(shieldCount, new ShieldHealth()
        {
            shieldHealth = shieldHealth
        });

        // Trigger Event
        PlayerActionEventManager.Trigger(PlayerActions.ShieldChanged);

        return(shieldCount++);
    }
コード例 #23
0
    protected override void OnDeactivate()
    {
        // Stop Duration Timer
        durationTimer.SetActive(false);
        durationTimer.Reset();

        // Remove Shield
        PlayerStats.Inst.RemoveShield(ref shieldIndex);

        // Disable Shield Item Effect
        PlayerActionEventManager.RemoveEvent(PlayerActions.ShieldChanged, onShieldChanged);

        // Hide Effect
        shieldEffect.SetActive(false);
    }
コード例 #24
0
    public override void OnEnter()
    {
        // Shoot
        SpawnBullet();
        VisualEffect();

        // Timer
        weaponItem.Main_Shoot_CD.Reset();

        // Animation
        data.Animator.Play(weaponItem.ANIM_Shoot);

        // Trigger Item Effect
        PlayerActionEventManager.Trigger(PlayerActions.WeaponMain);
        PlayerActionEventManager.Trigger(PlayerActions.GunShoot);
    }
コード例 #25
0
    protected override void OnActivate()
    {
        // Stop Cooldown Timer
        CooldownTimer.SetActive(false);
        CooldownTimer.Reset();

        // Start Duration Timer
        durationTimer.SetActive(true);
        durationTimer.Reset();

        // Get Shield Index
        shieldIndex = PlayerStats.Inst.AddShield(shieldHealth);

        PlayerActionEventManager.AddEvent(PlayerActions.Kill, onKill);
        PlayerActionEventManager.AddEvent(PlayerActions.ShieldChanged, onShieldChanged);
    }
コード例 #26
0
    public void Konckback_Add(PlayerStatus_Knockback status, KnockbackMode mode, bool resetGravity, Vector2 knockbackDir, AnimationCurve speedCurve)
    {
        if (curKnockbackMode == KnockbackMode.Unstoppable || curKnockbackMode > mode)
        {
            return;
        }

        RemoveEffect(curKnockback);
        curKnockback = status;

        curKnockbackMode        = mode;
        ResetGravityOnKnockback = resetGravity;
        KnockbackDir            = knockbackDir;
        KnockbackCurve          = speedCurve;

        PlayerActionEventManager.Trigger(PlayerActions.Knockbacked);
    }
コード例 #27
0
    public override void OnEnter()
    {
        // Timer
        weaponItem.Basic_Dur.SetActive(true);

        // Animation
        data.Animator.Play(prevAttackAnim == 1 ? "Basic_PunchR" : "Basic_PunchL");
        prevAttackAnim *= -1;

        // Trigger Item Effect
        PlayerActionEventManager.Trigger(PlayerActions.WeaponMain);
        PlayerActionEventManager.Trigger(PlayerActions.MeleeBasicAttack);

        // Player
        GM.Player.Data.CanDash = false;
        GM.Player.Data.CanKick = false;
        PlayerInventoryManager.weaponHotbar.LockSlots(this, true);
    }
コード例 #28
0
    public override void OnEnter()
    {
        // Init Value
        dashDir = PlayerInputManager.Inst.Input_DashDir;
        dashTimer.SetActive(true);

        // Reset Collider Size
        //data.groundDetectionData.Reset_IWSolid_ColSize();

        // Reset Velocity
        data.RB2D.velocity = Vector2.zero;

        // Apply Status Effect
        PlayerStatus.AddEffect(status_IgnoreDamage);

        // Trigger Event
        PlayerActionEventManager.Trigger(PlayerActions.DashStart);
    }
コード例 #29
0
ファイル: IceBolt.cs プロジェクト: yuchanahn/Tower_Of_Ukani
    private void Start()
    {
        onKill = this.NewPlayerActionEvent(() =>
        {
            if (PlayerStats.Inst.CurAttackData.HasValue && PlayerStats.Inst.CurAttackData.Value.damageDealer == gameObject)
            {
                var dropTable = PlayerStats.Inst.KilledMob.GetComponent <Mob_DropItem>();
                if (dropTable == null)
                {
                    return;
                }

                dropTable.add_drop_table(ItemDB.Inst.GetItemPrefab <FrozenSoul>(), 100f, new RangeInt()
                {
                    min = 1, max = 1
                });
            }
        });

        PlayerActionEventManager.AddEvent(PlayerActions.Kill, onKill);
    }
コード例 #30
0
    public void RemoveShield(ref int shieldIndex)
    {
        if (shieldIndex < 0)
        {
            return;
        }

        if (shields[shieldIndex].shieldHealth.Value > 0)
        {
            // Trigger Event
            PlayerActionEventManager.Trigger(PlayerActions.ShieldChanged);
        }

        shields.Remove(shieldIndex);

        shieldIndex = -1;

        if (shields.Count == 0)
        {
            shieldCount = 0;
        }
    }