using UnityEngine;
///
/// Setup script to easily add the Travel Event System to your existing travel setup
/// This component should be added to the same GameObject as TeamTravelSystem
///
public class TravelEventSystemSetup : MonoBehaviour
{
[Header("Event System Setup")]
[Tooltip("Automatically create and configure the travel event system")]
public bool autoSetupEventSystem = true;
[Header("Event Configuration")]
[Range(0f, 1f)]
[Tooltip("Base chance for events to occur (15% recommended)")]
public float eventChance = 0.15f;
[Range(1, 10)]
[Tooltip("Check for events every N tiles traveled")]
public int tilesPerCheck = 3;
[Tooltip("Enable debug logging for events")]
public bool enableDebugLogs = true;
[Header("Default Events")]
[Tooltip("Create default ScriptableObject events automatically")]
public bool createDefaultEvents = true;
void Start()
{
if (autoSetupEventSystem)
{
SetupEventSystem();
}
}
[ContextMenu("Setup Event System")]
public void SetupEventSystem()
{
// Check if TravelEventSystem already exists
TravelEventSystem existingSystem = GetComponent();
if (existingSystem != null)
{
Debug.Log("✅ TravelEventSystem already exists on this GameObject");
ConfigureExistingSystem(existingSystem);
return;
}
// Add TravelEventSystem component
TravelEventSystem eventSystem = gameObject.AddComponent();
// Configure the system
eventSystem.enableEvents = true;
eventSystem.baseEventChance = eventChance;
eventSystem.tilesPerEventCheck = tilesPerCheck;
eventSystem.showDebugLogs = enableDebugLogs;
Debug.Log("✅ TravelEventSystem added and configured");
// Create default events if requested
if (createDefaultEvents)
{
CreateDefaultEventAssets();
}
// Verify integration
VerifyIntegration();
}
private void ConfigureExistingSystem(TravelEventSystem eventSystem)
{
eventSystem.baseEventChance = eventChance;
eventSystem.tilesPerEventCheck = tilesPerCheck;
eventSystem.showDebugLogs = enableDebugLogs;
Debug.Log("🔧 Updated existing TravelEventSystem configuration");
}
[ContextMenu("Create Default Events")]
public void CreateDefaultEventAssets()
{
// This would create ScriptableObject assets in the Resources folder
// For now, we'll just log what would be created
string[] defaultEvents = {
"Forest Ambush Event",
"Mountain Ambush Event",
"Traveling Merchant Event",
"Road Patrol Event",
"Hidden Cache Event",
"Wild Animal Event",
"Rest Site Event",
"Weather Hazard Event"
};
Debug.Log("📦 Default events that should be created:");
foreach (string eventName in defaultEvents)
{
Debug.Log($" - {eventName}");
}
Debug.Log("💡 To create these events:");
Debug.Log(" 1. Right-click in Project window");
Debug.Log(" 2. Go to Create > RPG > Travel Events");
Debug.Log(" 3. Choose the event type you want");
Debug.Log(" 4. Configure the event settings");
Debug.Log(" 5. Add to the Available Events list in TravelEventSystem");
}
private void VerifyIntegration()
{
Debug.Log("🔍 Verifying Travel Event System Integration...");
// Check for required components
TeamTravelSystem travelSystem = GetComponent();
if (travelSystem == null)
{
Debug.LogError("❌ TeamTravelSystem not found! TravelEventSystem requires TeamTravelSystem on the same GameObject.");
return;
}
SimpleTeamPlacement teamPlacement = FindFirstObjectByType();
if (teamPlacement == null)
{
Debug.LogWarning("⚠️ SimpleTeamPlacement not found in scene. Events may not work properly.");
}
MapMaker2 mapMaker = FindFirstObjectByType();
if (mapMaker == null)
{
Debug.LogWarning("⚠️ MapMaker2 not found in scene. Events may not work properly.");
}
TravelEventSystem eventSystem = GetComponent();
if (eventSystem != null && eventSystem.availableEvents.Count == 0)
{
Debug.LogWarning("⚠️ No events assigned to TravelEventSystem. Create and assign travel events for the system to work.");
}
Debug.Log("✅ Integration verification complete");
}
[ContextMenu("Test Event System")]
public void TestEventSystem()
{
TravelEventSystem eventSystem = GetComponent();
if (eventSystem == null)
{
Debug.LogError("❌ No TravelEventSystem found. Run Setup Event System first.");
return;
}
Debug.Log("🎲 Testing travel event system...");
eventSystem.TriggerEventCheck();
}
void OnValidate()
{
// Clamp values
eventChance = Mathf.Clamp01(eventChance);
tilesPerCheck = Mathf.Clamp(tilesPerCheck, 1, 10);
}
}
///
/// Helper script to create example travel events for testing
/// Add this to any GameObject to quickly create test events
///
public class TravelEventExampleCreator : MonoBehaviour
{
[ContextMenu("Create Example Events")]
public void CreateExampleEvents()
{
Debug.Log("🎭 Creating example travel events...");
// This demonstrates how to create events at runtime for testing
CreateExampleAmbushEvent();
CreateExampleMerchantEvent();
CreateExampleDiscoveryEvent();
Debug.Log("✅ Example events created. Check the TravelEventSystem component.");
}
private void CreateExampleAmbushEvent()
{
var ambushEvent = ScriptableObject.CreateInstance();
ambushEvent.eventName = "Test Forest Ambush";
ambushEvent.eventDescription = "A test ambush event for debugging";
ambushEvent.eventType = EventType.Combat;
ambushEvent.rarity = EventRarity.Common;
// Set terrain preferences
ambushEvent.forestChance = 0.9f;
ambushEvent.roadChance = 0.2f;
ambushEvent.townChance = 0.1f;
// Add to event system if available
TravelEventSystem eventSystem = FindFirstObjectByType();
if (eventSystem != null)
{
eventSystem.availableEvents.Add(ambushEvent);
Debug.Log("➕ Added test ambush event");
}
}
private void CreateExampleMerchantEvent()
{
var merchantEvent = ScriptableObject.CreateInstance();
merchantEvent.eventName = "Test Traveling Merchant";
merchantEvent.eventDescription = "A test merchant event for debugging";
merchantEvent.eventType = EventType.Trading;
merchantEvent.rarity = EventRarity.Common;
// Set terrain preferences
merchantEvent.roadChance = 0.8f;
merchantEvent.townChance = 0.7f;
merchantEvent.forestChance = 0.3f;
// Add to event system if available
TravelEventSystem eventSystem = FindFirstObjectByType();
if (eventSystem != null)
{
eventSystem.availableEvents.Add(merchantEvent);
Debug.Log("➕ Added test merchant event");
}
}
private void CreateExampleDiscoveryEvent()
{
var discoveryEvent = ScriptableObject.CreateInstance();
discoveryEvent.eventName = "Test Hidden Treasure";
discoveryEvent.eventDescription = "A test discovery event for debugging";
discoveryEvent.eventType = EventType.Discovery;
discoveryEvent.rarity = EventRarity.Uncommon;
// Set terrain preferences
discoveryEvent.forestChance = 0.7f;
discoveryEvent.mountainChance = 0.8f;
discoveryEvent.roadChance = 0.2f;
// Add to event system if available
TravelEventSystem eventSystem = FindFirstObjectByType();
if (eventSystem != null)
{
eventSystem.availableEvents.Add(discoveryEvent);
Debug.Log("➕ Added test discovery event");
}
}
}