// --- Cleaning System --- float dirt_resistance = 0.0 to 1.0 (0 = clean, 1 = muddy) float heat_effectiveness = 0.5 // Hotter water cleans grease faster
function UpdateTemperature(delta_time, cleaning_power): // Heat generation: more power = more heat float heat_generated = cleaning_power * 0.05 * delta_time // Passive cooling float cooling = 15.0 * delta_time // 15°C per second idle
// Overheat logic if current_temp >= 100.0: is_overheated = true ForceStopSpray() PlaySound("overheat_alarm") ShowMessage("Machine Overheated! Wait to cool down.")
float temp_mod = 1.0 if current_temp > 60.0: // Hot water bonus temp_mod = 1.0 + (current_temp - 60.0) / 100.0 Script do Simulador de Lavagem de Pressao
// 2. Calculate cleaning power float cleaning_power = CalculateCleaningPower()
class CleanableSurface: float dirt_map[1024][1024] // Virtual texture for dirt (0=clean, 1=mud) float base_resistance // 0.2 (dust) to 0.9 (caked mud) float stain_type // Enum: MUD, OIL, RUST, MOSS function Clean(power, hit_point, angle): // Convert world hit to UV coordinate Vector2 uv = WorldToUV(hit_point) float radius = CalculateSplashRadius(angle) // Inches float total_cleaned = 0.0 for x in -radius to +radius: for y in -radius to +radius: float current_dirt = dirt_map[uv.x + x][uv.y + y] if current_dirt > 0: // Effective cleaning per tick float cleaning_rate = power * delta_time * 0.01 if stain_type == OIL and current_temp > 70: cleaning_rate *= 2.0 // Hot water melts oil float removed = Min(current_dirt, cleaning_rate) dirt_map[uv.x + x][uv.y + y] -= removed total_cleaned += removed // Update visual mesh/material UpdateDecalTexture(dirt_map) return total_cleaned
if is_overheated and current_temp <= 70.0: is_overheated = false ShowMessage("Machine cooled. Ready to spray.") function RefillResources(): // Called at refill stations fuel_level = 100.0 soap_level = 100.0 current_temp = 40.0 // Reset to warm but not hot PlaySound("refill_click") Each cleanable object (wall, floor, vehicle) follows this interface. // --- Cleaning System --- float dirt_resistance = 0
float final_power = base * nozzle_mod * temp_mod
// Soap effect: reduces dirt resistance for a few seconds if active_nozzle == NozzleType.SOAP: hit_surface.temp_dirt_resistance *= 0.7
// Clamp limits current_temp = Clamp(current_temp, 20.0, 100.0) Ready to spray
function PurchaseUpgrade(upgrade_id): int cost = GetUpgradeCost(upgrade_id) if coins >= cost: coins -= cost switch upgrade_id: case "Pressure+": pressure_upgrade += 0.2 current_psi = 1200 * pressure_upgrade case "Heater+": heat_upgrade += 0.25 max_temp = 100 * heat_upgrade case "Fuel Tank": fuel_capacity += 0.3 max_fuel = 100 * fuel_capacity SaveProgress() return true else: PlaySound("error_deny") return false // Called when a surface reaches 100% clean function OnSurfaceCleaned(surface): PlaySound("achievement_ding") SpawnParticles("sparkle", surface.center) player_score += 500 // Completion bonus CheckAllSurfaces() // See if level is done // Debug console commands function DebugCommand(command): if command == "refill": RefillResources() if command == "max_power": current_psi = 5000 if command == "complete_level": for each surface in scene_surfaces: surface.dirt_amount = 0.0 10. Conclusion This script provides a robust foundation for a Pressure Washer Simulator. It balances arcade feedback (combo system, score) with mechanical simulation (overheating, fuel, nozzle selection). The modular design allows easy expansion for new dirt types (chewing gum, graffiti) or power-ups (turbo boost, foam cannon).
if combo_counter >= 10: combo_multiplier = 1.5 if combo_counter >= 25: combo_multiplier = 2.0 if combo_counter >= 50: combo_multiplier = 3.0 else: // Called every frame: decrement timer combo_timer -= delta_time if combo_timer <= 0.0: combo_counter = 0 combo_multiplier = 1.0 function OnLevelComplete(): int bonus = player_score * (fuel_level / 100) // Fuel efficiency bonus int total = player_score + bonus UnlockNextLevel() ShowScoreScreen(total) class UpgradeManager: int coins = 0 // Upgrade paths float pressure_upgrade = 1.0 // Multiplier: 1.0, 1.2, 1.5, 2.0 float heat_upgrade = 1.0 // Max temp: 100, 120, 150°C float fuel_capacity = 1.0 // Multiplier
return final_power Prevents infinite spraying and simulates engine wear.
float nozzle_mod = 1.0 switch active_nozzle: case RED: nozzle_mod = 2.5 // Very high impact, narrow angle case YELLOW: nozzle_mod = 1.8 case GREEN: nozzle_mod = 1.0 case WHITE: nozzle_mod = 0.6 case SOAP: nozzle_mod = 0.2 // Soap doesn't blast, it chemically loosens
UpdateUI() // Refresh HUD PlaySound("pump_idle_loop") This is the main loop triggered every frame while the player holds the trigger.