RiftMayhem/Assets/Scripts/Editor/ability-editor-creation.cs

134 lines
5.4 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.Linq;
using System;
public partial class AbilityEditorWindow
{
private void DrawAbilityCreation()
{
EditorGUILayout.BeginVertical("box");
EditorGUILayout.LabelField("Create New Ability", EditorStyles.boldLabel);
DrawAbilityTypeSelection();
if (selectedAbilityType != null)
{
DrawBasicFields();
DrawTypeSpecificFields();
EditorGUILayout.Space(10);
if (GUILayout.Button("Create Ability"))
{
CreateAbility();
}
}
EditorGUILayout.EndVertical();
}
private void DrawAbilityTypeSelection()
{
EditorGUILayout.Space(10);
EditorGUILayout.LabelField("Ability Type", EditorStyles.boldLabel);
string[] typeNames = abilityTypes.Keys.ToArray();
int currentIndex = Array.IndexOf(typeNames, selectedAbilityType?.Name ?? "");
int newIndex = EditorGUILayout.Popup("Select Type", currentIndex, typeNames);
if (newIndex != currentIndex && newIndex >= 0)
{
selectedAbilityType = abilityTypes[typeNames[newIndex]];
abilityData.typeSpecificData.Clear();
}
}
private void DrawBasicFields()
{
EditorGUILayout.Space(10);
EditorGUILayout.LabelField("Basic Settings", EditorStyles.boldLabel);
abilityData.name = EditorGUILayout.TextField("Name", abilityData.name);
abilityData.description = EditorGUILayout.TextArea(abilityData.description, GUILayout.Height(60));
abilityData.icon = (Sprite)EditorGUILayout.ObjectField("Icon", abilityData.icon, typeof(Sprite), false);
abilityData.animationType = (AbilityAnimationType)EditorGUILayout.EnumPopup("Animation Type", abilityData.animationType);
EditorGUILayout.Space(5);
EditorGUILayout.LabelField("Costs and Timing", EditorStyles.boldLabel);
abilityData.manaCost = EditorGUILayout.FloatField("Mana Cost", abilityData.manaCost);
abilityData.healthCost = EditorGUILayout.FloatField("Health Cost", abilityData.healthCost);
abilityData.cooldown = EditorGUILayout.FloatField("Cooldown", abilityData.cooldown);
abilityData.castTime = EditorGUILayout.FloatField("Cast Time", abilityData.castTime);
abilityData.castableWhileMoving = EditorGUILayout.Toggle("Castable While Moving", abilityData.castableWhileMoving);
}
private void DrawTypeSpecificFields()
{
if (selectedAbilityType == null) return;
EditorGUILayout.Space(10);
EditorGUILayout.LabelField("Type Specific Settings", EditorStyles.boldLabel);
if (selectedAbilityType == typeof(ProjectileAbility))
{
DrawProjectileFields();
}
else if (selectedAbilityType == typeof(AreaOfEffectAbility))
{
DrawAreaOfEffectFields();
}
else if (selectedAbilityType == typeof(ChanneledAbility))
{
DrawChanneledFields();
}
}
private void DrawProjectileFields()
{
float projectileSpeed = abilityData.GetOrCreateTypeSpecific<float>("projectileSpeed");
projectileSpeed = EditorGUILayout.FloatField("Projectile Speed", projectileSpeed);
abilityData.typeSpecificData["projectileSpeed"] = projectileSpeed;
float lifeSpan = abilityData.GetOrCreateTypeSpecific<float>("lifeSpan");
lifeSpan = EditorGUILayout.FloatField("Life Span", lifeSpan);
abilityData.typeSpecificData["lifeSpan"] = lifeSpan;
bool canPierce = abilityData.GetOrCreateTypeSpecific<bool>("canPierce");
canPierce = EditorGUILayout.Toggle("Can Pierce", canPierce);
abilityData.typeSpecificData["canPierce"] = canPierce;
GameObject projectilePrefab = abilityData.GetOrCreateTypeSpecific<GameObject>("projectilePrefab");
projectilePrefab = (GameObject)EditorGUILayout.ObjectField("Projectile Prefab",
projectilePrefab, typeof(GameObject), false);
abilityData.typeSpecificData["projectilePrefab"] = projectilePrefab;
}
private void DrawAreaOfEffectFields()
{
float radius = abilityData.GetOrCreateTypeSpecific<float>("radius");
radius = EditorGUILayout.FloatField("Radius", radius);
abilityData.typeSpecificData["radius"] = radius;
float duration = abilityData.GetOrCreateTypeSpecific<float>("duration");
duration = EditorGUILayout.FloatField("Duration", duration);
abilityData.typeSpecificData["duration"] = duration;
GameObject aoePrefab = abilityData.GetOrCreateTypeSpecific<GameObject>("aoePrefab");
aoePrefab = (GameObject)EditorGUILayout.ObjectField("AoE Prefab",
aoePrefab, typeof(GameObject), false);
abilityData.typeSpecificData["aoePrefab"] = aoePrefab;
}
private void DrawChanneledFields()
{
float channelDuration = abilityData.GetOrCreateTypeSpecific<float>("channelDuration");
channelDuration = EditorGUILayout.FloatField("Channel Duration", channelDuration);
abilityData.typeSpecificData["channelDuration"] = channelDuration;
bool canMove = abilityData.GetOrCreateTypeSpecific<bool>("canMove");
canMove = EditorGUILayout.Toggle("Can Move While Channeling", canMove);
abilityData.typeSpecificData["canMove"] = canMove;
}
}