5 Commits

Author SHA1 Message Date
Raum0x2A
3588826556 minor fix 2021-05-26 15:57:04 -06:00
Raum0x2A
98d812c904 Minor changes 2021-05-26 15:49:17 -06:00
Raum0x2A
86bc493ead Updated - v1.0.0 2021-05-26 15:15:13 -06:00
Raum0x2A
3cfae880ee Updated - v1.0.0 2021-05-26 15:13:30 -06:00
Raum0x2A
b41f25646d Split up Create banner finction
nmslib.CreateBanner() now calls nmslib.GenRawBanner() for the
majority of processing createbanner now just calls the gen func
and saves the file.

GenRawBanner() returns an image.Image type for more processing by
another function. this will be used for upcoming features.

tests have been updated as needed

upddated go.mod and go.sum
2021-05-24 13:11:56 -06:00
5 changed files with 110 additions and 60 deletions

113
README.md
View File

@@ -1,27 +1,27 @@
# NMSlib # NMSlib
**master Branch** : ![](https://gitlab.com/Raum0x2A/nmslib/badges/master/pipeline.svg) [![](https://img.shields.io/badge/License%20-MIT-green)](COPYING)
[![GoDoc](https://godoc.org/gitlab.com/Raum0x2A/nmslib?status.svg)](https://godoc.org/gitlab.com/Raum0x2A/nmslib)
**develop Branch** : ![](https://gitlab.com/Raum0x2A/nmslib/badges/develop/pipeline.svg) [![](https://img.shields.io/gitlab/pipeline/Raum0x2A/nmslib/master?label=Master&logo=go)](https://gitlab.com/Raum0x2A/nmslib)
[![](https://img.shields.io/gitlab/pipeline/Raum0x2A/nmslib/develop?label=Develop&logo=go)](https://gitlab.com/Raum0x2A/nmslib/-/tree/develop)
[![](https://img.shields.io/badge/Release-v1.0.1-blue?style=flat&logo=go)](https://gitlab.com/Raum0x2A/nmslib/-/releases/v1.0.1)
NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa. NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa.
NMSlib also translates in game languages (Korvax, Gek Vy'Keen and Atlas) to english, and create portal banners. NMSlib also translates in game languages (Korvax, Gek Vy'Keen and Atlas) to english, and create portal banners.
[GoDoc](https://pkg.go.dev/gitlab.com/Raum0x2A/nmslib#section-documentation)
## Installation ## Installation
To install this module use `go get` To install this module use `go get`
```bash ```golang
go get -u gitlab.com/Raum0x2A/nmslib go get -u gitlab.com/Raum0x2A/nmslib
``` ```
## Usage ## Usage
**Example:** ### Example:
```golang ```golang
package main package main
@@ -40,20 +40,26 @@ func main() {
} }
fmt.Printf("Input:\t%s\nOutput:\t%s\n", portalcode, galacticCoords) fmt.Printf("Input:\t%s\nOutput:\t%s\n", portalcode, galacticCoords)
nmslib.CreateBanner(portalcode, "./NMH-BlueDream.png", 0) g2p, err := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
nmslib.CreateBanner(RndPortal(), "./Random.png", 0) if err != nil {
panic(err)
}
fmt.Printf("Input:\t014C:0077:06DA:01F2\nOutput:\t%s\n", g2p)
_ := nmslib.CreateBanner(portalcode, "./NMH-BlueDream.png", 0)
_ := nmslib.CreateBanner(nmslib.RndPortal(), "./Random.png", 0)
fmt.Println(nmslib.Translate{Word: "KIHTYOMOLES"}.Kor2Eng()) fmt.Println(nmslib.Translate{Lang: "korvax"}.ToEng("KIHTYOMOLES"))
korvax := nmslib.Translate{Word: "Contraband"} korvax := nmslib.Translate{"english"}
fmt.Println(korvax.Eng2Kor()) fmt.Println(korvax.ToKorvax("Contraband"))
} }
``` ```
### Creating a Glyph banner with CreateBanner() ## Creating a Glyph banner
This function takes 3 parameters: This function takes 3 parameters and reurns an error
* portalcode: 12 char hex string of portal location * portalcode: 12 char hex string of portal location
* savename: Save location and name * savename: Save location and name
@@ -69,7 +75,10 @@ This function takes 3 parameters:
Horizontal Layout for the NMH Capital planet [Blue Dream (aka Omins XI)](https://nomanssky.fandom.com/wiki/Omins_XI) in the [Notric-Lis XIII](https://nomanssky.fandom.com/wiki/Notric-Lis_XIII) system in the [Lahanhar Conflux](https://nomanssky.fandom.com/wiki/Lahanhar_Conflux) region Horizontal Layout for the NMH Capital planet [Blue Dream (aka Omins XI)](https://nomanssky.fandom.com/wiki/Omins_XI) in the [Notric-Lis XIII](https://nomanssky.fandom.com/wiki/Notric-Lis_XIII) system in the [Lahanhar Conflux](https://nomanssky.fandom.com/wiki/Lahanhar_Conflux) region
```golang ```golang
nmslib.CreateBanner("21F2F8EDB94D", "NMH-BlueDream.png", 0) err := nmslib.CreateBanner("21F2F8EDB94D", "NMH-BlueDream.png", 0)
if err !=nil {
panic(err)
}
``` ```
![](NMH-BlueDream.png) ![](NMH-BlueDream.png)
@@ -77,18 +86,20 @@ nmslib.CreateBanner("21F2F8EDB94D", "NMH-BlueDream.png", 0)
Vertical layout for a random address Vertical layout for a random address
```golang ```golang
nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11) err := nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11)
if err != nil {
panic(err)
}
``` ```
![](ranportal_scaled.png) ![](ranportal_scaled.png)
_Note: Images shown in readme.md have been scaled down in gimp._ _Note: Image shown in readme.md's vertical example have been scaled down in gimp for easier viewing on gitlab._
_Original Vertical: 256x3072px_ _Original ranportal.png: 256x3072px_
_Original: Horizontal: 3072x256px_
### Converting Portal code to Galactic address with P2gc() ### Converting Portal code to Galactic address
This function only takes 1 parameter and returns a string and error This function only takes 1 parameter and returns a string and error
@@ -105,7 +116,7 @@ Output:
``014C:0077:06DA:01F2`` ``014C:0077:06DA:01F2``
### Converting Galactic coordinates to Portal codes with Gc2p() ### Converting Galactic coordinates to Portal codes
This function only takes 2 parameters and returns a string and error This function only takes 2 parameters and returns a string and error
@@ -132,23 +143,25 @@ Supported languages
- Vy'keen - Vy'keen
- Atlas - Atlas
### Translate Atlas to English with Atl2Eng() ### Translate Atlas to English
This function takes only 1 parameter and returns a string This function takes only 1 parameter and returns a string
* Word: Any known Atlas word (ex. Paka) * Word: Any known Atlas word (ex. Paka)
_note: Translating to english will **always** result in the lowercase equivilent word_
**Example:** **Example:**
```golang ```golang
fmt.Println(nmslib.Translate{Word: "Paka"}.Atl2Eng()) fmt.Println(nmslib.Translate{Lang: "atlas"}.ToEng("Paka"))
``` ```
Output: Output:
``Awake`` ``awake``
### Translate English to Korvax with Eng2Korvax() ### Translate English to Korvax
This function takes only 1 parameter and returns a string This function takes only 1 parameter and returns a string
@@ -157,8 +170,8 @@ This function takes only 1 parameter and returns a string
**Example:** **Example:**
```golang ```golang
korvax := nmslib.Translate{Word: "Contraband"} korvax := nmslib.Translate{"english"}
fmt.Println(korvax.Eng2Kor()) fmt.Println(korvax.ToKorvax("Contraband"))
``` ```
Output: Output:
@@ -168,38 +181,52 @@ Output:
### Language commands ### Language commands
Gek: - ``Translate{Lang: ``string``}.ToEng(``string``)``
- ``Translate{Word: string}.Gek2Eng()`` - ``Translate{Lang: ``string``}.ToKorvax(``string``)``
- ``Translate{Word: string}.Eng2Gek()`` - ``Translate{Lang: ``string``}.ToGek(``string``)``
- ``Translate{Lang: ``string``}.ToVykeen(``string``)``
- ``Translate{Lang: ``string``}.ToAtlat(``string``)``
Korvax: #### Possible Lang string options
- ``Translate{Word: string}.Kor2Eng()``
- ``Translate{Word: string}.Eng2Kor()``
Vy'keen: - ``"english"``
- ``Translate{Word: string}.Vyk2Eng()`` - ``"korvax"``
- ``Translate{Word: string}.Eng2Vyk()`` - ``"gek"``
- ``"vykeen"``
- ``"atlas"``
Atlas:
- ``Translate{Word: string}.Atl2Eng()``
- ``Translate{Word: string}.Eng2Atl()``
## Random Portal address ## Random Portal address
### Create a random portal address
Generate random portal codes
- Atlas Station
- Black Hole
- Random address
All random address created will default to the planet index 1 to help ensure there the address is valid
**Example:** **Example:**
```golang ```golang
fmt.Println(nmslib.RndPortal()) fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndPortal()) fmt.Println(nmslib.RndPortal())
fmt.Println(nmslib.RndAtlas())
fmt.Println(nmslib.RndBH())
``` ```
**Output:** **Output examples:**
``10EFABDEA373`` ``10EFABDEA373``
``11EAB355FC8E`` ``11EAB355FC8E``
## License ``107AC0E190D1``
[MIT](COPYING)
``10796D57AE15``
<hr>
## A Proud member of NMH Hub
### [![NMH Official Page](https://static.wikia.nocookie.net/nomanssky_gamepedia/images/5/5a/NMH_Banner_Hub.png/revision/latest/scale-to-width-down/85?cb=20201210044657)](https://nomanssky.fandom.com/wiki/No_Man%27s_High_Hub) [![Discord Server](https://img.shields.io/badge/Discord-Invite-blue?&logo=discord&logoColor=white)](https://discord.gg/mhRxf29hns)

View File

@@ -23,19 +23,40 @@ var opt int
* note first of the 2 bits sets the layout, the second bit sets the glyph color * note first of the 2 bits sets the layout, the second bit sets the glyph color
*/ */
func CreateBanner(portalhex string, savename string, opt int) (err error) { func CreateBanner(portalhex string, savename string, opt int) (err error) {
out, err := GenRawBanner(portalhex, opt)
if err != nil {
return
}
gg.SavePNG(savename+".png", out)
//gg.SaveJPG(savename+".jpg", out, 50)
return
}
/*GenRawBanner - Returns image.Image of genorated image
Requires 2 vars and returns image.Image (raw image data) and an error
var portalex string: Portal Glyph hex string
var opt int
00 sets horizontal banner in light mode [ 00 || 0 ]
01 sets horizontal banner in dark mode [ 01 || 1 ]
10 sets vertical banner in light mode
11 sets vertical banner in dark mode
* note first of the 2 bits sets the layout, the second bit sets the glyph color
*/
func GenRawBanner(portalhex string, layout int) (portalbanner image.Image, err error) {
var GlyphHex [12]int64 var GlyphHex [12]int64
var glyphImg [12]string var glyphImg [12]string
var mode string var mode string
var imgArray [12]image.Image var imgArray [12]image.Image
//Set light or dark mode glyphs //Set light or dark mode glyphs
if opt == 00 || opt == 10 { if layout == 00 || layout == 10 {
mode = "light" mode = "light"
} else if opt == 01 || opt == 11 { } else if layout == 01 || layout == 11 {
mode = "dark" mode = "dark"
} else { } else {
// if opt is an invalid option (ie. not a 2 bit binary number default to classic mode/layout // if layout is an invalid option (ie. not a 2 bit binary number default to classic mode/layout
opt = 0 layout = 0
mode = "light" mode = "light"
} }
@@ -45,7 +66,7 @@ func CreateBanner(portalhex string, savename string, opt int) (err error) {
for i := 0; i < len(portalhex); i++ { for i := 0; i < len(portalhex); i++ {
GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16) GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16)
if err != nil { if err != nil {
return errors.New("string provided is not hexadecimal ([0-9][A-F])") return nil, errors.New("string provided is not hexadecimal ([0-9][A-F])")
} }
} }
@@ -58,11 +79,11 @@ func CreateBanner(portalhex string, savename string, opt int) (err error) {
for k := 0; k < len(glyphImg); k++ { for k := 0; k < len(glyphImg); k++ {
data, err := Asset(glyphImg[k]) data, err := Asset(glyphImg[k])
if err != nil { if err != nil {
return errors.New("can not load images from assets: " + glyphImg[k]) return nil, errors.New("can not load images from assets: " + glyphImg[k])
} }
err = ioutil.WriteFile(NmsTemp+"/"+glyphImg[k], []byte(data), 0644) err = ioutil.WriteFile(NmsTemp+"/"+glyphImg[k], []byte(data), 0644)
if err != nil { if err != nil {
return errors.New("can not write file to temp directory") return nil, errors.New("can not write file to temp directory")
} }
} }
@@ -70,7 +91,7 @@ func CreateBanner(portalhex string, savename string, opt int) (err error) {
for iter := 0; iter < 12; iter++ { for iter := 0; iter < 12; iter++ {
imgArray[iter], err = gg.LoadPNG(NmsTemp + "/" + glyphImg[iter]) imgArray[iter], err = gg.LoadPNG(NmsTemp + "/" + glyphImg[iter])
if err != nil { if err != nil {
return errors.New("can not read glyph " + glyphImg[iter]) return nil, errors.New("can not read glyph " + glyphImg[iter])
} }
} }
@@ -78,28 +99,30 @@ func CreateBanner(portalhex string, savename string, opt int) (err error) {
// get image size of first glyph, all glyphs have the same X && Y dimension so we only need to measure one. // get image size of first glyph, all glyphs have the same X && Y dimension so we only need to measure one.
imgDim := imgArray[0].Bounds().Size() imgDim := imgArray[0].Bounds().Size()
//Set Layout
//classic horizontal layout //classic horizontal layout
if opt == 01 || opt == 00 { if layout == 01 || layout == 00 {
imgWidth := imgDim.X * 12 imgWidth := imgDim.X * 12
imgHeight := imgDim.Y imgHeight := imgDim.Y
concat := gg.NewContext(imgWidth, imgHeight) concat := gg.NewContext(imgWidth, imgHeight)
for a := 0; a < 12; a++ { for a := 0; a < 12; a++ {
concat.DrawImage(imgArray[a], imgDim.X*a, 0) concat.DrawImage(imgArray[a], imgDim.X*a, 0)
} }
concat.SavePNG(savename) return concat.Image(), nil
} }
//Vertical layout //Vertical layout
if opt == 10 || opt == 11 { if layout == 10 || layout == 11 {
imgWidth := imgDim.X imgWidth := imgDim.X
imgHeight := imgDim.Y * 12 imgHeight := imgDim.Y * 12
concat := gg.NewContext(imgWidth, imgHeight) concat := gg.NewContext(imgWidth, imgHeight)
for a := 0; a < 12; a++ { for a := 0; a < 12; a++ {
concat.DrawImage(imgArray[a], 0, imgDim.Y*a) concat.DrawImage(imgArray[a], 0, imgDim.Y*a)
} }
concat.SavePNG(savename) return concat.Image(), nil
} }
} else { } else {
return errors.New("portalcode must be exactly 12 chars") return nil, errors.New("portalcode must be exactly 12 chars")
} }
return return
} }

2
go.mod
View File

@@ -3,7 +3,7 @@ module gitlab.com/Raum0x2A/nmslib
go 1.16 go 1.16
require ( require (
github.com/fogleman/gg v1.3.0 github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e // indirect golang.org/x/image v0.0.0-20210504121937-7319ad40d33e // indirect
) )

4
go.sum
View File

@@ -1,5 +1,5 @@
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b h1:gqOBIAmkc/ZxXzFrM4wTub7tD0xYaOsaOQ5wOA74lJQ=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e h1:PzJMNfFQx+QO9hrC1GwZ4BoPGeNGhfeQEgcQFArEjPk= golang.org/x/image v0.0.0-20210504121937-7319ad40d33e h1:PzJMNfFQx+QO9hrC1GwZ4BoPGeNGhfeQEgcQFArEjPk=

View File

@@ -10,7 +10,7 @@ func TestCreateBanner(t *testing.T) {
rp := "21F2F8EDB94D" rp := "21F2F8EDB94D"
//rp := RndPortal() //rp := RndPortal()
fileout := "./test.png" fileout := "./test"
err := CreateBanner(rp, fileout, 0) err := CreateBanner(rp, fileout, 0)
if err != nil { if err != nil {