Esempio n. 1
0
    public IMultiTileObjectChild[,] GetChildren()
    {
        if (Children != null)
        {
            return(Children);
        }

        Children       = new EmptyObjectBase[2, 1];
        Children[1, 0] = new EmptyObjectBase(WorldPosition + new Vec2i(1, 0), parent: this);
        return(Children);
    }
Esempio n. 2
0
 public IMultiTileObjectChild[,] GetChildren()
 {
     if (Children == null)
     {
         Children = new IMultiTileObjectChild[Size.x, Size.z];
         for (int x = 0; x < Size.x; x++)
         {
             for (int z = 0; z < Size.z; z++)
             {
                 Children[x, z] = new EmptyObjectBase(WorldPosition + new Vec2i(x, z), parent: this);
             }
         }
     }
     return(Children);
 }
Esempio n. 3
0
    public override WorldObject CreateWorldObject(Transform transform = null)
    {
        WorldObject baseObj = new EmptyObjectBase(WorldPosition, meta: MetaData).CreateWorldObject(transform);
        Vec2i       dir     = new Vec2i(0, 1);

        if (HasMetaData() && GetMetaData().Direction != null)
        {
            dir = GetMetaData().Direction;
        }
        WorldObjectMetaData door1Dir = new WorldObjectMetaData(direction: Vec2i.Rotate(new Vec2i(0, 1), dir));
        WorldObjectMetaData door2Dir = new WorldObjectMetaData(direction: Vec2i.Rotate(new Vec2i(0, -1), dir));

        WorldObject baseDoor   = new WoodDoor(new Vec2i(1, 0), door1Dir, onDoorOpen: OnEntityEnter).CreateWorldObject(baseObj.transform);
        WorldObject secondDoor = new WoodDoor(new Vec2i(3, 0), door2Dir, onDoorOpen: OnEntityEnter).CreateWorldObject(baseObj.transform);

        Vec2i[] rockPos = new Vec2i[] { new Vec2i(0, 0), new Vec2i(0, 1), new Vec2i(0, 2), new Vec2i(0, 3),
                                        new Vec2i(1, 3), new Vec2i(2, 3), new Vec2i(3, 3), new Vec2i(3, 3), new Vec2i(3, 2), new Vec2i(3, 1), new Vec2i(3, 0) };
        GenerationRandom genRan = new GenerationRandom(WorldPosition.x << 16 + WorldPosition.z);

        foreach (Vec2i v in rockPos)
        {
            for (int y = 0; y < 3; y++)
            {
                Rock r = new Rock(v, Vector3.up * y + new Vector3(1, 0, 1) * 0.5f, rockSize: 1.5f);
                r.SetRandom(genRan);
                r.CreateWorldObject(baseObj.transform);
            }
        }
        for (int x = 1; x < 4; x++)
        {
            for (int z = 1; z < 4; z++)
            {
                new Rock(new Vec2i(x, z), new Vector3(0, 2, 0), rockSize: 2).CreateWorldObject(baseObj.transform);
            }
        }

        return(baseObj);
    }
Esempio n. 4
0
    public override WorldObject CreateWorldObject(Transform transform = null)
    {
        WorldObject empty_base = new EmptyObjectBase(WorldPosition).CreateWorldObject(transform);

        if (WallObject == null)
        {
            WorldObject wall_base = base.CreateWorldObject(empty_base.transform);
            wall_base.transform.localScale    = new Vector3(1, WallHeight, 1);
            wall_base.transform.localPosition = Vector3.zero;



            Mesh      m      = wall_base.GetComponentInChildren <MeshFilter>().mesh;
            float     height = WallHeight;
            Vector2   scale  = new Vector2(1, height);
            Vector2[] uv     = new Vector2[m.uv.Length];
            for (int i = 0; i < m.uv.Length; i++)
            {
                uv[i] = Vector2.Scale(m.uv[i], scale);
            }
            m.uv = uv;


            wall_base.GetComponentInChildren <MeshRenderer>().material = ResourceManager.GetMaterial(WallBase);
            //objBase.GetComponentInChildren<MeshFilter>().mesh.uv *= 2;
        }
        else if (WallObjectPosition == 0)
        {
            //Create both objects
            WorldObject wall_base = base.CreateWorldObject(empty_base.transform);



            WorldObject wallObject = WallObject.CreateWorldObject(empty_base.transform);
            wallObject.transform.localPosition = Vector3.zero;
            //Define main wall to exist above addition object
            wall_base.transform.position   = new Vector3(0, WallObjectHeight, 0);
            wall_base.transform.localScale = new Vector3(1, WallHeight - WallObjectHeight, 1);


            Mesh      m      = wall_base.GetComponentInChildren <MeshFilter>().mesh;
            float     height = WallHeight;
            Vector2   scale  = new Vector2(1, height);
            Vector2[] uv     = new Vector2[m.uv.Length];
            for (int i = 0; i < m.uv.Length; i++)
            {
                uv[i] = Vector2.Scale(m.uv[i], scale);
            }
            m.uv = uv;
        }
        else
        {
            WorldObject wall_base = base.CreateWorldObject(empty_base.transform);
            wall_base.transform.localScale    = new Vector3(1, WallObjectPosition, 1);
            wall_base.transform.localPosition = Vector3.zero;

            wall_base.GetComponentInChildren <MeshRenderer>().material = ResourceManager.GetMaterial(WallBase);

            WorldObject wallObject = WallObject.CreateWorldObject(empty_base.transform);
            wallObject.transform.localPosition = new Vector3(0, WallObjectPosition, 0);

            WorldObject aboveWall = base.CreateWorldObject(empty_base.transform);
            aboveWall.transform.localPosition = new Vector3(0, WallObjectPosition + WallObjectHeight, 0);
            aboveWall.transform.localScale    = new Vector3(1, WallHeight - (WallObjectPosition + WallObjectHeight), 1);
            aboveWall.GetComponentInChildren <MeshRenderer>().material = ResourceManager.GetMaterial(WallBase);



            Mesh m  = wall_base.GetComponentInChildren <MeshFilter>().mesh;
            Mesh m2 = aboveWall.GetComponentInChildren <MeshFilter>().mesh;

            Vector2 scale  = new Vector2(1, WallObjectPosition);
            Vector2 scale2 = new Vector2(1, WallHeight - (WallObjectPosition + WallObjectHeight));

            Vector2[] uv  = new Vector2[m.uv.Length];
            Vector2[] uv2 = new Vector2[m.uv.Length];

            for (int i = 0; i < m.uv.Length; i++)
            {
                uv[i]  = Vector2.Scale(m.uv[i], scale);
                uv2[i] = Vector2.Scale(m2.uv[i], scale2);
            }
            m.uv  = uv;
            m2.uv = uv2;
        }

        if (Roof != null)
        {
            WorldObject roofObj = Roof.CreateWorldObject(empty_base.transform);
            roofObj.transform.localPosition = new Vector3(0, WallHeight, 0);
        }

        foreach (Transform tran in empty_base.transform)
        {
            tran.gameObject.layer = 8;
        }

        return(empty_base);
    }