コード例 #1
0
        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();
            }
        }
コード例 #2
0
    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();
    }