Ejemplo n.º 1
0
        private float DrawAddAbility(float startX, float startY, Perk perk)
        {
            startY += 45;

            int abilityIdx = perk.newAbilityID >= 0 ? TDSEditor.GetAbilityIndex(perk.newAbilityID) : 0;

            TDSEditorUtility.DrawSprite(new Rect(startX + spaceX + width - 40, startY + spaceY - 45, 40, 40), abilityIdx > 0 ? abilityDB.abilityList[abilityIdx - 1].icon : null);
            if (GUI.Button(new Rect(startX + spaceX, startY - 2, 40, height - 2), "Edit "))
            {
                AbilityEditorWindow.Init();
            }

            cont = new GUIContent("New Ability:", "New ability to be made available to player");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY - 5, width, height), cont, headerStyle);

            abilityIdx = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, height), abilityIdx, abilityLabel);
            if (abilityIdx > 0)
            {
                perk.newAbilityID = abilityDB.abilityList[abilityIdx - 1].ID;
            }
            else
            {
                perk.newAbilityID = -1;
            }


            abilityIdx = perk.replaceAbilityID >= 0 ? TDSEditor.GetAbilityIndex(perk.replaceAbilityID) : 0;

            cont = new GUIContent("Replace Existing:", "If the new ability is to replace a existing player's ability\n\nIf no matching ability is found during runtime, the new ability will simply be added");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);

            abilityIdx = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, height), abilityIdx, abilityLabel);
            if (abilityIdx > 0)
            {
                perk.replaceAbilityID = abilityDB.abilityList[abilityIdx - 1].ID;
            }
            else
            {
                perk.replaceAbilityID = -1;
            }

            return(startY);
        }
Ejemplo n.º 2
0
        void DrawFullEditor()
        {
            serializedObject.Update();

            cont = new GUIContent("Name:", "The collectible name to be displayed in game");
            PropertyFieldL(serializedObject.FindProperty("collectibleName"), cont);

            cont = new GUIContent("Icon:", "The collectible icon to be displayed in game and editor, must be a sprite");
            PropertyFieldL(serializedObject.FindProperty("icon"), cont);


            EditorGUILayout.Space();


            srlPpt = serializedObject.FindProperty("type");

            EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
            EditorGUI.showMixedValue = srlPpt.hasMultipleDifferentValues;

            cont = new GUIContent("Collectible Type:", "What does the specific collectible do when it's triggered");
            EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));

            contL = new GUIContent[collectTypeLabel.Length];
            for (int i = 0; i < contL.Length; i++)
            {
                contL[i] = new GUIContent(collectTypeLabel[i], collectTypeTooltip[i]);
            }
            int type = EditorGUILayout.Popup(srlPpt.enumValueIndex, contL, GUILayout.MaxWidth(fieldWidthL));

            if (EditorGUI.EndChangeCheck())
            {
                srlPpt.enumValueIndex = type;
            }

            EditorGUI.showMixedValue = false; EditorGUILayout.EndHorizontal();


            EditorGUILayout.Space();

            if (instance.type == _CollectType.Ability)
            {
                EditorGUILayout.LabelField("Trigger Ability", headerStyle);

                srlPpt = serializedObject.FindProperty("abilityID");
                int abID = TDSEditor.GetAbilityIndex(srlPpt.intValue);

                EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
                EditorGUI.showMixedValue = srlPpt.hasMultipleDifferentValues;

                cont = new GUIContent(" - Trigger Ability:", "The ability to activate when triggered");
                EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));

                contL = new GUIContent[abilityLabel.Length];
                for (int i = 0; i < contL.Length; i++)
                {
                    contL[i] = new GUIContent(abilityLabel[i]);
                }
                abID = EditorGUILayout.Popup(abID, contL, GUILayout.MaxWidth(fieldWidthL));
                if (EditorGUI.EndChangeCheck())
                {
                    srlPpt.intValue = abID - 1;
                }

                EditorGUI.showMixedValue = false; EditorGUILayout.EndHorizontal();
            }
            else
            {
                EditorGUILayout.LabelField("Instant Gain", headerStyle);

                srlPpt = serializedObject.FindProperty("life");

                EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
                EditorGUI.showMixedValue = srlPpt.hasMultipleDifferentValues;
                cont = new GUIContent("Life:", "The amount of respawn gained by the player");
                EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));
                int life = EditorGUILayout.IntField(srlPpt.intValue, GUILayout.MaxWidth(fieldWidth));
                if (EditorGUI.EndChangeCheck())
                {
                    srlPpt.intValue = life;
                }
                EditorGUI.showMixedValue = false; EditorGUILayout.EndHorizontal();

                EditorGUILayout.Space();

                cont = new GUIContent("HitPoint:", "The amount of hit-point gained by the player");
                PropertyField(serializedObject.FindProperty("hitPoint"), cont);

                cont = new GUIContent("Energy:", "The amount of energy gained by the player");
                PropertyField(serializedObject.FindProperty("energy"), cont);

                EditorGUILayout.Space();

                cont = new GUIContent("Score:", "The amount of points gained by the player");
                PropertyField(serializedObject.FindProperty("score"), cont);

                EditorGUILayout.Space();

                cont = new GUIContent("Ammo:", "The amount of ammo gained by the player. If set as -1, the ammo count will be refilled to full");
                PropertyField(serializedObject.FindProperty("ammo"), cont);

                cont = new GUIContent("Weapon:", "The weapon in which the ammo gain of the collectible is intended for.");
                if (serializedObject.FindProperty("ammo").intValue != 0)
                {
                    weaponLabel[0] = "All Weapons";

                    srlPpt = serializedObject.FindProperty("ammoID");
                    int weaponIdx = TDSEditor.GetWeaponIndex(srlPpt.intValue);

                    //Weapon weapon=weaponIdx>0 ? weaponDB.weaponList[weaponIdx-1] : null ;
                    //if(weapon!=null)
                    //	TDSEditorUtility.DrawSprite(new Rect(startX+spaceX+width-40, startY+spaceY-45, 40, 40), weapon!=null ? weapon.icon : null);

                    EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
                    EditorGUI.showMixedValue = srlPpt.hasMultipleDifferentValues;
                    EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));
                    weaponIdx = EditorGUILayout.Popup(weaponIdx, weaponLabel, GUILayout.MaxWidth(fieldWidthL));
                    if (EditorGUI.EndChangeCheck())
                    {
                        if (weaponIdx > 0)
                        {
                            srlPpt.intValue = weaponDB.weaponList[weaponIdx - 1].ID;
                        }
                        else
                        {
                            srlPpt.intValue = -1;
                        }
                    }
                    EditorGUI.showMixedValue = false; EditorGUILayout.EndHorizontal();

                    weaponLabel[0] = "Unassigned";
                }
                else
                {
                    InvalidField(cont);
                }


                EditorGUILayout.Space();

                cont = new GUIContent("Experience:", "The amount of experience gained by the player");
                PropertyField(serializedObject.FindProperty("exp"), cont);

                cont = new GUIContent("Perk Currency:", "The amount of perk currency gained by the player");
                PropertyField(serializedObject.FindProperty("perkCurrency"), cont);


                EditorGUILayout.Space();


                srlPpt = serializedObject.FindProperty("effectID");
                int effectIdx = srlPpt.intValue >= 0 ? TDSEditor.GetEffectIndex(srlPpt.intValue) : 0;

                EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
                EditorGUI.showMixedValue = srlPpt.hasMultipleDifferentValues;

                cont = new GUIContent("Triggered Effect:", "Special effect that applies on target when triggered (optional)");
                EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));

                effectIdx = EditorGUILayout.Popup(effectIdx, effectLabel, GUILayout.MaxWidth(fieldWidthL));
                if (EditorGUI.EndChangeCheck())
                {
                    if (effectIdx > 0)
                    {
                        srlPpt.intValue = effectDB.effectList[effectIdx - 1].ID;
                    }
                    else
                    {
                        srlPpt.intValue = -1;
                    }
                }
                EditorGUI.showMixedValue = false; EditorGUILayout.EndHorizontal();


                EditorGUILayout.Space();


                srlPpt = serializedObject.FindProperty("gainWeapon");
                cont   = new GUIContent("Gain Weapon:", "Weapon gained by player upon triggered (optional)");
                PropertyField(srlPpt, cont);

                bool gainWeapon = srlPpt.boolValue;

                if (gainWeapon)
                {
                    srlPpt = serializedObject.FindProperty("weaponType");
                    int wType = TDSEditor.GetWeaponIndex(srlPpt.enumValueIndex);

                    EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
                    EditorGUI.showMixedValue = srlPpt.hasMultipleDifferentValues;

                    cont = new GUIContent(" - GainWeaponType:", "What the new weapon is for");
                    EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));

                    contL = new GUIContent[weaponTypeLabel.Length];
                    for (int i = 0; i < contL.Length; i++)
                    {
                        contL[i] = new GUIContent(weaponTypeLabel[i], weaponTypeTooltip[i]);
                    }
                    wType = EditorGUILayout.Popup(wType, contL, GUILayout.MaxWidth(fieldWidthL));
                    if (EditorGUI.EndChangeCheck())
                    {
                        srlPpt.enumValueIndex = wType;
                    }

                    EditorGUI.showMixedValue = false; EditorGUILayout.EndHorizontal();


                    cont = new GUIContent(" - Duration:", "The duration of the temporary weapon. Set to -1 for not time limit (limit by weapon ammo instead)");
                    if (srlPpt.enumValueIndex == (int)Collectible._WeaponType.Temporary)
                    {
                        PropertyField(serializedObject.FindProperty("tempWeapDuration"), cont);
                    }
                    else
                    {
                        InvalidField(cont);
                    }


                    cont = new GUIContent(" - Random Weapon:", "Check if player will get random weapon out of a few potential candidates");
                    PropertyField(serializedObject.FindProperty("randomWeapon"), cont);

                    bool randWeapon = serializedObject.FindProperty("randomWeapon").boolValue;
                    if (randWeapon)
                    {
                        SerializedProperty enableAllWP = serializedObject.FindProperty("enableAllWeapon");
                        EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
                        EditorGUI.showMixedValue = enableAllWP.hasMultipleDifferentValues;

                        cont = new GUIContent(" - EnableAllWeapon:", "Check if all weapon in the database are to be added to the random pool");
                        EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));

                        bool en = EditorGUILayout.Toggle(enableAllWP.boolValue, GUILayout.MaxWidth(fieldWidthS + 25));
                        if (EditorGUI.EndChangeCheck())
                        {
                            enableAllWP.boolValue = en;
                            if (en)
                            {
                                showWeaponList = true;
                            }
                        }
                        //~ PropertyField(serializedObject.FindProperty("enableAllWeapon"), cont);

                        GUIStyle notSelectedStyle = new GUIStyle("Label");
                        notSelectedStyle.normal.textColor = new Color(.2f, .2f, .2f, 1);

                        SpaceH(22);

                        bool enableAllWeapon = serializedObject.FindProperty("enableAllWeapon").boolValue;
                        if (enableAllWeapon)
                        {
                            showWeaponList = EditorGUILayout.Foldout(showWeaponList, "Show list");
                        }

                        EditorGUILayout.EndHorizontal();

                        if (enableAllWeapon && showWeaponList)
                        {
                            srlPpt = serializedObject.FindProperty("weaponList");

                            if (!serializedObject.isEditingMultipleObjects)
                            {
                                int enabledCount = 0;
                                for (int i = 0; i < weaponDB.weaponList.Count; i++)
                                {
                                    Weapon weapon  = weaponDB.weaponList[i];
                                    bool   enabled = false;
                                    for (int n = 0; n < srlPpt.arraySize; n++)
                                    {
                                        SerializedProperty elePpt = srlPpt.GetArrayElementAtIndex(n);
                                        if (elePpt.objectReferenceValue == (UnityEngine.Object)weapon)
                                        {
                                            enabled = true;
                                            break;
                                        }
                                    }

                                    bool enabledCached = enabled;

                                    EditorGUILayout.BeginHorizontal();
                                    cont = new GUIContent("    - " + weapon.weaponName, weapon.desp);
                                    if (enabled)
                                    {
                                        EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth + 50));
                                    }
                                    else
                                    {
                                        EditorGUILayout.LabelField(cont, notSelectedStyle, GUILayout.MaxWidth(labelWidth + 50));
                                    }

                                    enabled = EditorGUILayout.Toggle(enabled);
                                    EditorGUILayout.EndHorizontal();

                                    //TDSEditorUtility.DrawSprite(new Rect(startX+20, startY+=spaceY, 30, 30), weapon.icon, weapon.desp);
                                    //~ cont=new GUIContent(weapon.weaponName, weapon.desp);
                                    //~ EditorGUI.LabelField(new Rect(startX+65, startY+15, width, height), cont);
                                    //~ enabled=EditorGUI.Toggle(new Rect(startX+spaceX+width-15, startY+15, width, height), enabled);
                                    //~ startY+=14;

                                    if (enabled != enabledCached)
                                    {
                                        if (enabled)
                                        {
                                            srlPpt.InsertArrayElementAtIndex(enabledCount);
                                            SerializedProperty elePpt = srlPpt.GetArrayElementAtIndex(enabledCount);
                                            elePpt.objectReferenceValue = weapon;
                                        }
                                        else
                                        {
                                            srlPpt.DeleteArrayElementAtIndex(enabledCount);
                                        }
                                    }

                                    if (enabled)
                                    {
                                        enabledCount += 1;
                                    }
                                }
                            }
                            else
                            {
                                EditorGUILayout.LabelField("    - Cannot edit multiple instance");
                            }
                        }
                    }
                    else
                    {
                        srlPpt = serializedObject.FindProperty("weaponList");
                        while (srlPpt.arraySize > 1)
                        {
                            srlPpt.DeleteArrayElementAtIndex(srlPpt.arraySize - 1);
                        }
                        while (srlPpt.arraySize <= 0)
                        {
                            srlPpt.InsertArrayElementAtIndex(0);
                        }

                        SerializedProperty elePpt = srlPpt.GetArrayElementAtIndex(0);
                        int weapIdx = elePpt.objectReferenceValue != null?TDSEditor.GetWeaponIndex(((Weapon)elePpt.objectReferenceValue).ID) : 0;

                        EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
                        EditorGUI.showMixedValue = srlPpt.hasMultipleDifferentValues;

                        cont = new GUIContent(" - Gain Weapon:", "Weapon gained by player upon triggered (optional)");
                        EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));

                        weapIdx = EditorGUILayout.Popup(weapIdx, weaponLabel, GUILayout.MaxWidth(fieldWidthL));
                        if (EditorGUI.EndChangeCheck())
                        {
                            if (weapIdx > 0)
                            {
                                elePpt.objectReferenceValue = weaponDB.weaponList[weapIdx - 1];
                            }
                            else
                            {
                                elePpt.objectReferenceValue = null;
                            }
                        }

                        EditorGUI.showMixedValue = false; EditorGUILayout.EndHorizontal();

                        //~ if(cItem.weaponList.Count!=1) cItem.weaponList=new List<Weapon>{ null };

                        //~ int weaponIdx1=cItem.weaponList[0]!=null ? TDSEditor.GetWeaponIndex(cItem.weaponList[0].ID) : 0;

                        //~ //if(cItem.weaponList[0]!=null)
                        //~ //	TDSEditorUtility.DrawSprite(new Rect(startX+spaceX+width-40, startY+spaceY-41, 40, 40), cItem.weaponList[0].icon);

                        //~ cont=new GUIContent("Gain Weapon:", "Weapon gained by player upon triggered (optional)");
                        //~ EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont);

                        //~ weaponIdx1=EditorGUI.Popup(new Rect(startX+spaceX, startY, width, height), weaponIdx1, weaponLabel);
                        //~ if(weaponIdx1>0) cItem.weaponList[0]=weaponDB.weaponList[weaponIdx1-1];
                        //~ else cItem.weaponList[0]=null;
                    }
                }
            }


            EditorGUILayout.Space();


            EditorGUILayout.LabelField("Miscellaneous", headerStyle);


            srlPpt = serializedObject.FindProperty("triggerEffectObj");

            EditorGUILayout.BeginHorizontal();      EditorGUI.BeginChangeCheck();
            EditorGUI.showMixedValue = srlPpt.hasMultipleDifferentValues;
            cont = new GUIContent("Triggered Effect Obj:", "The object to be spawned when the collectible is triggered (optional)");
            EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));
            GameObject sObj = (GameObject)EditorGUILayout.ObjectField(srlPpt.objectReferenceValue, typeof(GameObject), false, GUILayout.MaxWidth(fieldWidthL));

            if (EditorGUI.EndChangeCheck())
            {
                srlPpt.objectReferenceValue = sObj;
            }
            EditorGUI.showMixedValue = false; EditorGUILayout.EndHorizontal();

            cont = new GUIContent("AutoDestroy Effect:", "Check if the effect object needs to be removed from the game");
            if (srlPpt.objectReferenceValue != null)
            {
                PropertyField(serializedObject.FindProperty("autoDestroyEffectObj"), cont);
            }
            else
            {
                InvalidField(cont);
            }

            cont = new GUIContent(" - Duration:", "The delay in seconds before the effect object is destroyed");
            if (srlPpt.objectReferenceValue != null && serializedObject.FindProperty("autoDestroyEffectObj").boolValue)
            {
                PropertyField(serializedObject.FindProperty("effectObjActiveDuration"), cont);
            }
            else
            {
                InvalidField(cont);
            }


            EditorGUILayout.Space();


            cont = new GUIContent("Triggered SFX:", "Audio clip to play when the collectible is triggered (optional)");
            PropertyFieldL(serializedObject.FindProperty("triggerSFX"), cont);


            EditorGUILayout.Space();


            cont   = new GUIContent("Self Destruct:", "Check if the item is to self-destruct if not collected in a set time frame");
            srlPpt = serializedObject.FindProperty("selfDestruct");
            PropertyField(srlPpt, cont);

            //~ EditorGUILayout.BeginHorizontal();	EditorGUI.BeginChangeCheck();
            //~ EditorGUI.showMixedValue=srlPpt.hasMultipleDifferentValues;

            //~ cont=new GUIContent("Self Destruct:", "Check if the item is to self-destruct if not collected in a set time frame");
            //~ EditorGUILayout.LabelField(cont);
            //~ bool flag=EditorGUILayout.Toggle(srlPpt.boolValue);
            //~ if(EditorGUI.EndChangeCheck()) srlPpt.boolValue=flag;
            //~ EditorGUI.showMixedValue=false; EditorGUILayout.EndHorizontal();

            //~ cont=new GUIContent("Active Duration:", "How long the item will stay active before it self destruct");
            //~ if(srlPpt.boolValue) PropertyField(serializedObject.FindProperty("selfDestructDuration"), cont);
            //~ else InvalidField(cont);


            EditorGUILayout.Space();


            cont = new GUIContent("BlinkBeforeDestruct:", "Blink to give player warning before the object self-destruct");
            if (srlPpt.boolValue)
            {
                PropertyField(serializedObject.FindProperty("blinkBeforeDestroy"), cont);
            }
            else
            {
                InvalidField(cont);
            }

            cont = new GUIContent("Blink Duration:", "The long the item is gong to blink for");
            if (srlPpt.boolValue && serializedObject.FindProperty("blinkBeforeDestroy").boolValue)
            {
                PropertyField(serializedObject.FindProperty("blinkDuration"), cont);
            }
            else
            {
                InvalidField(cont);
            }

            cont = new GUIContent("Blink Object: ", "The mesh object to blink (The system will deactivate/activate the blink object for blinking. we only need to deactivate the child object and contain the mesh, not the whole item)");
            if (srlPpt.boolValue && serializedObject.FindProperty("blinkBeforeDestroy").boolValue)
            {
                if (serializedObject.isEditingMultipleObjects)
                {
                    EditorGUILayout.LabelField(cont, new GUIContent("Cannot edit multiple instance"));
                }
                else
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(cont, GUILayout.MaxWidth(labelWidth));

                    int objID = GetObjectIDFromHList(instance.GetBlinkObjT(), objHList);
                    objID             = EditorGUILayout.Popup(objID, objHLabelList, GUILayout.MaxWidth(fieldWidthL));
                    instance.blinkObj = (objHList[objID] == null) ? null : objHList[objID];

                    EditorGUILayout.EndHorizontal();
                }
            }
            else
            {
                InvalidField(cont);
            }



            serializedObject.ApplyModifiedProperties();
        }
Ejemplo n.º 3
0
        Vector2 DrawWeaponConfigurator(float startX, float startY, Weapon weapon)
        {
            //float cachedX=startX;
            //float cachedY=startY;

            TDSEditorUtility.DrawSprite(new Rect(startX, startY, 60, 60), weapon.icon);
            startX += 65;

            float offsetY = TDSEditor.IsPrefab(weapon.gameObject) ? 5 : 0;

            cont = new GUIContent("Name:", "The weapon name to be displayed in game");
            EditorGUI.LabelField(new Rect(startX, startY += offsetY, width, height), cont);
            weapon.weaponName = EditorGUI.DelayedTextField(new Rect(startX + spaceX - 65, startY, width - 5, height), weapon.weaponName);

            cont = new GUIContent("Icon:", "The weapon icon to be displayed in game, must be a sprite");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.icon = (Sprite)EditorGUI.ObjectField(new Rect(startX + spaceX - 65, startY, width - 5, height), weapon.icon, typeof(Sprite), false);

            cont = new GUIContent("Prefab:", "The prefab object of the weapon\nClick this to highlight it in the ProjectTab");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            EditorGUI.ObjectField(new Rect(startX + spaceX - 65, startY, width - 5, height), weapon.gameObject, typeof(GameObject), false);

            startX -= 65;
            startY += spaceY;           //cachedY=startY;


            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), "Weapon Stats", headerStyle);

            cont = new GUIContent("Shoot Object:", "The prefab of the bullet/object fired by the weapon\nMust be a prefab with ShootObject component attached on it");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.shootObject = (GameObject)EditorGUI.ObjectField(new Rect(startX + spaceX, startY, width, height), weapon.shootObject, typeof(GameObject), false);

            cont = new GUIContent("ShootPoint:", "The transform which indicate the position where the shootObject will be fired from (Optional)\nEach shootPoint assigned will fire a shootObject instance in each attack\nIf left empty, the weapon transform itself will be use as the shootPoint\nThe orientation of the shootPoint matter as they dictate the orientation of the firing direction.\n");
            shootPointFoldout = EditorGUI.Foldout(new Rect(startX, startY += spaceY, spaceX, height), shootPointFoldout, cont);
            int shootPointCount = weapon.shootPointList.Count;

            shootPointCount = EditorGUI.DelayedIntField(new Rect(startX + spaceX, startY, 40, height), shootPointCount);

            if (shootPointCount != weapon.shootPointList.Count)
            {
                while (weapon.shootPointList.Count < shootPointCount)
                {
                    weapon.shootPointList.Add(null);
                }
                while (weapon.shootPointList.Count > shootPointCount)
                {
                    weapon.shootPointList.RemoveAt(weapon.shootPointList.Count - 1);
                }
            }

            if (shootPointFoldout)
            {
                for (int i = 0; i < weapon.shootPointList.Count; i++)
                {
                    int objID = GetObjectIDFromHList(weapon.shootPointList[i], objHList);
                    EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), "    - Element " + (i + 1));
                    objID = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, height), objID, objHLabelList);
                    weapon.shootPointList[i] = (objHList[objID] == null) ? null : objHList[objID].transform;
                }
            }

            cont = new GUIContent("Shoot Point Delay:", "The delay in seconds between subsequent shot in each shoot point");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            if (weapon.shootPointList.Count > 1)
            {
                weapon.shootPointDelay = EditorGUI.DelayedFloatField(new Rect(startX + spaceX, startY, 40, height), weapon.shootPointDelay);
            }
            else
            {
                EditorGUI.LabelField(new Rect(startX + spaceX, startY, 40, height), "-");
            }


            startY += 5;

            cont = new GUIContent("Continous Fire:", "Check to enable continous firing on the weapon when holding down fire button");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.continousFire = EditorGUI.Toggle(new Rect(startX + spaceX, startY, 40, height), weapon.continousFire);

            startY += 5;

            cont = new GUIContent("Range:", "The effective range of the weapon.");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.range = EditorGUI.DelayedFloatField(new Rect(startX + spaceX, startY, 40, height), weapon.range);

            cont = new GUIContent("Cooldown:", "The cooldown in seconds between subsequent shot");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.cooldown = EditorGUI.DelayedFloatField(new Rect(startX + spaceX, startY, 40, height), weapon.cooldown);

            startY += 5;

            cont = new GUIContent("UseEnergyAsAmmo:", "Check to use energy as ammunition");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.useEnergyAsAmmo = EditorGUI.Toggle(new Rect(startX + spaceX, startY, 40, height), weapon.useEnergyAsAmmo);

            cont = new GUIContent(" - Cost Per Shot:", "The energy cost per shot");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            if (!weapon.useEnergyAsAmmo)
            {
                EditorGUI.LabelField(new Rect(startX + spaceX, startY, 40, height), "-");
            }
            else
            {
                weapon.energyCost = EditorGUI.DelayedFloatField(new Rect(startX + spaceX, startY, 40, height), weapon.energyCost);
            }

            startY += 5;

            cont = new GUIContent("Clip Size:", "How many times the weapon can be fired before it needs a reload. Set to -1 if the weapon can be fired indefinitely without reloading");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            if (weapon.useEnergyAsAmmo)
            {
                EditorGUI.LabelField(new Rect(startX + spaceX, startY, 40, height), "-");
            }
            else
            {
                weapon.clipSize = EditorGUI.DelayedIntField(new Rect(startX + spaceX, startY, 40, height), weapon.clipSize);
            }

            cont = new GUIContent("Ammo Cap:", "How many ammo of the weapon the player can keep. Set to -1 if the weapon has unlimited ammo cap");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            if (weapon.useEnergyAsAmmo)
            {
                EditorGUI.LabelField(new Rect(startX + spaceX, startY, 40, height), "-");
            }
            else
            {
                weapon.ammoCap = EditorGUI.DelayedIntField(new Rect(startX + spaceX, startY, 40, height), weapon.ammoCap);
            }

            cont = new GUIContent("Reload Duration:", "The duration in seconds to reload the weapon");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            if (weapon.useEnergyAsAmmo)
            {
                EditorGUI.LabelField(new Rect(startX + spaceX, startY, 40, height), "-");
            }
            else
            {
                weapon.reloadDuration = EditorGUI.DelayedFloatField(new Rect(startX + spaceX, startY, 40, height), weapon.reloadDuration);
            }

            startY += 5;

            cont = new GUIContent("Recoil:", "The recoil magnitude of the weapon. The higher the value, the less accurate the weapon become when fired continously");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.recoilMagnitude = EditorGUI.DelayedFloatField(new Rect(startX + spaceX, startY, 40, height), weapon.recoilMagnitude);

            cont = new GUIContent("Recoil Cam Shake:", "The camera shake magnitude whenever the weapon is fired");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.recoilCamShake = EditorGUI.DelayedFloatField(new Rect(startX + spaceX, startY, 40, height), weapon.recoilCamShake);

            startY += 5;

            cont = new GUIContent("Spread:", "The number of shoot object split from each shoot point. This is to create a shotgun effect");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.spread = EditorGUI.DelayedIntField(new Rect(startX + spaceX, startY, 40, height), weapon.spread);
            weapon.spread = Mathf.Max(1, weapon.spread);

            cont = new GUIContent("Spread Angle:", "The angle (in degree) between each spread");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            if (weapon.spread > 1)
            {
                weapon.spreadAngle = EditorGUI.DelayedFloatField(new Rect(startX + spaceX, startY, 40, height), weapon.spreadAngle);
            }
            else
            {
                EditorGUI.LabelField(new Rect(startX + spaceX, startY, 40, height), "-");
            }

            startY += 10;

            Vector2 v2 = DrawAttackStats1(startX, startY + spaceY, weapon.aStats);

            startY = v2.y + 20;

            startY += 30;


            //int abilityIdx=weapon.ability==null ? 0 : TDSEditor.GetEffectIndex(weapon.ability.ID);
            //if(abilityIdx==0) weapon.ability=null;
            int abilityIdx = weapon.abilityID >= 0 ? TDSEditor.GetAbilityIndex(weapon.abilityID) : 0;

            TDSEditorUtility.DrawSprite(new Rect(startX + spaceX + width - 40, startY + spaceY - 45, 40, 40), abilityIdx > 0 ? abilityDB.abilityList[abilityIdx - 1].icon : null);
            if (GUI.Button(new Rect(startX + spaceX, startY - 2, 40, height - 2), "Edit "))
            {
                AbilityEditorWindow.Init();
            }

            cont = new GUIContent("AltAttack(Ability):", "Ability that is being used as the weapon alternate fire mode (optional)");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY - 5, width, height), cont, headerStyle);

            abilityIdx = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, height), abilityIdx, abilityLabel);
            if (abilityIdx > 0)
            {
                weapon.abilityID = abilityDB.abilityList[abilityIdx - 1].ID;
            }
            else
            {
                weapon.abilityID = -1;
            }

            //if(abilityIdx>0) weapon.ability=abilityDB.abilityList[abilityIdx-1];
            //else weapon.ability=null;


            startY += 15;


            cont = new GUIContent("Shoot SFX:", "Audio clip to play when the weapon fires (optional)");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.shootSFX = (AudioClip)EditorGUI.ObjectField(new Rect(startX + spaceX, startY, width, height), weapon.shootSFX, typeof(AudioClip), false);

            cont = new GUIContent("Reload SFX:", "Audio clip to play when the weapon reloads (optional)");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            weapon.reloadSFX = (AudioClip)EditorGUI.ObjectField(new Rect(startX + spaceX, startY, width, height), weapon.reloadSFX, typeof(AudioClip), false);


            startY += 15;

            GUIStyle style = new GUIStyle("TextArea");

            style.wordWrap = true;
            cont           = new GUIContent("Weapon description (to be used in runtime): ", "");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, 400, 20), cont);
            weapon.desp = EditorGUI.DelayedTextField(new Rect(startX, startY + spaceY - 3, 270, 150), weapon.desp, style);


            return(new Vector2(startX, startY + 200));
        }
Ejemplo n.º 4
0
        private float DrawModifyWeapon(float startX, float startY, Perk perk)
        {
            cont = new GUIContent("Apply To All:", "Check if the perk bonus applies to all player weapon (when applicable)");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.appliedToAllWeapon = EditorGUI.Toggle(new Rect(startX + spaceX, startY, widthS, height), perk.appliedToAllWeapon);

            if (!perk.appliedToAllWeapon)
            {
                cont = new GUIContent("Linked Weapons:", "The weapons that will gain the perk bonus");
                EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);

                for (int i = 0; i < perk.weaponIDList.Count + 1; i++)
                {
                    int index = i < perk.weaponIDList.Count ? TDSEditor.GetWeaponIndex(perk.weaponIDList[i]) : 0;

                    if (i > 0)
                    {
                        startY += spaceY;
                    }
                    EditorGUI.LabelField(new Rect(startX + spaceX - 10, startY, width, height), "-");
                    index = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, 15), index, weaponLabel);

                    if (index > 0)
                    {
                        int ID = weaponDB.weaponList[index - 1].ID;
                        if (!perk.weaponIDList.Contains(ID))
                        {
                            if (i < perk.weaponIDList.Count)
                            {
                                perk.weaponIDList[i] = ID;
                            }
                            else
                            {
                                perk.weaponIDList.Add(ID);
                            }
                        }
                    }
                    else if (i < perk.weaponIDList.Count)
                    {
                        perk.weaponIDList.RemoveAt(i); i -= 1;
                    }
                }
            }

            string stackText = "\nValue stacks with multiple perks";

            startY += 5;

            cont = new GUIContent("Damage:", "Weapon damage multiplier\n0.1 being 10% increase in weapon's damage" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapDmg = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapDmg);

            cont = new GUIContent("Crit Chance:", "Weapon critical chance multiplier\n0.1 being 10% increase in weapon's critical chance" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapCrit = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapCrit);

            cont = new GUIContent("Crit Multiplier:", "Weapon critical-multiplier multiplier\n0.1 being 10% increase in weapon's critical-multiplier" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapCritMul = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapCritMul);

            cont = new GUIContent("AOE:", "Weapon AOE radius multiplier\n0.1 being 10% increase in weapon's AOE radius" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapAOE = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapAOE);

            startY += 5;

            cont = new GUIContent("range:", "Weapon range multiplier\n0.1 being 10% increase in weapon's range" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapRange = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapRange);

            cont = new GUIContent("Cooldown:", "Weapon cooldown multiplier\n-0.1 being 10% reduction in weapon's cooldown" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapCooldown = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapCooldown);

            cont = new GUIContent("Clip Size:", "Weapon clip size multiplier\n0.1 being 10% increase in weapon's clip size" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapClipSize = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapClipSize);

            cont = new GUIContent("Ammo Cap:", "Weapon ammo cap multiplier\n0.1 being 10% increase in weapon's ammo cap" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapAmmoCap = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapAmmoCap);

            cont = new GUIContent("Reload:", "Weapon reload duration multiplier\n-0.1 being 10% reduction in weapon's reload duration" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapReloadDuration = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapReloadDuration);

            cont = new GUIContent("Recoil:", "Weapon recoil multiplier\n-0.1 being 10% reduction in weapon's recoil" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.weapRecoilMagnitude = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.weapRecoilMagnitude);

            startY += 5;

            int effectIdx = perk.weapEffectID >= 0 ? TDSEditor.GetEffectIndex(perk.weapEffectID) : 0;

            cont = new GUIContent("New Effect:", "replace existing weapon attack effect with the specified effect");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);

            effectIdx = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, height), effectIdx, effectLabel);
            if (effectIdx > 0)
            {
                perk.weapEffectID = effectDB.effectList[effectIdx - 1].ID;
            }
            else
            {
                perk.weapEffectID = -1;
            }

            startY += 5;

            int abIdx = perk.weapAbilityID >= 0 ? TDSEditor.GetAbilityIndex(perk.weapAbilityID) : 0;

            cont = new GUIContent("New Alt-Attack:", "replace existing weapon alternate attack with the specified ability");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);

            abIdx = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, height), abIdx, effectLabel);
            if (abIdx > 0)
            {
                perk.weapAbilityID = abilityDB.abilityList[abIdx - 1].ID;
            }
            else
            {
                perk.weapAbilityID = -1;
            }

            return(startY);
        }
Ejemplo n.º 5
0
        private float DrawModifyAbility(float startX, float startY, Perk perk)
        {
            cont = new GUIContent("Apply To All:", "Check if the perk bonus applies to all player ability (when applicable)");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.appliedToAllAbility = EditorGUI.Toggle(new Rect(startX + spaceX, startY, widthS, height), perk.appliedToAllAbility);

            if (!perk.appliedToAllAbility)
            {
                cont = new GUIContent("Linked Abilities:", "The abilities that will gain the perk bonus");
                EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);

                for (int i = 0; i < perk.abilityIDList.Count + 1; i++)
                {
                    int index = i < perk.abilityIDList.Count ? TDSEditor.GetAbilityIndex(perk.abilityIDList[i]) : 0;

                    if (i > 0)
                    {
                        startY += spaceY;
                    }
                    EditorGUI.LabelField(new Rect(startX + spaceX - 10, startY, width, height), "-");
                    index = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, 15), index, abilityLabel);

                    if (index > 0)
                    {
                        int ID = abilityDB.abilityList[index - 1].ID;
                        if (!perk.abilityIDList.Contains(ID))
                        {
                            if (i < perk.abilityIDList.Count)
                            {
                                perk.abilityIDList[i] = ID;
                            }
                            else
                            {
                                perk.abilityIDList.Add(ID);
                            }
                        }
                    }
                    else if (i < perk.abilityIDList.Count)
                    {
                        perk.abilityIDList.RemoveAt(i); i -= 1;
                    }
                }
            }

            string stackText = "\nValue stacks with multiple perks";

            startY += 5;

            cont = new GUIContent("Cost:", "Ability energy cost multiplier.\n-0.1 being 10% reduction in ability's energy cost" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.abCost = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.abCost);

            cont = new GUIContent("Cooldown:", "Ability cooldown multiplier.\n-0.1 being 10% reduction in ability's cooldown" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.abCooldown = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.abCooldown);

            cont = new GUIContent("Range:", "Ability range multiplier.\n0.1 being 10% increase in ability's range" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.abRange = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.abRange);

            startY += 5;

            cont = new GUIContent("Damage:", "Ability damage multiplier\n0.1 being 10% increase in ability's damage" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.abDmg = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.abDmg);

            cont = new GUIContent("Crit Chance:", "Ability critical chance multiplier\n0.1 being 10% increase in ability's damage" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.abCrit = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.abCrit);

            cont = new GUIContent("Crit Multiplier:", "Ability critical-multiplier's multiplier\n0.1 being 10% increase in ability's critical multiplier" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.abCritMul = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.abCritMul);

            cont = new GUIContent("AOE:", "Ability AOE radius multiplier\n0.1 being 10% increase in ability's AOE Radius" + stackText);
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);
            perk.abAOE = EditorGUI.FloatField(new Rect(startX + spaceX, startY, widthS, height), perk.abAOE);

            startY += 5;

            int effectIdx = perk.abEffectID >= 0 ? TDSEditor.GetEffectIndex(perk.abEffectID) : 0;

            cont = new GUIContent("New Effect:", "replace existing ability effect with the specified effect");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, width, height), cont);

            effectIdx = EditorGUI.Popup(new Rect(startX + spaceX, startY, width, height), effectIdx, effectLabel);
            if (effectIdx > 0)
            {
                perk.abEffectID = effectDB.effectList[effectIdx - 1].ID;
            }
            else
            {
                perk.abEffectID = -1;
            }

            return(startY);
        }