Beispiel #1
0
    public bool IsEmptyAt(Vector3Int position)
    {
        for (var index = 0; index < LayersKeys.Length; index++)
        {
            LayerType layer = LayersKeys[index];
            if (layer != LayerType.Objects && HasTile(position, layer))
            {
                return(false);
            }

            if (layer == LayerType.Objects)
            {
                var objects = ((ObjectLayer)LayersValues[index]).Objects.Get(position);
                for (var i = 0; i < objects.Count; i++)
                {
                    RegisterTile o = objects[i];
                    if (!o.IsPassable())
                    {
                        return(false);
                    }
                }
            }
        }

        return(true);
    }
Beispiel #2
0
    public override bool IsPassableAt(Vector3Int origin, Vector3Int to, bool inclPlayers = true, GameObject context = null)
    {
        //Targeting windoors here
        List <RegisterTile> objectsOrigin = Objects.Get(origin);

        for (var i = 0; i < objectsOrigin.Count; i++)
        {
            if (!objectsOrigin[i].IsPassableTo(to) && (!context || objectsOrigin[i].gameObject != context))
            {
                //Can't get outside the tile because windoor doesn't allow us
                return(false);
            }
        }

        List <RegisterTile> objectsTo = Objects.Get(to);

        for (var i = 0; i < objectsTo.Count; i++)
        {
            RegisterTile o = objectsTo[i];
            if ((inclPlayers || o.ObjectType != ObjectType.Player) && !o.IsPassable(origin) && (!context || o.gameObject != context))
            {
                return(false);
            }
        }

        return(base.IsPassableAt(origin, to, inclPlayers));
    }
Beispiel #3
0
    public override bool IsPassableAt(Vector3Int origin, Vector3Int to, bool inclPlayers = true, GameObject context = null)
    {
        //Targeting windoors here
        List <RegisterTile> objectsOrigin = Objects.Get(origin);

        for (var i = 0; i < objectsOrigin.Count; i++)
        {
            if (!objectsOrigin[i].IsPassableTo(to) && (!context || objectsOrigin[i].gameObject != context))
            {
                //Can't get outside the tile because windoor doesn't allow us
                return(false);
            }
        }

        List <RegisterTile> objectsTo = Objects.Get(to);
        bool toPass;

        if (inclPlayers)
        {
            toPass = true;
            for (var i = 0; i < objectsTo.Count; i++)
            {
                RegisterTile o = objectsTo[i];
                if (!o.IsPassable(origin) && (!context || o.gameObject != context))
                {
                    toPass = false;
                    break;
                }
            }
        }
        else
        {
            toPass = true;
            for (var i = 0; i < objectsTo.Count; i++)
            {
                RegisterTile o = objectsTo[i];
                if (o.ObjectType != ObjectType.Player && !o.IsPassable(origin) && (!context || o.gameObject != context))
                {
                    toPass = false;
                    break;
                }
            }
        }

        bool rods = base.IsPassableAt(origin, to, inclPlayers);

//			Logger.Log( $"IPA = {toPass} && {rods} @ {MatrixManager.Instance.LocalToWorldInt( origin, MatrixManager.Get(0).Matrix )} -> {MatrixManager.Instance.LocalToWorldInt( to, MatrixManager.Get(0).Matrix )} " +
//			            $" (in local: {origin} -> {to})", Category.Matrix );
        return(toPass && rods);
    }
    public override bool IsPassableAt(Vector3Int origin, Vector3Int to)
    {
        RegisterTile objTo = Objects.GetFirst <RegisterTile>(to);

        if (objTo && !objTo.IsPassable(origin))
        {
            return(false);
        }

        RegisterTile objOrigin = Objects.GetFirst <RegisterTile>(origin);

        if (objOrigin && !objOrigin.IsPassable(to))
        {
            return(false);
        }

        return(base.IsPassableAt(origin, to));
    }
Beispiel #5
0
    public bool IsEmptyAt(GameObject[] context, Vector3Int position)
    {
        for (var i1 = 0; i1 < LayersKeys.Length; i1++)
        {
            LayerType layer = LayersKeys[i1];
            if (layer != LayerType.Objects && HasTile(position, layer))
            {
                return(false);
            }

            if (layer == LayerType.Objects)
            {
                var objects = ((ObjectLayer)LayersValues[i1]).Objects.Get(position);
                for (var i = 0; i < objects.Count; i++)
                {
                    RegisterTile o = objects[i];
                    if (!o.IsPassable())
                    {
                        bool isExcluded = false;
                        for (var index = 0; index < context.Length; index++)
                        {
                            if (o.gameObject == context[index])
                            {
                                isExcluded = true;
                                break;
                            }
                        }

                        if (!isExcluded)
                        {
                            return(false);
                        }
                    }
                }
            }
        }

        return(true);
    }