feat(city): add city landmarks, stores, luminous signs, and ATC echo guard
Add university and fire station civic buildings plus 7 new store types, each with facade and luminous blade signs. Extend landmark material colors and sign accents. Fix ATC dispatch to reject prompt-echoing AI responses via heuristic guard. Add CityPlacesTest for collision and roadway avoidance, and extend AirportTest and SignLabelsTest.
This commit is contained in:
@@ -119,7 +119,7 @@ class CityContentSeeder extends Seeder
|
||||
'description' => 'Material de construção e ferramentas.',
|
||||
'type' => 'hardware',
|
||||
'owner_id' => $shopkeeper?->id,
|
||||
'pos_x' => 8, 'pos_y' => 0, 'pos_z' => 6,
|
||||
'pos_x' => 11, 'pos_y' => 0, 'pos_z' => 10,
|
||||
'width' => 10, 'height' => 7, 'depth' => 10,
|
||||
'is_open' => true,
|
||||
],
|
||||
|
||||
@@ -136,6 +136,65 @@ class CityWorldSeeder extends Seeder
|
||||
],
|
||||
);
|
||||
|
||||
// More civic landmarks (rendered with luminous letreiros).
|
||||
Building::updateOrCreate(
|
||||
['city_id' => $city->id, 'type' => 'university'],
|
||||
[
|
||||
'owner_character_id' => null,
|
||||
'name' => 'Universidade City10',
|
||||
'pos_x' => 100,
|
||||
'pos_z' => 140,
|
||||
'width' => 26,
|
||||
'depth' => 18,
|
||||
'height' => 12,
|
||||
'is_complete' => true,
|
||||
'build_progress' => 100,
|
||||
],
|
||||
);
|
||||
Building::updateOrCreate(
|
||||
['city_id' => $city->id, 'type' => 'fire_station'],
|
||||
[
|
||||
'owner_character_id' => null,
|
||||
'name' => 'Corpo de Bombeiros',
|
||||
'pos_x' => -100,
|
||||
'pos_z' => -20,
|
||||
'width' => 20,
|
||||
'depth' => 14,
|
||||
'height' => 9,
|
||||
'is_complete' => true,
|
||||
'build_progress' => 100,
|
||||
],
|
||||
);
|
||||
|
||||
// ---- City places (all get facade + front board + blade letreiro)
|
||||
// Each sits on its own free block zone (not on a plaza row), so
|
||||
// the plaza pattern and the AABB audit both stay clean.
|
||||
$places = [
|
||||
['Supermercado Bom Preço', 'supermarket', 100, -20, 22, 9, 16, 'Grande sortimento, hortifrúti e padaria interna.'],
|
||||
['Drogaria Saúde Total', 'pharmacy', 60, 20, 14, 7, 12, 'Remédios, cosméticos e atendimento 24 horas.'],
|
||||
['Restaurante Sabor da City', 'restaurant', 100, 100, 16, 8, 14, 'Comida caseira, churrasco e culinária regional.'],
|
||||
['Cabeleireiro Estilo', 'salon', -60, 20, 12, 6, 10, 'Cortes, colorações e escovas com hora marcada.'],
|
||||
['Banco Central City10', 'bank', 140, 20, 16, 10, 14, 'Conta corrente, crédito e cooperativa da cidade.'],
|
||||
['Hotel City10 Palace', 'hotel', 60, 100, 20, 14, 16, 'Suítes com vista para a praça e Wi-Fi gratuito.'],
|
||||
['Shopping City10', 'mall', -60, 100, 26, 16, 22, 'Lojas, praça de alimentação e cinema.'],
|
||||
];
|
||||
foreach ($places as [$name, $type, $px, $pz, $width, $height, $depth, $description]) {
|
||||
Store::updateOrCreate(
|
||||
['name' => $name],
|
||||
[
|
||||
'description' => $description,
|
||||
'type' => $type,
|
||||
'pos_x' => $px,
|
||||
'pos_y' => 0,
|
||||
'pos_z' => $pz,
|
||||
'width' => $width,
|
||||
'height' => $height,
|
||||
'depth' => $depth,
|
||||
'is_open' => true,
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Mission::updateOrCreate(
|
||||
['code' => 'exercise-5'],
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user