world

package
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 19, 2022 License: GPL-3.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	StructureToggleHelp = iota + 1
	StructureToggleTransparentStructures
	StructureBulldozer
	StructureRoad
	StructureResidentialZone
	StructureResidentialLow
	StructureResidentialMedium
	StructureResidentialHigh
	StructureCommercialZone
	StructureCommercialLow
	StructureCommercialMedium
	StructureCommercialHigh
	StructureIndustrialZone
	StructureIndustrialLow
	StructureIndustrialMedium
	StructureIndustrialHigh
	StructurePoliceStation
	StructurePowerPlantCoal
	StructurePowerPlantSolar
	StructurePowerPlantNuclear
)
View Source
const (
	MonthTicks = 144 * 5
	YearTicks  = MonthTicks * 12
)
View Source
const SidebarWidth = 199
View Source
const TileSize = 64

Variables

View Source
var (
	GrassTile = uint32(11*32 + (0))
	TreeTileA = uint32(5*32 + (24))
	TreeTileB = uint32(5*32 + (25))
)
View Source
var CameraMaxZoom = 1.0
View Source
var CameraMinZoom = 0.1
View Source
var DirtTile = uint32(9*32 + (0))
View Source
var ErrNothingToBulldoze = errors.New("nothing to bulldoze")
View Source
var HUDButtons []*HUDButton
View Source
var HelpText = []string{`
Welcome to City Limits!          (1/10)
As the new mayor, it's time to run
things YOUR way. For better or worse...
Will you lead the clean energy front,
or will you put profits before people?
`, `
Moving Via Mouse                 (2/10)
To move around, press and hold your
middle mouse button while moving your
mouse, or press right click to center
the camera on an area immediately.
`, `
Moving Via Keyboard              (3/10)
You can also use your keyboard to move
by pressing any of the arrow keys or
W/A/S/D. Try using your mouse and/or
keyboard to move the camera around now.
`, `
Zoning Areas                     (4/10)
Structures are built according to how
you zone areas of land. Demand for each
category (Residential, Commercial,
Industrial) is shown in the sidebar.
`, `
Did You Know?                    (5/10)
Powering an area requires more input
energy than the resulting electricity.
In fact, only a third of the energy is
transmitted as usable electricity. 
`, `
Building Blocks of a City        (6/10)
Structures require power, sewer and
transportation in order to function.
This is all facilitated via roads and
underground wiring and piping.
`, `
Did You Know?                    (7/10)
Meat-based diets require much more
energy, land and water resources than
vegetarian and especially vegan diets.
Animal farms are a source of pollution.
`, `
Power to the People              (8/10)
Build a power plant, then zone a few
areas for residential development.
Connect the power plant to the newly
zoned areas with a road.
`, `
Did You Know?                    (9/10)
It takes large amounts of water to
convert fossil fuels into electricity.
Converting solar and wind energy uses
negligible amounts of water.
`, `
Collecting Taxes                (10/10)
Each year, taxes are collected from the
residents of the city. The tax rate you
set determines how appealing your city
is, and whether or not it can survive.
`,
}

HelpText lines must be 39 characters or less.

View Source
var PowerPlantCapacities = map[int]int{
	StructurePowerPlantCoal:    60,
	StructurePowerPlantSolar:   40,
	StructurePowerPlantNuclear: 200,
}
View Source
var StructureCosts = map[int]int{
	StructureBulldozer:         5,
	StructureRoad:              25,
	StructurePoliceStation:     1000,
	StructurePowerPlantCoal:    4000,
	StructurePowerPlantSolar:   10000,
	StructurePowerPlantNuclear: 25000,
	StructureResidentialZone:   100,
	StructureCommercialZone:    200,
	StructureIndustrialZone:    100,
}
View Source
var StructureFilePaths = map[int]string{
	StructureBulldozer:         "map/bulldozer.tmx",
	StructureRoad:              "map/road.tmx",
	StructureResidentialZone:   "map/residential_zone.tmx",
	StructureResidentialLow:    "map/residential_low1.tmx",
	StructureResidentialMedium: "map/residential_med1.tmx",
	StructureResidentialHigh:   "map/residential_high1.tmx",
	StructureCommercialZone:    "map/commercial_zone.tmx",
	StructureCommercialLow:     "map/commercial_low1.tmx",
	StructureCommercialMedium:  "map/commercial_med1.tmx",
	StructureCommercialHigh:    "map/commercial_high1.tmx",
	StructureIndustrialZone:    "map/industrial_zone.tmx",
	StructureIndustrialLow:     "map/industrial_low1.tmx",
	StructureIndustrialMedium:  "map/industrial_med1.tmx",
	StructureIndustrialHigh:    "map/industrial_high1.tmx",
	StructurePoliceStation:     "map/policestation.tmx",
	StructurePowerPlantCoal:    "map/power_coal.tmx",
	StructurePowerPlantSolar:   "map/power_solar.tmx",
	StructurePowerPlantNuclear: "map/power_nuclear.tmx",
}
View Source
var StructureTooltips = map[int]string{
	StructureToggleHelp:                  "Help",
	StructureToggleTransparentStructures: "Transparent buildings",
	StructureBulldozer:                   "Bulldozer",
	StructureRoad:                        "Road",
	StructurePoliceStation:               "Police station",
	StructurePowerPlantCoal:              "Coal power plant",
	StructurePowerPlantSolar:             "Solar power plant",
	StructurePowerPlantNuclear:           "Nuclear plant",
	StructureResidentialZone:             "Residential zone",
	StructureCommercialZone:              "Commercial zone",
	StructureIndustrialZone:              "Industrial zone",
}
View Source
var World = &GameWorld{
	CamScale:       startingZoom,
	CamScaleTarget: startingZoom,
	CamMoving:      true,

	PlayerWidth:  8,
	PlayerHeight: 32,

	TileImages: make(map[uint32]*ebiten.Image),
	ResetGame:  true,
	Level:      NewLevel(256),

	Power:     newPowerMap(),
	PowerOuts: newPowerOuts(),

	TaxR: startingTax,
	TaxC: startingTax,
	TaxI: startingTax,

	BuildDragX: -1,
	BuildDragY: -1,
	LastBuildX: -1,
	LastBuildY: -1,

	Printer: message.NewPrinter(language.English),
}
View Source
var ZonePowerRequirement = map[int]int{
	StructureResidentialZone: 1,
	StructureCommercialZone:  1,
	StructureIndustrialZone:  1,
}

Functions

func AltButtonAt

func AltButtonAt(x, y int) int

func CartesianToIso

func CartesianToIso(x, y float64) (float64, float64)

CartesianToIso transforms cartesian coordinates into isometric coordinates.

func Date

func Date() (month string, year string)

func Demand

func Demand() (r, c, i float64)

func DrawMap

func DrawMap(structureType int) *ebiten.Image

func HandleRCIWindow added in v1.1.0

func HandleRCIWindow(x, y int) bool

func HelpButtonAt

func HelpButtonAt(x, y int) int

func IsPowerPlant

func IsPowerPlant(structureType int) bool

func IsZone

func IsZone(structureType int) bool

func IsoToCartesian

func IsoToCartesian(x, y float64) (float64, float64)

CartesianToIso transforms cartesian coordinates into isometric coordinates.

func IsoToScreen

func IsoToScreen(x, y float64) (float64, float64)

func LevelCoordinatesToScreen

func LevelCoordinatesToScreen(x, y float64) (float64, float64)

func LoadMap

func LoadMap(structureType int) (*tiled.Map, error)

func LoadTileset

func LoadTileset() error

func ObjectToRect

func ObjectToRect(o *tiled.Object) image.Rectangle

func PlayNextSong added in v1.1.0

func PlayNextSong()

func Population

func Population() (r, c, i int)

func Reset

func Reset()

func ResetPowerOuts

func ResetPowerOuts()

func ResumeSong added in v1.1.0

func ResumeSong()

func Satisfaction

func Satisfaction() (r, c, i float64)

func ScreenToCartesian

func ScreenToCartesian(x, y int) (float64, float64)

func ScreenToIso

func ScreenToIso(x, y int) (float64, float64)

func SetHelpPage

func SetHelpPage(page int)

func SetHoverStructure

func SetHoverStructure(structureType int)

func ShowBuildCost

func ShowBuildCost(structureType int, cost int)

func ShowMessage

func ShowMessage(message string, duration int)

func StartGame

func StartGame()

func TargetPopulation

func TargetPopulation() (r, c, i int)

func TickMessages

func TickMessages()

func Tooltip

func Tooltip() string

func ValidXY

func ValidXY(x, y int) bool

Types

type GameLevel

type GameLevel struct {
	Tiles [][][]*Tile
	// contains filtered or unexported fields
}

func NewLevel

func NewLevel(size int) *GameLevel

func (*GameLevel) AddLayer

func (l *GameLevel) AddLayer()

func (*GameLevel) ClearHoverSprites

func (l *GameLevel) ClearHoverSprites()

type GameWorld

type GameWorld struct {
	Level *GameLevel

	Player gohan.Entity

	ScreenW, ScreenH int

	DisableEsc bool

	Debug  int
	NoClip bool

	GameStarted      bool
	GameStartedTicks int
	GameOver         bool

	PlayerX, PlayerY float64

	CamX, CamY     float64
	CamScale       float64
	CamScaleTarget float64
	CamMoving      bool

	PlayerWidth  float64
	PlayerHeight float64

	HoverStructure         int
	HoverX, HoverY         int
	HoverLastX, HoverLastY int
	HoverValid             bool

	Map             *tiled.Map
	ObjectGroups    []*tiled.ObjectGroup
	HazardRects     []image.Rectangle
	CreepRects      []image.Rectangle
	CreepEntities   []gohan.Entity
	TriggerEntities []gohan.Entity
	TriggerRects    []image.Rectangle
	TriggerNames    []string

	NativeResolution bool

	BrokenPieceA, BrokenPieceB gohan.Entity

	TileImages         map[uint32]*ebiten.Image
	TileImagesFirstGID uint32

	ResetGame bool

	MuteMusic        bool
	MuteSoundEffects bool // TODO

	GotCursorPosition bool

	EnvironmentSprites int

	SelectedStructure *Structure

	HUDUpdated     bool
	HUDButtonRects []image.Rectangle

	RCIButtonRect image.Rectangle
	RCIWindowRect image.Rectangle
	ShowRCIWindow bool

	HelpUpdated     bool
	HelpPage        int
	HelpButtonRects []image.Rectangle

	PowerPlants []*PowerPlant
	Zones       []*Zone

	HavePowerOut bool
	PowerOuts    [][]bool

	Ticks int

	Paused bool

	Funds int

	Printer *message.Printer

	TransparentStructures bool

	Messages      []string
	MessagesTicks []int

	Power          PowerMap
	PowerUpdated   bool
	PowerAvailable int
	PowerNeeded    int

	BuildDragX int
	BuildDragY int

	LastBuildX int
	LastBuildY int

	TaxR float64
	TaxC float64
	TaxI float64
	// contains filtered or unexported fields
}

func (*GameWorld) SetGameOver

func (w *GameWorld) SetGameOver(vx, vy float64)

type HUDButton

type HUDButton struct {
	Sprite                       *ebiten.Image
	SpriteOffsetX, SpriteOffsetY float64
	Label                        string
	StructureType                int
}

func HUDButtonAt

func HUDButtonAt(x, y int) *HUDButton

type PowerMap

type PowerMap [][]*PowerMapTile

func (PowerMap) GetTile

func (m PowerMap) GetTile(x, y int) *PowerMapTile

func (PowerMap) SetTile

func (m PowerMap) SetTile(x, y int, carriesPower bool)

type PowerMapTile

type PowerMapTile struct {
	X            int
	Y            int
	CarriesPower bool // Set to true for roads and all building tiles (even power plants)
}

func (*PowerMapTile) Down

func (t *PowerMapTile) Down() *PowerMapTile

func (*PowerMapTile) Left

func (t *PowerMapTile) Left() *PowerMapTile

func (*PowerMapTile) PathEstimatedCost

func (t *PowerMapTile) PathEstimatedCost(to astar.Pather) float64

func (*PowerMapTile) PathNeighborCost

func (t *PowerMapTile) PathNeighborCost(to astar.Pather) float64

func (*PowerMapTile) PathNeighbors

func (t *PowerMapTile) PathNeighbors() []astar.Pather

func (*PowerMapTile) Right

func (t *PowerMapTile) Right() *PowerMapTile

func (*PowerMapTile) Up

func (t *PowerMapTile) Up() *PowerMapTile

type PowerPlant

type PowerPlant struct {
	Type int
	X, Y int
}

type Structure

type Structure struct {
	Type int
	X, Y int

	Entity   gohan.Entity
	Children []gohan.Entity
}

func BuildStructure

func BuildStructure(structureType int, hover bool, placeX int, placeY int, internal bool) (*Structure, error)

type Tile

type Tile struct {
	Sprite            *ebiten.Image
	EnvironmentSprite *ebiten.Image
	HoverSprite       *ebiten.Image
}

type Zone

type Zone struct {
	Type       int // StructureResidentialZone, StructureCommercialZone or StructureIndustrialZone
	X, Y       int
	Population int
	Powered    bool
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL