public EnemySingleDistanceAttack(EnemyActionSetting settings, HealthState healthState, Transform target) { this.target = target; this.healthState = healthState; projectilePrefab = settings.projectilePrefab; muzzlePosition = settings.muzzlePosition; projectileSpeed = settings.projectileSpeed; attackDamage = settings.damage; switch (settings.attackCalculationType) { case AttackCalculationType.PREDICTED: distanceAttackBehaviour = new PredictedAttack(); break; case AttackCalculationType.RAY: distanceAttackBehaviour = new RayAttack(); break; case AttackCalculationType.NONE: break; default: throw new ArgumentOutOfRangeException(); } }
public override void OnInspectorGUI() { // base.OnInspectorGUI(); _actionSetting = (EnemyActionSetting)target; EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("General settings:", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Action type:"); EnemyActionType newType = (EnemyActionType)_enemyActionType.enumValueIndex; newType = (EnemyActionType)EditorGUILayout.EnumPopup(newType); _enemyActionType.enumValueIndex = (int)newType; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); _damage.intValue = Mathf.Max(EditorGUILayout.IntField(new GUIContent("Damage:"), _damage.intValue), 5); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); _rate.floatValue = Mathf.Max(EditorGUILayout.FloatField(new GUIContent("Attack rate:"), _rate.floatValue), 3); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Max attack angle:"); _maxAngle.intValue = EditorGUILayout.IntSlider(_maxAngle.intValue, 0, 40); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Max distance for attack:"); _maxDistance.intValue = EditorGUILayout.IntSlider(_maxDistance.intValue, 0, 30); EditorGUILayout.EndHorizontal(); if (_actionSetting.actionType == EnemyActionType.DISTANCE) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Distance attack settings:", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Distance attack type:"); DistanceAttackType distance = (DistanceAttackType)_distanceAttackType.enumValueIndex; distance = (DistanceAttackType)EditorGUILayout.EnumPopup(distance); _distanceAttackType.enumValueIndex = (int)distance; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Attack calculation type:"); AttackCalculationType calculationType = (AttackCalculationType)_attackCalculationType.enumValueIndex; calculationType = (AttackCalculationType)EditorGUILayout.EnumPopup(calculationType); _attackCalculationType.enumValueIndex = (int)calculationType; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(_projectilePrefab, new GUIContent("Projectile prefab:")); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.Slider(_projectileSpeed, 0, 50, new GUIContent("Projectile speed: ")); EditorGUILayout.EndHorizontal(); if (_actionSetting.distanceAttackType == DistanceAttackType.TRIPLE) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Triple attack settings:", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.Slider(_angleTriple, 0, 30, new GUIContent("Projectile triple angle: ")); EditorGUILayout.EndHorizontal(); } else if (_actionSetting.distanceAttackType == DistanceAttackType.MACHINE_GUN) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Machine gun attack settings:", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Max offset for attack:"); _offset.floatValue = EditorGUILayout.FloatField(_offset.floatValue); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Rate in milliseconds:"); _machineGunRate.intValue = EditorGUILayout.IntField(_machineGunRate.intValue); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Magazine amount:"); _magazineAmount.intValue = EditorGUILayout.IntField(_magazineAmount.intValue); EditorGUILayout.EndHorizontal(); } } else { EditorGUILayout.Space(); EditorGUILayout.LabelField("Melee attack settings:", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Melee type:"); MeleeAttackType melee = (MeleeAttackType)_meleeAttackType.enumValueIndex; melee = (MeleeAttackType)EditorGUILayout.EnumPopup(melee); _meleeAttackType.enumValueIndex = (int)melee; EditorGUILayout.EndHorizontal(); if (_actionSetting.meleeAttackType == MeleeAttackType.EXPLOSION) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Time to explosion:"); _timeToExplode.intValue = EditorGUILayout.IntSlider(_timeToExplode.intValue, 0, 5); EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndVertical(); serializedObject.ApplyModifiedProperties(); }