Ejemplo n.º 1
0
    public IBlockingEntity FindBlockingEntityAt(IEntityController entityController, Vector2Int coords)
    {
        var entities = entityController.GetEntitiesAt(coords);
        var blocking = CollectionUtils.GetImplementors <BaseEntity, IBlockingEntity>(entities);

        return(blocking.Count > 0 ? blocking[0] : null);
    }
Ejemplo n.º 2
0
    public void CheckEntitiesExited()
    {
        var entitiesAt = _entityController.GetEntitiesAt(_owner.Coords);

        entitiesAt.RemoveAll(FilterEntityAtTrigger);

        var remove = new List <BaseEntity>();

        foreach (var toRemove in _entitiesAtTrigger)
        {
            if (!entitiesAt.Contains(toRemove))
            {
                remove.Add(toRemove);
                _owner.OnEntityLeft(toRemove);
            }
        }
        foreach (var purged in remove)
        {
            _entitiesAtTrigger.Remove(purged);
        }
    }
Ejemplo n.º 3
0
    protected override bool HandleAdditionalMoveInteractions(PlayerActionStateContext contextData, Vector2Int newPlayerCoords, ref int nextPlayState, ref bool canMove)
    {
        // TODO: Automatic absorption attempt
        IEntityController entities = contextData.EntityController;
        KrbPlayer         player   = (KrbPlayer)entities.Player;

        if (!player.AbsorberTrait.Data.AutoAbsorb)
        {
            return(false);
        }

        var targetCandidates = entities.GetEntitiesAt(newPlayerCoords);

        foreach (var c in targetCandidates)
        {
            if (c is IAbsorbableEntity test && player.AbsorberTrait.TryAbsorb(test))
            {
                canMove = true;
                return(true);
            }
        }
        return(false);
    }