Esempio n. 1
0
        public static void BlockDirection(Attackable.Context ctx)
        {
            if (ctx.actor.TryGetShield(out var shieldItem))
            {
                var shield = shieldItem.GetShieldComponent();

                if (ctx.direction == -shield.GetRotatedRelativeOrientation(ctx.actor))
                {
                    ctx.resistance.pierce += shield._pierceIncrease;
                }
            }
        }
Esempio n. 2
0
        public static void Teleport(Attackable.Context ctx)
        {
            if (ctx.actor.IsDead() && ctx.attacker != null)
            {
                var transform         = ctx.actor.GetTransform();
                var attackerTransform = ctx.attacker.GetTransform();

                foreach (var t in transform.GetCell().GetAllFromLayer(TeleportedLayer))
                {
                    t.ResetPositionInGrid(attackerTransform.position);
                }

                attackerTransform.ResetPositionInGrid(transform.position);
            }
        }
Esempio n. 3
0
        private void AbsorbDamageAndBreak(Attackable.Context ctx)
        {
            if (ctx.attack.damage > 0 &&
                ctx.actor.TryGetInventory(out var inventory) &&
                inventory.TryGetShield(out var shieldItem))
            {
                var shieldComponent = shieldItem.GetShieldComponent();

                if (ctx.direction == -shieldComponent.GetRotatedRelativeOrientation(ctx.actor))
                {
                    shieldItem.BeDestroyed(ctx.actor, inventory);
                    // shieldItem.BeUnequippedLogic(ctx.actor);
                    // inventory.RemoveFromSlot(Shield.Slot.Id);
                    ctx.attack.damage = 0;
                }
            }
        }