mirror of
https://github.com/arnaucube/gogame.git
synced 2026-02-07 03:26:39 +01:00
allow cors origin in config file, move resources from user to planet
This commit is contained in:
@@ -1,10 +1,7 @@
|
||||
package gamesrv
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/arnaucube/gogame/constants"
|
||||
"github.com/arnaucube/gogame/database"
|
||||
@@ -28,24 +25,7 @@ func (srv Service) CreatePlanet(userId bson.ObjectId) (*models.SolarSystem, *mod
|
||||
size := int64(250) // TODO get rand inside a range
|
||||
name := "planetname" // TODO get random name
|
||||
|
||||
newPlanet := models.Planet{
|
||||
Size: size,
|
||||
Name: name,
|
||||
OwnerId: userId,
|
||||
}
|
||||
// in case that wants to start with resources plants
|
||||
newPlanet.Buildings = make(map[string]int64)
|
||||
newPlanet.Buildings["metalmine"] = 1
|
||||
newPlanet.Buildings["crystalmine"] = 1
|
||||
newPlanet.Buildings["deuteriummine"] = 1
|
||||
newPlanet.Buildings["energymine"] = 1
|
||||
|
||||
err := srv.db.Planets.Insert(newPlanet)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
var planet *models.Planet
|
||||
err = srv.db.Planets.Find(bson.M{"ownerid": newPlanet.OwnerId}).One(&planet)
|
||||
planet, err := models.NewPlanet(srv.db, size, name, userId)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@@ -95,77 +75,27 @@ func (srv Service) PutPlanetInSolarSystem(position int64, planet *models.Planet)
|
||||
return &solarSystem, err
|
||||
}
|
||||
|
||||
// CheckCurrentBuild checks if the planet has a ongoing building in process, and if has finished
|
||||
// in case that has finished, updates it in db
|
||||
func (srv Service) CheckCurrentBuild(planet *models.Planet) (bool, error) {
|
||||
if planet.CurrentBuild.Title != "" {
|
||||
// the planet is building something, check if has ended
|
||||
if planet.CurrentBuild.Ends.Unix() < time.Now().Unix() {
|
||||
// upgrade level of building in planet
|
||||
planet.Buildings[planet.CurrentBuild.Building] += 1
|
||||
|
||||
// build end
|
||||
planet.CurrentBuild.Title = ""
|
||||
planet.CurrentBuild.Building = ""
|
||||
|
||||
// store in db
|
||||
err := srv.db.Planets.Update(bson.M{"_id": planet.Id}, planet)
|
||||
if err != nil {
|
||||
return true, err
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
|
||||
}
|
||||
|
||||
func (srv Service) GetBuildings(user *models.User, planetid bson.ObjectId) (*models.Planet, error) {
|
||||
func (srv Service) GetPlanet(user *models.User, planetid bson.ObjectId) (*models.Planet, error) {
|
||||
var planet models.Planet
|
||||
err := srv.db.Planets.Find(bson.M{"_id": planetid, "ownerid": user.Id}).One(&planet)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, err = srv.CheckCurrentBuild(&planet)
|
||||
planet.Db = srv.db
|
||||
_, err = planet.CheckCurrentBuild()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, err = planet.GetResources()
|
||||
return &planet, err
|
||||
}
|
||||
|
||||
func (srv Service) UpgradeBuilding(user *models.User, planetid bson.ObjectId, building string) (*models.Planet, error) {
|
||||
// get planet
|
||||
var planet models.Planet
|
||||
err := srv.db.Planets.Find(bson.M{"_id": planetid}).One(&planet)
|
||||
planet, err := srv.GetPlanet(user, planetid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
busy, err := srv.CheckCurrentBuild(&planet)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if busy {
|
||||
return nil, errors.New("busy")
|
||||
}
|
||||
|
||||
// get current building level, and get the needed resources for next level
|
||||
resourcesNeeded, err := user.GetBuildingCost(planet, building)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// get time cost of the build
|
||||
timei64 := models.ConstructionTime(resourcesNeeded, planet.Buildings[building]+1)
|
||||
endsTime := time.Now().Add(time.Second * time.Duration(timei64))
|
||||
|
||||
// if user have enough resources to upgrade the building, upgrade the building
|
||||
err = user.SpendResources(resourcesNeeded)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// add current task to planet
|
||||
planet.CurrentBuild.Building = building
|
||||
planet.CurrentBuild.Title = building + " - Level " + strconv.Itoa(int(planet.Buildings[building]))
|
||||
planet.CurrentBuild.Ends = endsTime
|
||||
|
||||
// store planet in db
|
||||
err = srv.db.Planets.Update(bson.M{"_id": planet.Id}, planet)
|
||||
return &planet, nil
|
||||
err = planet.UpgradeBuilding(building)
|
||||
return planet, err
|
||||
}
|
||||
|
||||
@@ -50,6 +50,9 @@ func (srv Service) Register(name, password, email string) (*models.User, error)
|
||||
}
|
||||
|
||||
_, planet, err := srv.gamesrv.CreatePlanet(user.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
user.Planets = append(user.Planets, planet.Id)
|
||||
user.StoreInDb()
|
||||
@@ -92,8 +95,7 @@ func (srv Service) GetUserById(userid bson.ObjectId) (*models.User, error) {
|
||||
return nil, err
|
||||
}
|
||||
user := models.UserDbToUser(srv.db, userDb)
|
||||
_, err = user.GetResources()
|
||||
return user, err
|
||||
return user, nil
|
||||
}
|
||||
|
||||
func (srv Service) GetUserPlanetsById(userid bson.ObjectId) ([]*models.Planet, error) {
|
||||
|
||||
Reference in New Issue
Block a user