func GetLevel() (out *twodee.Batch, err error) { var ( data []byte m *tmxgo.Map tiles []*tmxgo.Tile textiles []twodee.TexturedTile path string ) if data, err = ioutil.ReadFile("assets/levels/level2/map.tmx"); err != nil { return } if m, err = tmxgo.ParseMapString(string(data)); err != nil { return } if tiles, err = m.TilesFromLayerName("ground"); err != nil { return } WriteGrid(m) if path, err = tmxgo.GetTexturePath(tiles); err != nil { return } textiles = make([]twodee.TexturedTile, len(tiles)) for i, t := range tiles { textiles[i] = t } var ( tilem = twodee.TileMetadata{ Path: "assets/levels/level2/" + path, PxPerUnit: 32, } ) out, err = twodee.LoadBatch(textiles, tilem) return }
func (l *Level) loadLayer(path, name string) (err error) { var ( tilemeta twodee.TileMetadata maptiles []*tmxgo.Tile textiles []twodee.TexturedTile maptile *tmxgo.Tile m *tmxgo.Map i int data []byte height float32 grid *twodee.Grid items []*Item batch *twodee.Batch ratio float32 ) path = filepath.Join(filepath.Dir(path), name) if data, err = ioutil.ReadFile(path); err != nil { return } if m, err = tmxgo.ParseMapString(string(data)); err != nil { return } if path, err = getTexturePath(m, path); err != nil { return } tilemeta = twodee.TileMetadata{ Path: path, PxPerUnit: int(PxPerUnit), } if maptiles, err = m.TilesFromLayerName("entities"); err != nil { return } for i, maptile = range maptiles { if maptile != nil { itemId := ItemId(maptile.Index) items = append(items, NewItem( itemId, ItemIdToType[itemId], "item", (maptile.TileBounds.X+maptile.TileBounds.W)/PxPerUnit, (maptile.TileBounds.Y+maptile.TileBounds.H)/PxPerUnit, maptile.TileBounds.W/PxPerUnit, maptile.TileBounds.H/PxPerUnit, )) } } if maptiles, err = m.TilesFromLayerName("collision"); err != nil { return } grid = twodee.NewGrid(m.Width, m.Height) for i, maptile = range maptiles { if maptile != nil { grid.SetIndex(int32(i), true) } } if maptiles, err = m.TilesFromLayerName("tiles"); err != nil { return } textiles = make([]twodee.TexturedTile, len(maptiles)) for i, maptile = range maptiles { if maptile != nil { textiles[i] = maptile } } if batch, err = twodee.LoadBatch(textiles, tilemeta); err != nil { return } //batch.SetTextureOffsetPx(0, 16) ratio = float32(grid.Width) * PxPerUnit / float32(m.TileWidth*m.Width) height = float32(grid.Height) / ratio if l.Height < height { l.Height = height } l.Grids = append(l.Grids, grid) l.Items = append(l.Items, items) l.Geometry = append(l.Geometry, batch) l.Layers += 1 l.Transitions = append(l.Transitions, nil) l.GridRatios = append(l.GridRatios, ratio) return }