/
676767ap
/
AstroCatGame
Обзор
Документация
Войти
/
676767ap
/
AstroCatGame
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
levels/spawn_items.go
74 строки
2 KB
Anton Polikapov
And ref goroutines again
08 апр 2024, 12:13
08 апр 2024, 12:13
1f93186
Код
Авторство
О чём код?
package levels import ( "astrogame/config" "astrogame/enemy" "astrogame/item" "astrogame/objects" "astrogame/resolution" "astrogame/templates" "math/rand" "time" ) func spawnItem() { if len(CurStage.Items) == 0 { return } var target config.Vector var startPos config.Vector itemParam := CurStage.Items[CurStage.CurItemId] itemNew := item.NewItem(target, startPos, itemParam) itemWidth := itemNew.ItemType.Sprite.Bounds().Dx() itemHight := itemNew.ItemType.Sprite.Bounds().Dy() r := rand.New(rand.NewSource(time.Now().UnixNano())) posX := r.Intn(int(resolution.CurScreenAndScale.ScreenWidth) - (itemWidth * 2)) startPos = config.Vector{ X: float64(posX + itemWidth), Y: -(float64(itemHight)), } target = config.Vector{ X: startPos.X, Y: resolution.CurScreenAndScale.ScreenHeight + float64(itemHight) + 100, } itemNew.SetDirection(target, startPos, itemParam) itemNew.Target = target item.ItmFactory.AddAsync(itemNew) delete(CurStage.Items, CurStage.CurItemId) if len(CurStage.Items) > 0 { CurStage.CurItemId++ ItemSpawnTimer.Restart(CurStage.Items[CurStage.CurItemId].ItemSpawnTime) } } func SpawnLootItem(e *enemy.Enemy, l int) { var spawnChance int if l < 4 { spawnChance = config.LootSpawnChanceLowLvl } else if l < 7 { spawnChance = config.LootSpawnChanceMidLvl } else if l < 10 { spawnChance = config.LootSpawnChanceHighLvl } chance := objects.RandInt(0, 1000) if chance < spawnChance { itemTpl := ChooseLoot(e) target := config.Vector{ X: e.Position.X, Y: resolution.CurScreenAndScale.ScreenHeight + float64(e.EnemyType.Sprite.Bounds().Dy()), } itemNew := item.NewItem(target, e.Position, itemTpl) itemNew.SetDirection(target, e.Position, itemTpl) item.ItmFactory.AddAsync(itemNew) } } func ChooseLoot(e *enemy.Enemy) *templates.Item { for { randItemN := objects.RandInt(0, len(CurLevel.Loot)-1) item := CurLevel.Loot[randItemN] if item.Cost <= e.EnemyType.Cost { return item } } }