mirror of
https://github.com/arnaucube/gogame.git
synced 2026-02-06 19:16:40 +01:00
add points for buildings
This commit is contained in:
@@ -20,6 +20,7 @@ The frontend is in https://github.com/arnaucube/gogame-frontend
|
|||||||
- [x] mongodb connectors
|
- [x] mongodb connectors
|
||||||
- [x] buildings engine
|
- [x] buildings engine
|
||||||
- [x] resources engine
|
- [x] resources engine
|
||||||
|
- [x] points
|
||||||
- [ ] costs calculators
|
- [ ] costs calculators
|
||||||
- [x] mining growth from mines/buildings
|
- [x] mining growth from mines/buildings
|
||||||
- [x] building costs
|
- [x] building costs
|
||||||
|
|||||||
@@ -34,7 +34,11 @@ type RegisterMsg struct {
|
|||||||
|
|
||||||
func handleRegister(c *gin.Context) {
|
func handleRegister(c *gin.Context) {
|
||||||
var registerMsg RegisterMsg
|
var registerMsg RegisterMsg
|
||||||
c.BindJSON(®isterMsg)
|
err := c.BindJSON(®isterMsg)
|
||||||
|
if err != nil {
|
||||||
|
fail(c, err, "error on json")
|
||||||
|
return
|
||||||
|
}
|
||||||
user, err := userservice.Register(registerMsg.Name, registerMsg.Password, registerMsg.Email)
|
user, err := userservice.Register(registerMsg.Name, registerMsg.Password, registerMsg.Email)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fail(c, err, "error on register")
|
fail(c, err, "error on register")
|
||||||
@@ -52,7 +56,11 @@ type LoginMsg struct {
|
|||||||
|
|
||||||
func handleLogin(c *gin.Context) {
|
func handleLogin(c *gin.Context) {
|
||||||
var loginMsg LoginMsg
|
var loginMsg LoginMsg
|
||||||
c.BindJSON(&loginMsg)
|
err := c.BindJSON(&loginMsg)
|
||||||
|
if err != nil {
|
||||||
|
fail(c, err, "error on json")
|
||||||
|
return
|
||||||
|
}
|
||||||
token, user, err := userservice.Login(loginMsg.Email, loginMsg.Password)
|
token, user, err := userservice.Login(loginMsg.Email, loginMsg.Password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fail(c, err, "error on login")
|
fail(c, err, "error on login")
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -50,10 +51,11 @@ type Planet struct {
|
|||||||
|
|
||||||
func NewPlanet(db *database.Db, size int64, name string, ownerId bson.ObjectId) (*Planet, error) {
|
func NewPlanet(db *database.Db, size int64, name string, ownerId bson.ObjectId) (*Planet, error) {
|
||||||
newPlanet := Planet{
|
newPlanet := Planet{
|
||||||
Db: db,
|
Db: db,
|
||||||
Size: size,
|
LastUpdated: time.Now(),
|
||||||
Name: name,
|
Size: size,
|
||||||
OwnerId: ownerId,
|
Name: name,
|
||||||
|
OwnerId: ownerId,
|
||||||
Resources: Resources{
|
Resources: Resources{
|
||||||
Metal: 500,
|
Metal: 500,
|
||||||
Crystal: 500,
|
Crystal: 500,
|
||||||
@@ -73,12 +75,14 @@ func NewPlanet(db *database.Db, size int64, name string, ownerId bson.ObjectId)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
fmt.Println(newPlanet.Resources)
|
||||||
|
|
||||||
var planet *Planet
|
var planet *Planet
|
||||||
err = db.Planets.Find(bson.M{"ownerid": newPlanet.OwnerId}).One(&planet)
|
err = db.Planets.Find(bson.M{"ownerid": newPlanet.OwnerId}).One(&planet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
fmt.Println(planet.Resources)
|
||||||
|
|
||||||
return planet, nil
|
return planet, nil
|
||||||
}
|
}
|
||||||
@@ -132,7 +136,6 @@ func (p *Planet) GetResources() (*Resources, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// return user
|
|
||||||
return &p.Resources, nil
|
return &p.Resources, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,6 +211,21 @@ func (p *Planet) CheckCurrentBuild() (bool, error) {
|
|||||||
if p.CurrentBuild.Title != "" {
|
if p.CurrentBuild.Title != "" {
|
||||||
// the planet is building something, check if has ended
|
// the planet is building something, check if has ended
|
||||||
if p.CurrentBuild.Ends.Unix() < time.Now().Unix() {
|
if p.CurrentBuild.Ends.Unix() < time.Now().Unix() {
|
||||||
|
// add points for resources spend
|
||||||
|
resourcesNeeded, err := p.GetBuildingCost(p.CurrentBuild.Building)
|
||||||
|
if err != nil {
|
||||||
|
return true, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// add points for resources used (each 1000 units, 1 point
|
||||||
|
points := ResourcesToPoints(resourcesNeeded)
|
||||||
|
// 1000 point is the 1 point for the building
|
||||||
|
points += 1000
|
||||||
|
err = AddPoints(p.Db, p.OwnerId, points)
|
||||||
|
if err != nil {
|
||||||
|
return true, err
|
||||||
|
}
|
||||||
|
|
||||||
// upgrade level of building in planet
|
// upgrade level of building in planet
|
||||||
p.Buildings[p.CurrentBuild.Building] += 1
|
p.Buildings[p.CurrentBuild.Building] += 1
|
||||||
|
|
||||||
@@ -216,7 +234,7 @@ func (p *Planet) CheckCurrentBuild() (bool, error) {
|
|||||||
p.CurrentBuild.Building = ""
|
p.CurrentBuild.Building = ""
|
||||||
|
|
||||||
// store in db
|
// store in db
|
||||||
err := p.Db.Planets.Update(bson.M{"_id": p.Id}, p)
|
err = p.Db.Planets.Update(bson.M{"_id": p.Id}, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return true, err
|
return true, err
|
||||||
}
|
}
|
||||||
@@ -229,6 +247,7 @@ func (p *Planet) CheckCurrentBuild() (bool, error) {
|
|||||||
return false, nil
|
return false, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Planet) UpgradeBuilding(building string) error {
|
func (p *Planet) UpgradeBuilding(building string) error {
|
||||||
busy, err := p.CheckCurrentBuild()
|
busy, err := p.CheckCurrentBuild()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -244,7 +263,7 @@ func (p *Planet) UpgradeBuilding(building string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// get time cost of the build
|
// get time cost of the build
|
||||||
timei64 := ConstructionTime(resourcesNeeded, p.Buildings[building]+1)
|
timei64 := ConstructionTime(resourcesNeeded, p.Buildings["roboticsfactory"])
|
||||||
endsTime := time.Now().Add(time.Second * time.Duration(timei64))
|
endsTime := time.Now().Add(time.Second * time.Duration(timei64))
|
||||||
|
|
||||||
// if user have enough resources to upgrade the building, upgrade the building
|
// if user have enough resources to upgrade the building, upgrade the building
|
||||||
@@ -252,6 +271,7 @@ func (p *Planet) UpgradeBuilding(building string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// add current task to planet
|
// add current task to planet
|
||||||
p.CurrentBuild.Building = building
|
p.CurrentBuild.Building = building
|
||||||
p.CurrentBuild.Title = building + " - Level " + strconv.Itoa(int(p.Buildings[building]))
|
p.CurrentBuild.Title = building + " - Level " + strconv.Itoa(int(p.Buildings[building]))
|
||||||
@@ -262,3 +282,13 @@ func (p *Planet) UpgradeBuilding(building string) error {
|
|||||||
err = p.Db.Planets.Update(bson.M{"_id": p.Id}, p)
|
err = p.Db.Planets.Update(bson.M{"_id": p.Id}, p)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ResourcesToPoints(r Resources) int64 {
|
||||||
|
p := int64(0)
|
||||||
|
p = p + r.Metal
|
||||||
|
p = p + r.Crystal
|
||||||
|
p = p + r.Deuterium
|
||||||
|
p = p + r.Energy
|
||||||
|
fmt.Println("p", p)
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ type UserDb struct {
|
|||||||
Email string
|
Email string
|
||||||
LastUpdated time.Time
|
LastUpdated time.Time
|
||||||
Planets []bson.ObjectId
|
Planets []bson.ObjectId
|
||||||
|
Points int64 // real points are this value / 1000
|
||||||
}
|
}
|
||||||
|
|
||||||
// User is the data in memory, after getting it from DB
|
// User is the data in memory, after getting it from DB
|
||||||
@@ -24,6 +25,7 @@ type User struct {
|
|||||||
Name string
|
Name string
|
||||||
LastUpdated time.Time
|
LastUpdated time.Time
|
||||||
Planets []bson.ObjectId
|
Planets []bson.ObjectId
|
||||||
|
Points int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUser(db *database.Db, name, password, email string) (*User, error) {
|
func NewUser(db *database.Db, name, password, email string) (*User, error) {
|
||||||
@@ -33,6 +35,7 @@ func NewUser(db *database.Db, name, password, email string) (*User, error) {
|
|||||||
Password: password,
|
Password: password,
|
||||||
Email: email,
|
Email: email,
|
||||||
LastUpdated: time.Now(),
|
LastUpdated: time.Now(),
|
||||||
|
Points: 0,
|
||||||
}
|
}
|
||||||
err := db.Users.Insert(newUser)
|
err := db.Users.Insert(newUser)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -49,6 +52,7 @@ func UserDbToUser(db *database.Db, u UserDb) *User {
|
|||||||
LastUpdated: u.LastUpdated,
|
LastUpdated: u.LastUpdated,
|
||||||
db: db,
|
db: db,
|
||||||
Planets: u.Planets,
|
Planets: u.Planets,
|
||||||
|
Points: u.Points,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,3 +83,17 @@ func (u *User) GetPlanets() ([]Planet, error) {
|
|||||||
}
|
}
|
||||||
return planets, nil
|
return planets, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddPoints(db *database.Db, userId bson.ObjectId, points int64) error {
|
||||||
|
var userDb UserDb
|
||||||
|
err := db.Users.Find(bson.M{"_id": userId}).One(&userDb)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
newPoints := userDb.Points + points
|
||||||
|
|
||||||
|
err = db.Users.Update(bson.M{"_id": userId}, bson.M{"$set": bson.M{
|
||||||
|
"points": newPoints,
|
||||||
|
}})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user