Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
86bc493ead | ||
|
|
3cfae880ee | ||
|
|
b41f25646d | ||
|
|
94f9b4e15c | ||
|
|
6d3a57d31c | ||
|
|
ab420a0a44 | ||
|
|
a0d9dbd269 | ||
|
|
60de0ebb46 | ||
|
|
a370e0f33d | ||
|
|
5faa96d8a7 | ||
|
|
c8f6d51ba1 | ||
|
|
2397ec9aee | ||
|
|
21360acadf | ||
|
|
4aded9c17f | ||
|
|
8945530dbf | ||
|
|
73fa913292 | ||
|
|
47db5b0767 | ||
|
|
4aef1e390a | ||
|
|
284313eacc | ||
|
|
faf72d1f7a | ||
|
|
7c5d4b5ce8 | ||
|
|
ad42c6bb04 | ||
|
|
5ca88596ff | ||
|
|
53d85d958b | ||
|
|
ea51873fe3 | ||
|
|
90d743286f | ||
|
|
bc0c364dcc | ||
|
|
43496932ef | ||
|
|
d6bfa643a9 | ||
|
|
877517b923 | ||
|
|
ccbd68aee8 | ||
|
|
5077876106 | ||
|
|
9682494ce1 | ||
|
|
87bec565f1 | ||
|
|
a7069dce7e | ||
|
|
bc4e334ecd | ||
|
|
9358727075 | ||
|
|
3449ae3bf3 | ||
|
|
023eab03b2 |
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
assets/
|
||||
.vscode/
|
||||
notes.txt
|
||||
Test.png
|
||||
test.png
|
||||
@@ -3,7 +3,9 @@ stages:
|
||||
|
||||
test:
|
||||
stage: test
|
||||
image: golang:1.15.3
|
||||
image: golang:1.16.3
|
||||
script:
|
||||
- go test
|
||||
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
|
||||
BIN
NMH-BlueDream.png
Normal file
BIN
NMH-BlueDream.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 307 KiB |
BIN
NewLennon.png
BIN
NewLennon.png
Binary file not shown.
|
Before Width: | Height: | Size: 228 KiB |
158
README.md
158
README.md
@@ -1,25 +1,27 @@
|
||||
# NMSlib
|
||||
|
||||
**master Branch** : 
|
||||
|
||||
**develop Branch** : 
|
||||
[](COPYING)
|
||||
[](https://godoc.org/gitlab.com/Raum0x2A/nmslib)
|
||||
[](https://gitlab.com/Raum0x2A/nmslib)
|
||||
[](https://gitlab.com/Raum0x2A/nmslib/-/tree/develop)
|
||||
[](https://gitlab.com/Raum0x2A/nmslib/-/releases/v1.0.0)
|
||||
|
||||
NMSlib is a GoLang package for dealing with converting Galactic coordinates to Portal codes and vice versa.
|
||||
|
||||
NMSlib also translates in game languages to english.
|
||||
NMSlib also translates in game languages (Korvax, Gek Vy'Keen and Atlas) to english, and create portal banners.
|
||||
|
||||
## Installation
|
||||
|
||||
To install this module use `go get`
|
||||
|
||||
|
||||
```bash
|
||||
go get -u gitlab.com/bradley.richins/nmslib
|
||||
```golang
|
||||
go get -u gitlab.com/Raum0x2A/nmslib
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
**Example:**
|
||||
### Example:
|
||||
|
||||
```golang
|
||||
package main
|
||||
@@ -27,43 +29,75 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gitlab.com/bradley.richins/nmslib"
|
||||
"gitlab.com/Raum0x2A/nmslib"
|
||||
)
|
||||
|
||||
func main() {
|
||||
portalcode := "006afa556c30"
|
||||
tstvar, err := nmslib.P2gc(portalcode)
|
||||
portalcode := "21F2F8EDB94D"
|
||||
galacticCoords, err := nmslib.P2gc(portalcode)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Printf("Input:\t%s\nExpecting:\t042F:0079:0D55:006A\nHave:\t%s\n", portalcode, tstvar)
|
||||
fmt.Printf("Input:\t%s\nOutput:\t%s\n", portalcode, galacticCoords)
|
||||
|
||||
nmslib.CreateBanner(portalcode, "NewLennon.png", 0)
|
||||
g2p, err := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Printf("Input:\t014C:0077:06DA:01F2\nOutput:\t%s\n", g2p)
|
||||
|
||||
fmt.Println(Translate{"KIHTYOMOLES"}.Kor2Eng())
|
||||
korvax := Translate{"Contraband"}
|
||||
fmt.Println(korvax.Eng2Kor())
|
||||
_ := nmslib.CreateBanner(portalcode, "./NMH-BlueDream.png", 0)
|
||||
_ := nmslib.CreateBanner(nmslib.RndPortal(), "./Random.png", 0)
|
||||
|
||||
fmt.Println(nmslib.Translate{Lang: "korvax"}.ToEng("KIHTYOMOLES"))
|
||||
korvax := nmslib.Translate{"english"}
|
||||
fmt.Println(korvax.ToKorvax("Contraband"))
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
### Creating a Glyph banner with CreateBanner()
|
||||
## Creating a Glyph banner with CreateBanner()
|
||||
|
||||
This function takes 3 parameters:
|
||||
This function takes 3 parameters and reurns an error
|
||||
|
||||
* portalcode: 12 char hex string of portal location
|
||||
* savename: Save location and name
|
||||
* Horizontal/Vertical layout: 0 is horizontal, 1 is vertical
|
||||
* layout:
|
||||
* 00 or 0 is horizontal in light mode
|
||||
* 01 or 1 is horizontal in dark mode
|
||||
* 11 is vertical in dark mode
|
||||
* 10 is vertical in light mode
|
||||
|
||||
|
||||
**Example:**
|
||||
|
||||
Horizontal Layout for Galactic Hub [HUB10-6A Icarus Sun](https://nomanssky.gamepedia.com/HUB10-6A_Icarus_Sun) Eniwa 68/L3
|
||||
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
|
||||
nmslib.CreateBanner("006afa556c30", "NewLennon.png", 0)
|
||||
err := nmslib.CreateBanner("21F2F8EDB94D", "NMH-BlueDream.png", 0)
|
||||
if err !=nil {
|
||||
panic(err)
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
Vertical layout for a random address
|
||||
|
||||
```golang
|
||||
err := nmslib.CreateBanner(nmslib.RndPortal(), "ranportal.png", 11)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
```
|
||||
|
||||

|
||||
|
||||
_Note: Image shown in readme.md's vertical example have been scaled down in gimp for easier viewing on gitlab._
|
||||
|
||||
_Original ranportal.png: 256x3072px_
|
||||
|
||||
|
||||
### Converting Portal code to Galactic address with P2gc()
|
||||
|
||||
@@ -74,30 +108,31 @@ This function only takes 1 parameter and returns a string and error
|
||||
**Example:**
|
||||
|
||||
```golang
|
||||
ga, _ := nmslib.P3gc("006afa556c30")
|
||||
ga, _ := nmslib.P2gc("21F2F8EDB94D")
|
||||
fmt.Println(ga)
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
``042F:0079:0D55:006A``
|
||||
``014C:0077:06DA:01F2``
|
||||
|
||||
### Converting Galactic coordinates to Portal codes with Gc2p()
|
||||
|
||||
This function only takes 1 parameter and returns a string and error
|
||||
This function only takes 2 parameters and returns a string and error
|
||||
|
||||
* galacticaddress: 16 char 4 block hex address
|
||||
* Planet ID [1-6]
|
||||
|
||||
**Example:**
|
||||
|
||||
```golang
|
||||
pc, _ := nmslib.P3gc("042F:0079:0D55:006A")
|
||||
pc, _ := nmslib.Gc2p("014C:0077:06DA:01F2", 2)
|
||||
fmt.Println(pc)
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
``006AFA556C30``
|
||||
``21F2F8EDB94D``
|
||||
|
||||
## Translate Words
|
||||
|
||||
@@ -114,15 +149,17 @@ This function takes only 1 parameter and returns a string
|
||||
|
||||
* Word: Any known Atlas word (ex. Paka)
|
||||
|
||||
_note: Translating to english will **always** result in the lowercase equivilent word_
|
||||
|
||||
**Example:**
|
||||
|
||||
```golang
|
||||
fmt.Println(Translate{"Paka"}.Atl2Eng())
|
||||
fmt.Println(nmslib.Translate{Lang: "atlas"}.ToEng("Paka"))
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
``Awake``
|
||||
``awake``
|
||||
|
||||
### Translate English to Korvax with Eng2Korvax()
|
||||
|
||||
@@ -133,8 +170,8 @@ This function takes only 1 parameter and returns a string
|
||||
**Example:**
|
||||
|
||||
```golang
|
||||
korvax := Translate{"Contraband"}
|
||||
fmt.Println(korvax.Eng2Kor())
|
||||
korvax := nmslib.Translate{"english"}
|
||||
fmt.Println(korvax.ToKorvax("Contraband"))
|
||||
```
|
||||
|
||||
Output:
|
||||
@@ -144,21 +181,54 @@ Output:
|
||||
|
||||
### Language commands
|
||||
|
||||
Gek:
|
||||
- ``Translate{word}.Gek2Eng()``
|
||||
- ``Translate{word}.Eng2Gek()``
|
||||
- ``Translate{Lang: ``string``}.ToEng(``string``)``
|
||||
- ``Translate{Lang: ``string``}.ToKorvax(``string``)``
|
||||
- ``Translate{Lang: ``string``}.ToGek(``string``)``
|
||||
- ``Translate{Lang: ``string``}.ToVykeen(``string``)``
|
||||
- ``Translate{Lang: ``string``}.ToAtlat(``string``)``
|
||||
|
||||
Korvax:
|
||||
- ``Translate{word}.Kor2Eng()``
|
||||
- ``Translate{word}.Eng2Kor()``
|
||||
#### Possible Lang string options
|
||||
|
||||
- ``"english"``
|
||||
- ``"korvax"``
|
||||
- ``"gek"``
|
||||
- ``"vykeen"``
|
||||
- ``"atlas"``
|
||||
|
||||
|
||||
|
||||
## 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:**
|
||||
|
||||
```golang
|
||||
fmt.Println(nmslib.RndPortal())
|
||||
fmt.Println(nmslib.RndPortal())
|
||||
fmt.Println(nmslib.RndAtlas())
|
||||
fmt.Println(nmslib.RndBH())
|
||||
```
|
||||
|
||||
**Output examples:**
|
||||
|
||||
``10EFABDEA373``
|
||||
|
||||
``11EAB355FC8E``
|
||||
|
||||
``107AC0E190D1``
|
||||
|
||||
``10796D57AE15``
|
||||
|
||||
<hr>
|
||||
|
||||
## A Proud member of NMH Hub
|
||||
### [](https://nomanssky.fandom.com/wiki/No_Man%27s_High_Hub) [](https://discord.gg/mhRxf29hns)
|
||||
|
||||
Vy'keen:
|
||||
- ``Translate{word}.Vyk2Eng()``
|
||||
- ``Translate{word}.Eng2Vyk()``
|
||||
|
||||
Atlas:
|
||||
- ``Translate{word}.Atl2Eng()``
|
||||
- ``Translate{word}.Eng2Atl()``
|
||||
|
||||
## License
|
||||
[MIT](COPYING)
|
||||
|
||||
60
convert.go
60
convert.go
@@ -1,3 +1,8 @@
|
||||
/*
|
||||
Xainesworld Video: https://www.youtube.com/watch?v=xmZbkTahw4w
|
||||
Fandom Wiki: https://nomanssky.fandom.com/wiki/Portal_address
|
||||
*/
|
||||
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
@@ -7,21 +12,11 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
/*
|
||||
The maths are all thanks to:
|
||||
Xainesworld
|
||||
- YT Channel - https://www.youtube.com/channel/UCzTB8EBVJWkzJi2sQjdBv9g
|
||||
- Video: https://www.youtube.com/watch?v=xmZbkTahw4w
|
||||
- Website: https://www.xainesworld.com/
|
||||
*/
|
||||
|
||||
/*
|
||||
P2gc - Portal code to galactic coordinates
|
||||
Requires 1 var and returns 1 var string
|
||||
var p string
|
||||
Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
|
||||
Return var string
|
||||
Galactic address (ex. 042F:0079:0D55:006A)
|
||||
Requires 1 var and returns 1 var string and an error
|
||||
var p string: Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
|
||||
Returns var string: Galactic address (ex. 042F:0079:0D55:006A)
|
||||
*/
|
||||
func P2gc(p string) (gc string, err error) {
|
||||
if len(p) == 12 { // Test if length of provided string is 12 chars long
|
||||
@@ -30,19 +25,19 @@ func P2gc(p string) (gc string, err error) {
|
||||
var coord [4]int64
|
||||
coord[1], err = strconv.ParseInt(p[4:6], 16, 16) // Y coordinate
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [4:6]")
|
||||
}
|
||||
coord[2], err = strconv.ParseInt(p[6:9], 16, 16) // Z cooridnate
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [6:9]")
|
||||
}
|
||||
coord[3], err = strconv.ParseInt(p[9:12], 16, 16) // X coordinate
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [9:12]")
|
||||
}
|
||||
coord[0], err = strconv.ParseInt(p[1:4], 16, 16) // SSI (Star System Identifier)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [1:4]")
|
||||
}
|
||||
|
||||
// apply shifts to Handle the shape/boundaries of the galaxy
|
||||
@@ -63,7 +58,7 @@ func P2gc(p string) (gc string, err error) {
|
||||
gc = fmt.Sprintf("%04X:%04X:%04X:%04X", coord[3], coord[1], coord[2], coord[0])
|
||||
|
||||
} else { // if len(p) != 12 return an error
|
||||
return "", errors.New("A 12char HEX string is required. example: 006afa556c30")
|
||||
return "", errors.New("a 12char HEX string is required. example: 006afa556c30")
|
||||
}
|
||||
return // return formated string
|
||||
}
|
||||
@@ -71,17 +66,17 @@ func P2gc(p string) (gc string, err error) {
|
||||
/*
|
||||
Gc2p - Galactic coordinates to portal code
|
||||
Requires 1 string and 1 int returns a string and error
|
||||
var gc string
|
||||
Galactic address (ex. 042F:0079:0D55:006A)
|
||||
var p int
|
||||
Planet ID [1-6]
|
||||
Return var string
|
||||
Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
|
||||
var gc string: Galactic address (ex. 042F:0079:0D55:006A)
|
||||
var p int: Planet ID [1-6]
|
||||
Returns portalcode string: Portal Glyph hex string 12 chars in len (ex. 006afa556c30)
|
||||
*/
|
||||
func Gc2p(gc string, p int) (portalcode string, err error) {
|
||||
// split and store string
|
||||
// coords[0] == X; coords[1] == Y coords[2] == Z;
|
||||
// coords[3] == SSI coords[4] == P
|
||||
if len(gc) != 19 {
|
||||
return "", errors.New("galatic code is the wrong length")
|
||||
}
|
||||
if p > 6 {
|
||||
p = 1
|
||||
}
|
||||
@@ -94,26 +89,30 @@ func Gc2p(gc string, p int) (portalcode string, err error) {
|
||||
var hexCoords [5]int64
|
||||
hexCoords[0], err = strconv.ParseInt(coords[4], 16, 16) // P
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [4]")
|
||||
}
|
||||
hexCoords[1], err = strconv.ParseInt(coords[3], 16, 16) // SSI
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [3]")
|
||||
}
|
||||
hexCoords[2], err = strconv.ParseInt(coords[1], 16, 16) // Y
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [1]")
|
||||
}
|
||||
hexCoords[3], err = strconv.ParseInt(coords[2], 16, 16) // Z
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [2]")
|
||||
}
|
||||
hexCoords[4], err = strconv.ParseInt(coords[0], 16, 16) // X
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", errors.New("error parsing intergers from string: [0]")
|
||||
}
|
||||
|
||||
// Apply shifts to Handle the shape/boundaries of the galaxy
|
||||
/*Note:
|
||||
[P][SSS][YY][ZZZ][XXX] len == 12
|
||||
* SSS == SSI
|
||||
*/
|
||||
hexCoords[2] = hexCoords[2] + 0x81 // Y ->> shift
|
||||
hexCoords[3] = hexCoords[3] + 0x801 // Z ->> shift
|
||||
hexCoords[4] = hexCoords[4] + 0x801 // X ->> shift
|
||||
@@ -125,6 +124,7 @@ func Gc2p(gc string, p int) (portalcode string, err error) {
|
||||
}
|
||||
|
||||
// Assemble padded values as a string
|
||||
|
||||
portalcode = fmt.Sprintf("%00X%03X", hexCoords[0], hexCoords[1])
|
||||
for n := 2; n < len(hexCoords); n++ {
|
||||
if n == 2 {
|
||||
@@ -133,5 +133,5 @@ func Gc2p(gc string, p int) (portalcode string, err error) {
|
||||
portalcode = portalcode + fmt.Sprintf("%03X", hexCoords[n])
|
||||
}
|
||||
}
|
||||
return portalcode, err // return formated string and error
|
||||
return // return formated string and error
|
||||
}
|
||||
|
||||
155
glyphbanner.go
155
glyphbanner.go
@@ -1,101 +1,128 @@
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"image/png"
|
||||
"image"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/nfnt/resize"
|
||||
|
||||
gim "github.com/ozankasikci/go-image-merge"
|
||||
"github.com/fogleman/gg"
|
||||
)
|
||||
|
||||
/*CreateBanner - Output PNG of Portal Glyphs
|
||||
Requires 3 vars and returns 0 var, Outputs a PNG file
|
||||
var portalex string
|
||||
Portal Glyph hex string
|
||||
var savename string
|
||||
Output name of PNG file
|
||||
var vopt int
|
||||
1 enables vertical banner
|
||||
0 enables horizontal banner
|
||||
Requires 3 vars and returns 1 err, Outputs a PNG file
|
||||
var portalex string: Portal Glyph hex string
|
||||
var savename string: Output name of PNG file
|
||||
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 CreateBanner(portalhex string, savename string, vopt int) {
|
||||
var 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 glyphImg [12]string
|
||||
var vert int
|
||||
var horz int
|
||||
var mode string
|
||||
var imgArray [12]image.Image
|
||||
|
||||
// Setup temp dir
|
||||
tempdir, err := ioutil.TempDir("", "nmslib-")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
//Set light or dark mode glyphs
|
||||
if layout == 00 || layout == 10 {
|
||||
mode = "light"
|
||||
} else if layout == 01 || layout == 11 {
|
||||
mode = "dark"
|
||||
} else {
|
||||
// if layout is an invalid option (ie. not a 2 bit binary number default to classic mode/layout
|
||||
layout = 0
|
||||
mode = "light"
|
||||
}
|
||||
defer os.RemoveAll(tempdir)
|
||||
|
||||
// verify len of portalhex
|
||||
if len(portalhex) == 12 {
|
||||
// get hex value from each digit in given string to an array of int64
|
||||
// get hex value from each digit in given string and add it to an array of int64
|
||||
for i := 0; i < len(portalhex); i++ {
|
||||
GlyphHex[i], err = strconv.ParseInt(portalhex[i:int(i+1)], 16, 16)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return nil, errors.New("string provided is not hexadecimal ([0-9][A-F])")
|
||||
}
|
||||
}
|
||||
// assign image location of its glyph hex value to an array of strings
|
||||
|
||||
// assign image location of its glyph-hex value to an array of strings
|
||||
for j := 0; j < len(glyphImg); j++ {
|
||||
glyphImg[j] = fmt.Sprintf("glyphs/GLYPH-%X.png", GlyphHex[j])
|
||||
glyphImg[j] = fmt.Sprintf("assets/glyphs/%s/PORTALSYMBOL.%X.png", mode, GlyphHex[j])
|
||||
}
|
||||
// pull images need from glyph.go and saved them to ./glyphs/
|
||||
|
||||
// pull images need from assets.go and saved them to the temp directory
|
||||
for k := 0; k < len(glyphImg); k++ {
|
||||
data, err := Asset(glyphImg[k])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return nil, errors.New("can not load images from assets: " + glyphImg[k])
|
||||
}
|
||||
_, err2 := os.Stat(tempdir + "/glyphs/")
|
||||
if os.IsNotExist(err2) {
|
||||
errDir := os.MkdirAll(tempdir+"/glyphs", 0755)
|
||||
if errDir != nil {
|
||||
panic(errDir)
|
||||
}
|
||||
err = ioutil.WriteFile(NmsTemp+"/"+glyphImg[k], []byte(data), 0644)
|
||||
if err != nil {
|
||||
return nil, errors.New("can not write file to temp directory")
|
||||
}
|
||||
|
||||
err = ioutil.WriteFile(tempdir+"/"+glyphImg[k], []byte(data), 0644)
|
||||
}
|
||||
}
|
||||
// load images for processing using github.com/ozankasikci/go-image-merge
|
||||
grids := []*gim.Grid{
|
||||
{ImageFilePath: tempdir + "/" + glyphImg[0]}, {ImageFilePath: tempdir + "/" + glyphImg[1]},
|
||||
{ImageFilePath: tempdir + "/" + glyphImg[2]}, {ImageFilePath: tempdir + "/" + glyphImg[3]},
|
||||
{ImageFilePath: tempdir + "/" + glyphImg[4]}, {ImageFilePath: tempdir + "/" + glyphImg[5]},
|
||||
{ImageFilePath: tempdir + "/" + glyphImg[6]}, {ImageFilePath: tempdir + "/" + glyphImg[7]},
|
||||
{ImageFilePath: tempdir + "/" + glyphImg[8]}, {ImageFilePath: tempdir + "/" + glyphImg[9]},
|
||||
{ImageFilePath: tempdir + "/" + glyphImg[10]}, {ImageFilePath: tempdir + "/" + glyphImg[11]},
|
||||
}
|
||||
|
||||
if vopt == 1 { // set vertical rendering
|
||||
vert, horz = 1, 12
|
||||
} else { // set horizontal rendering (default)
|
||||
vert, horz = 12, 1
|
||||
}
|
||||
//Load/open images needed
|
||||
for iter := 0; iter < 12; iter++ {
|
||||
imgArray[iter], err = gg.LoadPNG(NmsTemp + "/" + glyphImg[iter])
|
||||
if err != nil {
|
||||
return nil, errors.New("can not read glyph " + glyphImg[iter])
|
||||
}
|
||||
}
|
||||
|
||||
// create new image from grids
|
||||
rgba, err := gim.New(grids, vert, horz).Merge()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
//begin concatenating images
|
||||
// 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()
|
||||
|
||||
// Resize banner 768x64
|
||||
nuimg := resize.Resize(768, 64, rgba, resize.Lanczos3)
|
||||
//Set Layout
|
||||
//classic horizontal layout
|
||||
if layout == 01 || layout == 00 {
|
||||
imgWidth := imgDim.X * 12
|
||||
imgHeight := imgDim.Y
|
||||
concat := gg.NewContext(imgWidth, imgHeight)
|
||||
for a := 0; a < 12; a++ {
|
||||
concat.DrawImage(imgArray[a], imgDim.X*a, 0)
|
||||
}
|
||||
return concat.Image(), nil
|
||||
}
|
||||
|
||||
// save the output to png
|
||||
fmt.Printf("Saving %s to %s\n", portalhex, savename)
|
||||
file, err := os.Create(savename)
|
||||
err = png.Encode(file, nuimg)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
//Vertical layout
|
||||
if layout == 10 || layout == 11 {
|
||||
imgWidth := imgDim.X
|
||||
imgHeight := imgDim.Y * 12
|
||||
concat := gg.NewContext(imgWidth, imgHeight)
|
||||
for a := 0; a < 12; a++ {
|
||||
concat.DrawImage(imgArray[a], 0, imgDim.Y*a)
|
||||
}
|
||||
return concat.Image(), nil
|
||||
}
|
||||
} else {
|
||||
return nil, errors.New("portalcode must be exactly 12 chars")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
9
go.mod
9
go.mod
@@ -1,8 +1,9 @@
|
||||
module gitlab.com/bradley.richins/nmslib
|
||||
module gitlab.com/Raum0x2A/nmslib
|
||||
|
||||
go 1.15
|
||||
go 1.16
|
||||
|
||||
require (
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
|
||||
github.com/ozankasikci/go-image-merge v0.2.2
|
||||
github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||
golang.org/x/image v0.0.0-20210504121937-7319ad40d33e // indirect
|
||||
)
|
||||
|
||||
11
go.sum
11
go.sum
@@ -1,4 +1,7 @@
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||
github.com/ozankasikci/go-image-merge v0.2.2 h1:K370BLLTIsamwjAeViiPntf7GiG3h9pXzDmxXCbN8/0=
|
||||
github.com/ozankasikci/go-image-merge v0.2.2/go.mod h1:NQ2aN0b21buFx3p+5x4dZrKuPSLh2uBukK7F30BrYTo=
|
||||
github.com/fogleman/gg v1.3.1-0.20210131172831-af4cd580789b h1:gqOBIAmkc/ZxXzFrM4wTub7tD0xYaOsaOQ5wOA74lJQ=
|
||||
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/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/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
||||
71
init.go
Normal file
71
init.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
/*NmsTemp - Global string variable
|
||||
Location of instance temporary directory
|
||||
Dir Structure:
|
||||
- NmsTemp
|
||||
-
|
||||
*/
|
||||
var NmsTemp string
|
||||
|
||||
/*Initialize temporary directory
|
||||
create a temp dir and save location to `NmsTemp` string
|
||||
*/
|
||||
func init() {
|
||||
// create temp dir
|
||||
temploc, err := ioutil.TempDir("", "nmslib-")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
NmsTemp = temploc
|
||||
|
||||
//Create directory structure
|
||||
err = os.Mkdir(NmsTemp+"/assets", 0755)
|
||||
if err != nil {
|
||||
panic(errors.New("failed to create temporary folder"))
|
||||
}
|
||||
err = os.Mkdir(NmsTemp+"/assets/lang", 0755)
|
||||
if err != nil {
|
||||
panic(errors.New("failed to create temporary folder"))
|
||||
}
|
||||
err = os.Mkdir(NmsTemp+"/assets/glyphs", 0755)
|
||||
if err != nil {
|
||||
panic(errors.New("failed to create temporary folder"))
|
||||
}
|
||||
err = os.Mkdir(NmsTemp+"/assets/glyphs/dark", 0755)
|
||||
if err != nil {
|
||||
panic(errors.New("failed to create temporary folder"))
|
||||
}
|
||||
err = os.Mkdir(NmsTemp+"/assets/glyphs/light", 0755)
|
||||
if err != nil {
|
||||
panic(errors.New("failed to create temporary folder"))
|
||||
}
|
||||
|
||||
//Write language files to temp directory
|
||||
fileloc := [4]string{"atlas-lang.csv", "gek-lang.csv", "korvax-lang.csv", "vykeen-lang.csv"}
|
||||
for x := 0; x < 4; x++ {
|
||||
data, err := Asset("assets/lang/" + fileloc[x])
|
||||
if err != nil {
|
||||
panic(errors.New("can not load: " + fileloc[x]))
|
||||
}
|
||||
err = ioutil.WriteFile(NmsTemp+"/assets/lang/"+fileloc[x], []byte(data), 0644)
|
||||
if err != nil {
|
||||
panic(errors.New("can not write " + fileloc[x] + " to temp dir"))
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*CleanUp removes temporary directory an it's contents
|
||||
this is intended to be called in a defer statement in func main
|
||||
takes no input
|
||||
*/
|
||||
func CleanUp() {
|
||||
os.RemoveAll(NmsTemp)
|
||||
}
|
||||
11
init_test.go
Normal file
11
init_test.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestInit(t *testing.T) {
|
||||
fmt.Printf("\nTesting init:\n")
|
||||
fmt.Printf("Temporary directory: %s\n\n", NmsTemp)
|
||||
}
|
||||
262
lang.go
262
lang.go
@@ -2,190 +2,140 @@ package nmslib
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
/*
|
||||
Translate words
|
||||
/*Translate Game languages and english
|
||||
Translate.Lang sets source language for translations
|
||||
options are:
|
||||
korvax
|
||||
gek
|
||||
vykeen
|
||||
atlas
|
||||
english
|
||||
*/
|
||||
type Translate struct {
|
||||
word string
|
||||
Lang string
|
||||
}
|
||||
|
||||
// trans - set up structure of a word iteration
|
||||
type trans0 struct {
|
||||
english string // english word
|
||||
word string // no caps word
|
||||
capword string // Capitalized word
|
||||
acpword string // ALL CAPITALIZED WORD
|
||||
}
|
||||
|
||||
/*
|
||||
Kor2Eng translate korvax word to english word
|
||||
/*Translate source language to english
|
||||
Translate any NMS language (ie. Korvax) to english
|
||||
*/
|
||||
func (t Translate) Kor2Eng() (returnstring string) {
|
||||
csvlines := openCSV("korvax-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toEng(t, csvlines))
|
||||
}
|
||||
return
|
||||
func (t Translate) ToEng(word string) (translation string) {
|
||||
//return translate2english(word, langFile(t.Lang))
|
||||
return Translator(word, t.Lang, "english")
|
||||
}
|
||||
|
||||
/*
|
||||
Eng2Kor translate english word to korvax word
|
||||
/*Translate source language to Korvax
|
||||
Translate any NMS language or english (ie. Gek) to Korvax
|
||||
*/
|
||||
func (t Translate) Eng2Kor() (returnstring string) {
|
||||
csvlines := openCSV("korvax-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toNMS(t, csvlines))
|
||||
}
|
||||
return
|
||||
func (t Translate) ToKorvax(word string) (translation string) {
|
||||
return Translator(word, t.Lang, "korvax")
|
||||
}
|
||||
|
||||
/*
|
||||
Gek2Eng translate Gek word to english word
|
||||
/*Translate source language to Vy'Keen
|
||||
Translate any NMS language or english (ie. Atlas) to Vy'Keen
|
||||
*/
|
||||
func (t Translate) Gek2Eng() (returnstring string) {
|
||||
csvlines := openCSV("gek-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toEng(t, csvlines))
|
||||
}
|
||||
return
|
||||
func (t Translate) ToVykeen(word string) (translation string) {
|
||||
return Translator(word, t.Lang, "vykeen")
|
||||
}
|
||||
|
||||
/*
|
||||
Eng2Gek translate english word to Gek word
|
||||
/*Translate source language to Gek
|
||||
Translate any NMS language or english (ie. Vy'Keen) to Gek
|
||||
*/
|
||||
func (t Translate) Eng2Gek() (returnstring string) {
|
||||
csvlines := openCSV("gek-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toNMS(t, csvlines))
|
||||
}
|
||||
return
|
||||
func (t Translate) ToGek(word string) (translation string) {
|
||||
return Translator(word, t.Lang, "Gek")
|
||||
}
|
||||
|
||||
/*
|
||||
Vyk2Eng translate vykeen word to english word
|
||||
/*Translate source language to Atlas
|
||||
Translate any NMS language or english (ie. Korvax) to Atlas
|
||||
*/
|
||||
func (t Translate) Vyk2Eng() (returnstring string) {
|
||||
csvlines := openCSV("vykeen-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toEng(t, csvlines))
|
||||
}
|
||||
return
|
||||
func (t Translate) ToAtlas(word string) (translation string) {
|
||||
return Translator(word, t.Lang, "atlas")
|
||||
}
|
||||
|
||||
/*
|
||||
Eng2Vyk translate english word to vykeen word
|
||||
*/
|
||||
func (t Translate) Eng2Vyk() (returnstring string) {
|
||||
csvlines := openCSV("vykeen-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toNMS(t, csvlines))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
Atl2Eng translate Atlas word to english word
|
||||
*/
|
||||
func (t Translate) Atl2Eng() (returnstring string) {
|
||||
csvlines := openCSV("atlas-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toEng(t, csvlines))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
Eng2Atl translate english word to Atlas word
|
||||
*/
|
||||
func (t Translate) Eng2Atl() (returnstring string) {
|
||||
csvlines := openCSV("atlas-lang.csv")
|
||||
for range csvlines {
|
||||
returnstring = (toNMS(t, csvlines))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func toEng(t Translate, csvlines [][]string) string {
|
||||
returnstring := "*\\Kzzzzzzt\\*" // word not found default
|
||||
for _, line := range csvlines {
|
||||
lang := trans0{
|
||||
english: strings.ToLower(line[0]),
|
||||
word: strings.ToLower(line[1]),
|
||||
capword: strings.ToLower(line[2]),
|
||||
acpword: strings.ToLower(line[3]),
|
||||
}
|
||||
// check translate struct for value
|
||||
if strings.ToLower(t.word) == lang.word {
|
||||
returnstring = lang.english
|
||||
} else if strings.ToLower(t.word) == lang.capword {
|
||||
returnstring = strings.Title(strings.ToLower(lang.english))
|
||||
} else if strings.ToLower(t.word) == lang.acpword {
|
||||
returnstring = strings.ToUpper(lang.english)
|
||||
}
|
||||
}
|
||||
return returnstring
|
||||
}
|
||||
|
||||
func toNMS(t Translate, csvlines [][]string) string {
|
||||
returnstring := "*\\Kzzzzzzt\\*" // word not found default
|
||||
for _, line := range csvlines {
|
||||
lang := trans0{
|
||||
english: line[0],
|
||||
word: line[1],
|
||||
capword: line[2],
|
||||
acpword: line[3],
|
||||
}
|
||||
if t.word == lang.english {
|
||||
if lang.word != "" {
|
||||
returnstring = lang.word
|
||||
}
|
||||
}
|
||||
if t.word == strings.Title(strings.ToLower(lang.english)) {
|
||||
if lang.capword != "" {
|
||||
returnstring = strings.Title(strings.ToLower(lang.capword))
|
||||
}
|
||||
}
|
||||
if t.word == strings.ToUpper(lang.english) {
|
||||
if lang.acpword != "" {
|
||||
returnstring = strings.ToUpper(lang.acpword)
|
||||
}
|
||||
}
|
||||
}
|
||||
return returnstring
|
||||
}
|
||||
|
||||
func openCSV(lagcsv string) [][]string {
|
||||
// create temp dir
|
||||
tempdir, err := ioutil.TempDir("", "nmslib-")
|
||||
// read language files
|
||||
func langFile(lang string) [][]string {
|
||||
filepath := NmsTemp + "/assets/lang/" + lang + "-lang.csv"
|
||||
csvFile, err := os.Open(filepath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer os.RemoveAll(tempdir) // Clean up temp files
|
||||
defer csvFile.Close()
|
||||
|
||||
// extract language file from resources.go
|
||||
data, err := Asset(lagcsv)
|
||||
lines, err := csv.NewReader(csvFile).ReadAll()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// wirte extracted data to temp dir
|
||||
err = ioutil.WriteFile(tempdir+"/"+lagcsv, []byte(data), 0644)
|
||||
csvFile, err := os.Open(tempdir + "/" + lagcsv)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer csvFile.Close() // close language file when finished
|
||||
|
||||
// read csv file from memory
|
||||
csvlines, err := csv.NewReader(csvFile).ReadAll()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
return csvlines
|
||||
return lines
|
||||
}
|
||||
|
||||
/*Translate any in game language to another including english (ie. Korvax to Gek)
|
||||
Translating from english to a game language will alway default to all lower case for now
|
||||
*/
|
||||
func Translator(word string, source string, target string) string {
|
||||
var sourcekey [4]string
|
||||
var targetkey [4]string
|
||||
var dmy string
|
||||
var rt string
|
||||
|
||||
rt = "*\\Kzzzzzzt\\*"
|
||||
|
||||
if source == "english" {
|
||||
dmy = target
|
||||
} else {
|
||||
dmy = source
|
||||
}
|
||||
for _, line := range langFile(dmy) {
|
||||
for _, trans := range line {
|
||||
if trans == word {
|
||||
sourcekey[0] = line[0]
|
||||
sourcekey[1] = line[1]
|
||||
sourcekey[2] = line[2]
|
||||
sourcekey[3] = line[3]
|
||||
}
|
||||
}
|
||||
if target != "english" {
|
||||
for _, line := range langFile(target) {
|
||||
if strings.EqualFold(line[0], sourcekey[0]) {
|
||||
targetkey[0] = line[0]
|
||||
targetkey[1] = line[1]
|
||||
targetkey[2] = line[2]
|
||||
targetkey[3] = line[3]
|
||||
}
|
||||
}
|
||||
if strings.EqualFold(word, sourcekey[0]) {
|
||||
if targetkey[0] != "" {
|
||||
rt = targetkey[0]
|
||||
}
|
||||
} else if strings.EqualFold(word, sourcekey[1]) {
|
||||
if targetkey[1] != "" {
|
||||
rt = targetkey[1]
|
||||
}
|
||||
} else if strings.EqualFold(word, sourcekey[2]) {
|
||||
if targetkey[2] != "" {
|
||||
rt = targetkey[2]
|
||||
}
|
||||
} else if strings.EqualFold(word, sourcekey[3]) {
|
||||
if targetkey[3] != "" {
|
||||
rt = targetkey[3]
|
||||
}
|
||||
}
|
||||
if source == "english" {
|
||||
rt = targetkey[1]
|
||||
}
|
||||
} else {
|
||||
if strings.EqualFold(word, sourcekey[0]) {
|
||||
rt = sourcekey[0]
|
||||
} else if strings.EqualFold(word, sourcekey[1]) {
|
||||
rt = strings.ToLower(sourcekey[0])
|
||||
} else if strings.EqualFold(word, sourcekey[2]) {
|
||||
rt = strings.Title(sourcekey[0])
|
||||
} else if strings.EqualFold(word, sourcekey[3]) {
|
||||
rt = strings.ToUpper(sourcekey[0])
|
||||
}
|
||||
}
|
||||
}
|
||||
return rt
|
||||
}
|
||||
|
||||
30
nmslib-convert_test.go
Normal file
30
nmslib-convert_test.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestPortal2Galactic(t *testing.T) {
|
||||
want, err := P2gc("21F2F8EDB94D")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
if want != "014C:0077:06DA:01F2" {
|
||||
t.Errorf("Testing P2gc(\"21F2F8EDB94D\"): got %q, want: 014C:0077:06DA:01F2.\n", want)
|
||||
} else {
|
||||
fmt.Printf("Testing P2gc(\"21F2F8EDB94D\"): got: %q, want: 014C:0077:06DA:01F2.\n", want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGalactic2portal(t *testing.T) {
|
||||
want, err := Gc2p("014C:0077:06DA:01F2", 2)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
if want != "21F2F8EDB94D" {
|
||||
t.Errorf("Testing Gc2p(\"014C:0077:06DA:01F2\"): got %q, want: 21F2F8EDB94D.\n", want)
|
||||
} else {
|
||||
fmt.Printf("Testing Gc2p(\"014C:0077:06DA:01F2\"): got: %q, want: 21F2F8EDB94D.\n", want)
|
||||
}
|
||||
}
|
||||
21
nmslib-glyphbanner_test.go
Normal file
21
nmslib-glyphbanner_test.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCreateBanner(t *testing.T) {
|
||||
fmt.Printf("\nTesting CreateBanner: ")
|
||||
|
||||
rp := "21F2F8EDB94D"
|
||||
//rp := RndPortal()
|
||||
fileout := "./test"
|
||||
|
||||
err := CreateBanner(rp, fileout, 0)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
fmt.Printf("Portal address `%s` rendered as `%s`\n", rp, fileout)
|
||||
}
|
||||
21
nmslib-rpcg_test.go
Normal file
21
nmslib-rpcg_test.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRndPortal(t *testing.T) {
|
||||
fmt.Printf("\nRandom Portal Code: ")
|
||||
fmt.Println(RndPortal())
|
||||
}
|
||||
|
||||
func TestRndAtlas(t *testing.T) {
|
||||
fmt.Printf("semi-Random Atlas Code: ")
|
||||
fmt.Println(RndAtlas())
|
||||
}
|
||||
|
||||
func TestRndBH(t *testing.T) {
|
||||
fmt.Printf("semi-Random black hole Code: ")
|
||||
fmt.Println(RndBH())
|
||||
}
|
||||
36
nmslib-translate_test.go
Normal file
36
nmslib-translate_test.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTranslate(t *testing.T) {
|
||||
kor2eng := Translate{Lang: "korvax"}
|
||||
if kor2eng.ToEng("Alinichel") != "Emergency" {
|
||||
t.Errorf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency")
|
||||
} else {
|
||||
fmt.Printf("\nTesting Translate{Lang: \"korvax\"}.ToEng(\"Alinichel\"): got %q, want: %q.\n", kor2eng.ToEng("Alinichel"), "Emergency")
|
||||
}
|
||||
|
||||
vyk2eng := Translate{"vykeen"}
|
||||
if vyk2eng.ToEng("Aqo") != "Foes" {
|
||||
t.Errorf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes")
|
||||
} else {
|
||||
fmt.Printf("Testing Translate{Lang: \"vykeen\"}.ToEng(\"Aqo\"): got %q, want: %q.\n", vyk2eng.ToEng("Aqo"), "Foes")
|
||||
}
|
||||
|
||||
engWord := Translate{"english"}
|
||||
if engWord.ToKorvax("learn") != "achi" {
|
||||
t.Errorf("Testing Translate{Lang: \"english\"}.ToKor(\"learn\"): got %q, want: %q.\n", engWord.ToKorvax("learn"), "achi")
|
||||
} else {
|
||||
fmt.Printf("Testing Translate{Lang: \"english\"}.ToKor(\"learn\"): got %q, want: %q.\n", engWord.ToKorvax("learn"), "achi")
|
||||
}
|
||||
|
||||
fmt.Println("Blind Test: " + Translate{"gek"}.ToAtlas("baturk")) // word does not exist in Atlas lang
|
||||
fmt.Println("Blind Test: " + Translate{"gek"}.ToAtlas("Tor")) // word exists
|
||||
|
||||
fmt.Println("Running CleanUp()")
|
||||
CleanUp()
|
||||
fmt.Printf("\nTesting complete.\nStatus: ")
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestPortal2Galactic(t *testing.T) {
|
||||
want, err := P2gc("006afa556c30")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if want != "042F:0079:0D55:006A" {
|
||||
t.Errorf("Testing P2gc(\"006afa556c30\"): got %q, want: %q.\n", want, "042F:0079:0D55:006A")
|
||||
} else {
|
||||
fmt.Printf("Testing P2gc(\"006afa556c30\"): got: %q, want: %q.\n", want, "042F:0079:0D55:006A")
|
||||
}
|
||||
|
||||
want, err = P2gc("41EDF9554C2F")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if want != "042E:0078:0D53:01ED" {
|
||||
t.Errorf("Testing P2gc(\"41EDF9554C2F\"): got %q, want: %q.\n", want, "042E:0078:0D53:01ED")
|
||||
} else {
|
||||
fmt.Printf("Testing P2gc(\"41EDF9554C2F\"): got: %q, want: %q.\n", want, "042E:0078:0D53:01ED")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGalactic2portal(t *testing.T) {
|
||||
want, err := Gc2p("042F:0079:0D55:006A", 1)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if want != "106AFA556C30" {
|
||||
t.Errorf("\nTesting Gc2p(\"042F:0079:0D55:006A\"): got %q, want: %q.\n", want, "106AFA556C30")
|
||||
} else {
|
||||
fmt.Printf("\nTesting Gc2p(\"042F:0079:0D55:006A\"): got: %q, want: %q.\n", want, "106AFA556C30")
|
||||
}
|
||||
|
||||
want, err = Gc2p("042E:0078:0D53:01ED", 4)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if want != "41EDF9554C2F" {
|
||||
t.Errorf("Testing Gc2p(\"042E:0078:0D53:01ED\"): got %q, want: %q.\n", want, "41EDF9554C2F")
|
||||
} else {
|
||||
fmt.Printf("Testing Gc2p(\"042E:0078:0D53:01ED\"): got: %q, want: %q.\n", want, "41EDF9554C2F")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateBanner(t *testing.T) {
|
||||
fmt.Printf("\nTesting CreateBanner: ")
|
||||
CreateBanner("006afa556c30", "/tmp/Test.png", 0)
|
||||
}
|
||||
|
||||
func TestTranslate(t *testing.T) {
|
||||
want := Translate{"Paka"}
|
||||
if want.Atl2Eng() != "Awake" {
|
||||
t.Errorf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
|
||||
} else {
|
||||
fmt.Printf("\nTesting Translate{\"Paka\"}.Atl2Eng(): got %q, want: %q.\n", want.Atl2Eng(), "Awake")
|
||||
}
|
||||
want = Translate{"hofsos"}
|
||||
if want.Gek2Eng() != "answer" {
|
||||
t.Errorf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer")
|
||||
} else {
|
||||
fmt.Printf("Testing Translate{\"hofsos\"}.Gek2Eng(): got %q, want: %q.\n", want.Gek2Eng(), "answer")
|
||||
}
|
||||
|
||||
want = Translate{"Aqo"}
|
||||
if want.Vyk2Eng() != "Foes" {
|
||||
t.Errorf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
|
||||
} else {
|
||||
fmt.Printf("Testing Translate{\"Aqo\"}.Vyk2Eng(): got %q, want: %q.\n", want.Vyk2Eng(), "Foes")
|
||||
}
|
||||
want = Translate{"Alinichel"}
|
||||
if want.Kor2Eng() != "Emergency" {
|
||||
t.Errorf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
|
||||
} else {
|
||||
fmt.Printf("Testing Translate{\"Alinichel\"}.Kor2Eng(): got %q, want: %q.\n", want.Kor2Eng(), "Emergency")
|
||||
}
|
||||
fmt.Printf("\nTesting complete.\nStatus: ")
|
||||
}
|
||||
BIN
ranportal_scaled.png
Normal file
BIN
ranportal_scaled.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
674
resources.go
674
resources.go
File diff suppressed because one or more lines are too long
92
rpcg.go
Normal file
92
rpcg.go
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
[P][SSS][YY][ZZZ][XXX] – (P = Planet Index / S = Star System Index / Y = Height / Z = Width / X = Length)
|
||||
|
||||
`Solar System Index
|
||||
A Solar System Index is assigned to each star system in a region. It always begins at SolarSystemIndex=001
|
||||
and counts up by one for every star system. The number of star systems in a region is variable so the
|
||||
maximum value of the Solar System Index is also variable, though the two correspond directly. To date there
|
||||
is no discovered value that is higher than SolarSystemIndex=243 (Mamundi-Kate in the Baadossm Anomaly of
|
||||
Euclid galaxy), meaning that 579 is the maximum number of star systems yet discovered in a region. Based
|
||||
on the evidence that every region has a SolarSystemIndex=079 and SolarSystemIndex=07A (with the former
|
||||
always having a Black Hole and the latter always having an Atlas Station), it is known that every region has
|
||||
at least 122 star systems. SolarSystemIndex=000 always leads to the region's first system, just like
|
||||
PlanetIndex=0 always leads to the first portal of a system due to the error proximity mechanic.`
|
||||
Source https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index
|
||||
|
||||
*/
|
||||
|
||||
package nmslib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"time"
|
||||
)
|
||||
|
||||
/*
|
||||
RndPortal - Random Portalcode generator
|
||||
Requires no input required and returns a string
|
||||
*/
|
||||
|
||||
func RndPortal() (final string) {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
min := 0x1
|
||||
ymax := 0xFF
|
||||
xzmax := 0xFFF
|
||||
ssimax := 0x242 // set this low to lower chances of an invalid address
|
||||
|
||||
x := rand.Intn(xzmax-min+1) + min
|
||||
z := rand.Intn(xzmax-min+1) + min
|
||||
y := rand.Intn(ymax-min+1) + min
|
||||
ssi := rand.Intn(ssimax-min+1) + min
|
||||
|
||||
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, ssi, y, z, x)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
/*RndAtlas genorates a semi-random atlas code
|
||||
Requires no input and returns a string
|
||||
|
||||
This is not a true random atlas genorator. Insted this will create a Planet id of 1, Solar System Index of 0x07A and random Y, Z, X
|
||||
SSI 0x07A always has an Atlas Interface.
|
||||
|
||||
REF: https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index https://nomanssky.fandom.com/wiki/Star_system#Classification
|
||||
*/
|
||||
func RndAtlas() (final string) {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
min := 0x1
|
||||
ymax := 0xFF
|
||||
xzmax := 0xFFF
|
||||
|
||||
x := rand.Intn(xzmax-min+1) + min
|
||||
z := rand.Intn(xzmax-min+1) + min
|
||||
y := rand.Intn(ymax-min+1) + min
|
||||
|
||||
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, 0x07A, y, z, x)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
/*RndBH genorates a semi-random atlas code
|
||||
Requires no input required and returns a string
|
||||
|
||||
This is not a true random atlas genorator. Insted this will create a Planet id of 1, Solar System Index of 0x079 and random Y, Z, X
|
||||
SSI 0x079 always has a black hole.
|
||||
|
||||
REF: https://nomanssky.fandom.com/wiki/Portal_address#Solar_System_Index https://nomanssky.fandom.com/wiki/Star_system#Classification
|
||||
*/
|
||||
func RndBH() (final string) {
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
min := 0x1
|
||||
ymax := 0xFF
|
||||
xzmax := 0xFFF
|
||||
|
||||
x := rand.Intn(xzmax-min+1) + min
|
||||
z := rand.Intn(xzmax-min+1) + min
|
||||
y := rand.Intn(ymax-min+1) + min
|
||||
|
||||
final = fmt.Sprintf("%00X%03X%02X%03X%03X", 1, 0x079, y, z, x)
|
||||
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user