Art: Made all trees 40% smaller + apple tree simple 2D flat style
This commit is contained in:
@@ -82,6 +82,7 @@ class GameScene extends Phaser.Scene {
|
|||||||
|
|
||||||
console.log('💾 Initializing Chunk Manager...');
|
console.log('💾 Initializing Chunk Manager...');
|
||||||
this.chunkManager = new ChunkManager(this, 50); // 50x50 chunks
|
this.chunkManager = new ChunkManager(this, 50); // 50x50 chunks
|
||||||
|
this.chunkManager.biomeSystem = this.biomeSystem; // Connect biomeSystem!
|
||||||
console.log('✅ Chunk Manager ready!');
|
console.log('✅ Chunk Manager ready!');
|
||||||
|
|
||||||
// 🌈 PHASE 28: TRANSITION SYSTEM
|
// 🌈 PHASE 28: TRANSITION SYSTEM
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ class ChunkManager {
|
|||||||
constructor(scene, chunkSize = 50) {
|
constructor(scene, chunkSize = 50) {
|
||||||
this.scene = scene;
|
this.scene = scene;
|
||||||
this.chunkSize = chunkSize; // 50x50 tiles per chunk
|
this.chunkSize = chunkSize; // 50x50 tiles per chunk
|
||||||
|
this.biomeSystem = null; // Will be set by GameScene
|
||||||
|
|
||||||
// Active chunks (currently loaded)
|
// Active chunks (currently loaded)
|
||||||
this.activeChunks = new Map(); // Key: "chunkX,chunkY", Value: chunk data
|
this.activeChunks = new Map(); // Key: "chunkX,chunkY", Value: chunk data
|
||||||
@@ -67,8 +68,8 @@ class ChunkManager {
|
|||||||
|
|
||||||
// Get biome for this tile
|
// Get biome for this tile
|
||||||
let biomeId = 'grassland';
|
let biomeId = 'grassland';
|
||||||
if (this.scene.biomeSystem) {
|
if (this.biomeSystem) {
|
||||||
biomeId = this.scene.biomeSystem.getBiomeAt(worldX, worldY);
|
biomeId = this.biomeSystem.getBiomeAt(worldX, worldY);
|
||||||
}
|
}
|
||||||
|
|
||||||
chunk.tiles.push({
|
chunk.tiles.push({
|
||||||
|
|||||||
@@ -684,7 +684,7 @@ class Flat2DTerrainSystem {
|
|||||||
// 🌸 PNG SPRITE!
|
// 🌸 PNG SPRITE!
|
||||||
if (this.scene.textures.exists('tree_cherry')) {
|
if (this.scene.textures.exists('tree_cherry')) {
|
||||||
const tree = this.scene.add.image(x, y, 'tree_cherry');
|
const tree = this.scene.add.image(x, y, 'tree_cherry');
|
||||||
const scale = Phaser.Math.FloatBetween(0.4, 0.6); // SMALLER! (was 0.8-1.2)
|
const scale = Phaser.Math.FloatBetween(0.25, 0.4); // Even SMALLER! (was 0.8-1.2)
|
||||||
tree.setScale(scale);
|
tree.setScale(scale);
|
||||||
tree.setOrigin(0.5, 0.85);
|
tree.setOrigin(0.5, 0.85);
|
||||||
|
|
||||||
@@ -749,7 +749,7 @@ class Flat2DTerrainSystem {
|
|||||||
// 🌲 PNG SPRITE!
|
// 🌲 PNG SPRITE!
|
||||||
if (this.scene.textures.exists('tree_oak')) {
|
if (this.scene.textures.exists('tree_oak')) {
|
||||||
const tree = this.scene.add.image(x, y, 'tree_oak');
|
const tree = this.scene.add.image(x, y, 'tree_oak');
|
||||||
const scale = Phaser.Math.FloatBetween(0.45, 0.65); // SMALLER!
|
const scale = Phaser.Math.FloatBetween(0.28, 0.42); // Even SMALLER!
|
||||||
tree.setScale(scale);
|
tree.setScale(scale);
|
||||||
tree.setOrigin(0.5, 0.85);
|
tree.setOrigin(0.5, 0.85);
|
||||||
const shadow = this.scene.add.ellipse(x, y + 15, 35 * scale, 12, 0x000000, 0.2);
|
const shadow = this.scene.add.ellipse(x, y + 15, 35 * scale, 12, 0x000000, 0.2);
|
||||||
@@ -788,7 +788,7 @@ class Flat2DTerrainSystem {
|
|||||||
// 🌲 PNG SPRITE!
|
// 🌲 PNG SPRITE!
|
||||||
if (this.scene.textures.exists('tree_pine')) {
|
if (this.scene.textures.exists('tree_pine')) {
|
||||||
const tree = this.scene.add.image(x, y, 'tree_pine');
|
const tree = this.scene.add.image(x, y, 'tree_pine');
|
||||||
const scale = Phaser.Math.FloatBetween(0.45, 0.7); // SMALLER!
|
const scale = Phaser.Math.FloatBetween(0.28, 0.45); // Even SMALLER!
|
||||||
tree.setScale(scale);
|
tree.setScale(scale);
|
||||||
tree.setOrigin(0.5, 0.9); // Taller
|
tree.setOrigin(0.5, 0.9); // Taller
|
||||||
const shadow = this.scene.add.ellipse(x, y + 20, 30 * scale, 10, 0x000000, 0.2);
|
const shadow = this.scene.add.ellipse(x, y + 20, 30 * scale, 10, 0x000000, 0.2);
|
||||||
@@ -872,44 +872,37 @@ class Flat2DTerrainSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createAppleTree(x, y) {
|
createAppleTree(x, y) {
|
||||||
// 🍎 PNG SPRITE!
|
// 🍎 2D FLAT STYLE - Smaller and simpler!
|
||||||
if (this.scene.textures.exists('tree_apple')) {
|
|
||||||
const tree = this.scene.add.image(x, y, 'tree_apple');
|
|
||||||
const scale = Phaser.Math.FloatBetween(0.4, 0.6); // SMALLER!
|
|
||||||
tree.setScale(scale);
|
|
||||||
tree.setOrigin(0.5, 0.85);
|
|
||||||
const shadow = this.scene.add.ellipse(x, y + 16, 32 * scale, 11, 0x000000, 0.2);
|
|
||||||
shadow.setDepth(tree.depth - 1);
|
|
||||||
return tree;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FALLBACK:
|
|
||||||
const graphics = this.scene.add.graphics();
|
const graphics = this.scene.add.graphics();
|
||||||
const growthScale = Phaser.Math.FloatBetween(0.8, 1.3); // BIGGER!
|
const scale = 0.6; // Much smaller!
|
||||||
|
|
||||||
// Shadow
|
// Shadow
|
||||||
graphics.fillStyle(0x000000, 0.15);
|
graphics.fillStyle(0x000000, 0.15);
|
||||||
graphics.fillEllipse(x, y + 22, 22 * growthScale, 7);
|
graphics.fillEllipse(x, y + 14, 18 * scale, 6);
|
||||||
|
|
||||||
// Trunk
|
// Trunk (simple rectangle)
|
||||||
graphics.fillStyle(0x8B4513);
|
graphics.fillStyle(0x6d4c41); // Brown
|
||||||
graphics.fillRect(x - 4 * growthScale, y + 2, 8 * growthScale, 20 * growthScale);
|
graphics.fillRect(x - 3 * scale, y - 2, 6 * scale, 16 * scale);
|
||||||
|
|
||||||
// Green crown
|
// Crown - simple rounded shape (2D style!)
|
||||||
graphics.fillStyle(0x3CB371); // Medium sea green
|
graphics.fillStyle(0x4a9d5f); // Green
|
||||||
graphics.fillCircle(x, y - 8 * growthScale, 16 * growthScale);
|
graphics.fillCircle(x, y - 10 * scale, 12 * scale);
|
||||||
|
|
||||||
// Apples (red circles)
|
// Secondary crown circles for volume (Stardew style)
|
||||||
graphics.fillStyle(0xFF0000);
|
graphics.fillCircle(x - 6 * scale, y - 8 * scale, 9 * scale);
|
||||||
const applePositions = [
|
graphics.fillCircle(x + 6 * scale, y - 8 * scale, 9 * scale);
|
||||||
{ x: -8, y: -12 }, { x: 5, y: -10 }, { x: -3, y: -5 },
|
|
||||||
{ x: 8, y: -8 }, { x: 0, y: -15 }
|
// Apples (simple red dots)
|
||||||
|
graphics.fillStyle(0xFF3333);
|
||||||
|
const apples = [
|
||||||
|
{ x: -5, y: -12 }, { x: 4, y: -10 },
|
||||||
|
{ x: 0, y: -8 }, { x: 6, y: -9 }
|
||||||
];
|
];
|
||||||
applePositions.forEach(pos => {
|
apples.forEach(pos => {
|
||||||
graphics.fillCircle(
|
graphics.fillCircle(
|
||||||
x + pos.x * growthScale,
|
x + pos.x * scale,
|
||||||
y + pos.y * growthScale,
|
y + pos.y * scale,
|
||||||
3 * growthScale
|
2.5 * scale
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
* - Connects to river system
|
* - Connects to river system
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default class LakeSystem {
|
class LakeSystem {
|
||||||
constructor(worldWidth, worldHeight, biomeSystem) {
|
constructor(worldWidth, worldHeight, biomeSystem) {
|
||||||
this.worldWidth = worldWidth;
|
this.worldWidth = worldWidth;
|
||||||
this.worldHeight = worldHeight;
|
this.worldHeight = worldHeight;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* - Biome-aware water coloring
|
* - Biome-aware water coloring
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default class RiverSystem {
|
class RiverSystem {
|
||||||
constructor(worldWidth, worldHeight, biomeSystem) {
|
constructor(worldWidth, worldHeight, biomeSystem) {
|
||||||
this.worldWidth = worldWidth;
|
this.worldWidth = worldWidth;
|
||||||
this.worldHeight = worldHeight;
|
this.worldHeight = worldHeight;
|
||||||
|
|||||||
@@ -174,26 +174,31 @@ class TransitionSystem {
|
|||||||
|
|
||||||
// Get features for a specific biome
|
// Get features for a specific biome
|
||||||
getBiomeFeatures(biomeId, x, y) {
|
getBiomeFeatures(biomeId, x, y) {
|
||||||
// Temporarily set biome to get its features
|
|
||||||
const originalBiome = this.biomeSystem.getBiomeAt(x, y);
|
|
||||||
|
|
||||||
// This is a bit hacky - we'd need to refactor BiomeSystem to support this better
|
|
||||||
// For now, just return features based on biome type
|
|
||||||
|
|
||||||
const features = [];
|
const features = [];
|
||||||
const biomeData = this.biomeSystem.biomes[biomeId];
|
const biomeData = this.biomeSystem.biomes[biomeId];
|
||||||
|
|
||||||
if (!biomeData) return features;
|
if (!biomeData || !biomeData.features) return features;
|
||||||
|
|
||||||
// Check spawn probability
|
// Check spawn probability for trees
|
||||||
if (Math.random() < biomeData.spawnProbability.trees) {
|
if (biomeData.features.trees && Math.random() < biomeData.features.trees) {
|
||||||
features.push({ type: 'tree', size: 'medium' });
|
features.push({ type: 'tree', size: 'medium' });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Math.random() < biomeData.spawnProbability.rocks) {
|
// Check spawn probability for rocks
|
||||||
|
if (biomeData.features.rocks && Math.random() < biomeData.features.rocks) {
|
||||||
features.push({ type: 'rock', size: 'small' });
|
features.push({ type: 'rock', size: 'small' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Desert-specific features
|
||||||
|
if (biomeData.features.cacti && Math.random() < biomeData.features.cacti) {
|
||||||
|
features.push({ type: 'cactus' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mountain-specific features
|
||||||
|
if (biomeData.features.largeRocks && Math.random() < biomeData.features.largeRocks) {
|
||||||
|
features.push({ type: 'boulder' });
|
||||||
|
}
|
||||||
|
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user