Beispiel #1
0
    private bool CheckAbilityCaps()
    {
        if (editorMode)
        {
            return(true);
        }
        var currentAbilitynumbers = new int[] { 0, 0, 0, 0, 0 };

        foreach (ShipBuilderPart shipBuilderPart in cursorScript.parts)
        {
            var type = (int)AbilityUtilities.GetAbilityTypeByID(shipBuilderPart.info.abilityID);
            currentAbilitynumbers[type]++;
        }

        var extras = CoreUpgraderScript.GetExtraAbilities(player.blueprint.coreShellSpriteID);

        for (int i = 0; i < 4; i++)
        {
            if (currentAbilitynumbers[i] > abilityLimits[i] + extras[i])
            {
                SetReconstructButton((ReconstructButtonStatus)(3 + i));
                return(false);
            }
        }
        return(true);
    }
    void ReflectDescription(Ability ability)
    {
        string description = "";

        description += AbilityUtilities.GetAbilityName(ability) + (ability.GetTier() > 0 ? " " + ability.GetTier() : "") + "\n";
        if (ability.GetEnergyCost() > 0)
        {
            description += "Energy cost: " + ability.GetEnergyCost() + "\n";
        }
        if (ability.GetCDDuration() != 0)
        {
            description += "Cooldown duration: " + ability.GetCDDuration() + "\n";
        }
        if ((ability as WeaponAbility)?.GetRange() != null)
        {
            description += $"Range: {(ability as WeaponAbility).GetRange()}\n";
        }
        if ((ability as WeaponAbility)?.GetBonusDamageType() != null)
        {
            description += $"Deals bonus damage to: {(ability as WeaponAbility).GetBonusDamageType()}\n";
        }
        description += AbilityUtilities.GetDescription(ability);
        abilityInfo  = description;
        if (tooltip)
        {
            tooltip.transform.Find("Text").GetComponent <Text>().text = abilityInfo;
        }
    }
 public void UpdateHandler()
 {
     if (!handler || currentAbilities == null)
     {
         return;
     }
     currentAbilities.Clear();
     foreach (Ability ab in gameObject.GetComponentsInChildren <Ability>())
     {
         Destroy(ab);
     }
     foreach (ShipBuilderPart part in parts)
     {
         if (part.info.abilityID != 0)
         {
             Ability dispAb = AbilityUtilities.AddAbilityToGameObjectByID(gameObject, part.info.abilityID,
                                                                          part.info.secondaryData, part.info.tier);
             currentAbilities.Insert(0, dispAb);
         }
     }
     currentAbilities.Insert(0, gameObject.AddComponent <MainBullet>());
     if (handler)
     {
         handler.Deinitialize();
         handler.Initialize(player, currentAbilities.ToArray());
     }
 }
Beispiel #4
0
    public void LoadBlueprint(EntityBlueprint blueprint, DroneSpawnData data)
    {
        shellImage.sprite = ResourceManager.GetAsset <Sprite>(blueprint.coreShellSpriteID);
        if (shellImage.sprite)
        {
            shellImage.enabled = true;
            shellImage.color   = FactionManager.GetFactionColor(0);
            shellImage.rectTransform.sizeDelta = shellImage.sprite.bounds.size * 100;
            shellImage.type = Image.Type.Sliced;
            // orient shell image so relative center stays the same regardless of shell tier
            shellImage.rectTransform.anchoredPosition = -shellImage.sprite.pivot + shellImage.rectTransform.sizeDelta / 2;
        }
        else
        {
            shellImage.enabled = false;
        }

        coreImage.rectTransform.anchoredPosition = -shellImage.rectTransform.anchoredPosition;
        coreImage.sprite = ResourceManager.GetAsset <Sprite>(blueprint.coreSpriteID);
        if (coreImage.sprite)
        {
            coreImage.enabled                 = true;
            coreImage.material                = ResourceManager.GetAsset <Material>("material_color_swap");
            coreImage.color                   = FactionManager.GetFactionColor(0);
            coreImage.preserveAspect          = true;
            coreImage.type                    = Image.Type.Sliced;
            coreImage.rectTransform.sizeDelta = coreImage.sprite.bounds.size * 100;
        }
        else
        {
            coreImage.enabled = false;
        }

        if (data.type == DroneType.Mini)
        {
            miniDroneShooter.gameObject.SetActive(true);
            miniDroneShooter.enabled = true;
            miniDroneShooter.sprite  = ResourceManager.GetAsset <Sprite>(AbilityUtilities.GetShooterByID(6));
            miniDroneShooter.color   = FactionManager.GetFactionColor(0);
            miniDroneShooter.rectTransform.sizeDelta = miniDroneShooter.sprite.bounds.size * 100;
            miniDroneShooter.type = Image.Type.Sliced;
        }
        else
        {
            miniDroneShooter.gameObject.SetActive(false);
            miniDroneShooter.enabled = false;
        }

        foreach (EntityBlueprint.PartInfo part in blueprint.parts)
        {
            var p = Instantiate(partPrefab, cursorScript.transform.parent).GetComponent <ShipBuilderPart>();
            p.cursorScript = cursorScript;
            cursorScript.parts.Add(p);
            p.info = part;
            p.SetLastValidPos(part.location);
            p.isInChain = true;
            p.validPos  = true;
            p.InitializeMode(BuilderMode.Workshop);
        }
    }
    protected virtual void Start()
    {
        image           = GetComponentsInChildren <Image>()[1];
        shooter         = GetComponentsInChildren <Image>()[2];
        val             = GetComponentInChildren <Text>();
        image.sprite    = ResourceManager.GetAsset <Sprite>(part.partID + "_sprite");
        isShiny.enabled = part.shiny;

        image.color = activeColor = FactionManager.GetFactionColor(0);
        if (part.shiny)
        {
            activeColor += new Color32(0, 0, 150, 0);
            image.color  = activeColor;
        }
        image.GetComponent <RectTransform>().sizeDelta = image.sprite.bounds.size * 100;
        // button border size is handled specifically by the grid layout components

        string shooterID = AbilityUtilities.GetShooterByID(part.abilityID);

        if (shooterID != null)
        {
            shooter.sprite = ResourceManager.GetAsset <Sprite>(shooterID);
            shooter.color  = activeColor;
            shooter.rectTransform.sizeDelta = shooter.sprite.bounds.size * 100;
        }
        else
        {
            shooter.enabled = false;
        }
    }
Beispiel #6
0
    /// <summary>
    /// Checks whether the ability hits the target or not and whether it's a crit
    /// </summary>
    /// <param name="attackBonus"> The caster's attackBonus </param>
    /// <param name="targetAC"> The target's Armour Class </param>
    /// <param name="critChance"> The caster's critchance </param>
    /// <returns></returns>
    public HitRoll CheckHit(int targetAC, int critChance)
    {
        rollInfo.wasCrit = false;
        rollInfo.wasHit  = false;
        bool threat = false;

        int rollValue = Random.Range(1, 20);

        rollInfo.roll     = rollValue;
        rollInfo.modifier = AbilityUtilities.GetAttackBonus(this);
        //        Debug.Log("Rolled " + rollValue); //Show this somewhere?
        if (rollValue == 1)
        {
            Debug.Log("Natural 1");
            //Nat 1 = auto miss.
            return(rollInfo);
        }

        //Checks if it's within the critical threat range. If target is an ally, nat 20 should just confirm hit
        if (rollValue >= 20 - critChance)
        {
            Debug.Log("Threat gained!");
            threat = true;

            //Hit is only auto-confirmed if the roll is a natural 20.
            if (rollValue == 20)
            {
                Debug.Log("Natural 20!");
                rollInfo.wasHit = true;
            }
        }

        //Adds the attackbonus to the attack, to calculate whether it's a hit.
        rollValue += rollInfo.modifier;

        //If you aren't already guaranteed a hit and you exceed the target's AC, confirm hit.
        if (!rollInfo.wasHit && rollValue >= targetAC)
        {
            rollInfo.wasHit = true;
        }

        if (threat) //Locks in the crit
        {
            rollValue = Random.Range(1, 20) + rollInfo.modifier;
            if (rollValue >= targetAC)
            {
                rollInfo.wasCrit = true;
                Debug.Log("Crit locked!");
            }
            else
            {
                Debug.Log("Crit failed");
            }
        }


        return(rollInfo);
    }
Beispiel #7
0
    private void SetupRewards(GameObject gameObject, RewardWrapper wrapper)
    {
        gameObject.transform.Find("Credit Reward Text").GetComponent <Text>().text =
            "Credit reward: " + wrapper.creditReward;

        gameObject.transform.Find("Reputation Reward Text").GetComponent <Text>().text =
            "Reputation reward: " + wrapper.reputationReward;
        // Part reward
        if (wrapper.partReward)
        {
            // Part image:
            PartBlueprint blueprint = ResourceManager.GetAsset <PartBlueprint>(wrapper.partID);
            if (!blueprint)
            {
                Debug.LogWarning("Part reward of Start Task wrapper not found!");
            }

            var partImage = gameObject.transform.Find("Part").GetComponent <Image>();
            partImage.sprite = ResourceManager.GetAsset <Sprite>(blueprint.spriteID);
            partImage.rectTransform.sizeDelta = partImage.sprite.bounds.size * 45;
            partImage.color = Color.green;

            // Ability image:
            if (wrapper.partAbilityID > 0)
            {
                var backgroudBox   = gameObject.transform.Find("backgroundbox");
                var abilityIcon    = backgroudBox.Find("Ability").GetComponent <Image>();
                var tierIcon       = backgroudBox.Find("Tier").GetComponent <Image>();
                var type           = backgroudBox.Find("Type").GetComponent <Text>();
                var abilityTooltip = backgroudBox.GetComponent <AbilityButtonScript>();

                abilityIcon.sprite = AbilityUtilities.GetAbilityImageByID(wrapper.partAbilityID, wrapper.partSecondaryData);
                if (wrapper.partTier >= 1)
                {
                    tierIcon.sprite = ResourceManager.GetAsset <Sprite>("AbilityTier" + Mathf.Clamp(wrapper.partTier, 1, 3));
                }
                else
                {
                    tierIcon.enabled = false;
                }

                type.text = AbilityUtilities.GetAbilityNameByID(wrapper.partAbilityID, null) + (wrapper.partTier > 0 ? " " + wrapper.partTier : "");
                string description = "";
                description += AbilityUtilities.GetAbilityNameByID(wrapper.partAbilityID, null) + (wrapper.partTier > 0 ? " " + wrapper.partTier : "") + "\n";
                description += AbilityUtilities.GetDescriptionByID(wrapper.partAbilityID, wrapper.partTier, null);
                abilityTooltip.abilityInfo = description;
            }
            else
            {
                gameObject.transform.Find("backgroundbox").gameObject.SetActive(false);
            }
        }
        else
        {
            gameObject.transform.Find("Part").GetComponent <Image>().enabled = false;
            gameObject.transform.Find("backgroundbox").gameObject.SetActive(false);
        }
    }
Beispiel #8
0
    public void UpdateInfo(GameObject obj, GameObject targetInfo, int index = 0)
    {
        string description;
        var    targetName   = targetInfo.transform.Find("Target Name").GetComponent <Text>();
        var    targetDesc   = targetInfo.transform.Find("Name").GetComponent <Text>();
        Text   targetNumber = null;

        if (targetInfo.transform.Find("Number"))
        {
            targetNumber = targetInfo.transform.Find("Number").GetComponent <Text>();
        }

        if (obj == null)
        {
            targetName.text = targetDesc.text = "";
            targetInfo.SetActive(false);
            return;
        }

        var entity = obj.GetComponent <Entity>();

        if (entity)
        {
            targetInfo.SetActive(true);
            description      = (entity.Terrain + " ");
            description     += (entity.category + "");
            targetName.text  = entity.entityName;
            targetDesc.text  = description;
            targetName.color = targetDesc.color = FactionManager.GetFactionColor(entity.faction);
            if (targetNumber)
            {
                targetNumber.color = targetName.color;
                targetNumber.text  = ReticleScript.instance.GetTargetIndex(entity) + 1 + "";
                // targetShape.rectTransform.sizeDelta = targetShape.rectTransform.sizeDelta / 1.25F;
            }
        }
        else if (obj.GetComponent <ShellPart>())
        {
            var info = obj.GetComponent <ShellPart>().info;
            targetInfo.SetActive(true);
            if (PartIndexScript.CheckPartObtained(info))
            {
                targetName.text = info.partID;
                targetDesc.text = AbilityUtilities.GetAbilityNameByID(info.abilityID, null) + " " + info.tier;
            }
            else
            {
                targetName.text  = "Unobtained Part";
                targetDesc.text  = "Bring to Yard";
                targetName.color = targetDesc.color = FactionManager.GetFactionColor(obj.GetComponent <ShellPart>().GetFaction());
            }
        }
        else
        {
            targetName.text = targetDesc.text = "";
            targetInfo.SetActive(false);
        }
    }
Beispiel #9
0
    public void DisplayPartInfo(EntityBlueprint.PartInfo info)
    {
        if (info.abilityID != 0)
        {
            if (info.tier != 0)
            {
                abilityTier.gameObject.SetActive(true);
                abilityTier.sprite = ResourceManager.GetAsset <Sprite>("AbilityTier" + info.tier);
                if (abilityTier.sprite)
                {
                    abilityTier.rectTransform.sizeDelta = abilityTier.sprite.bounds.size * 20;
                }

                abilityTier.color = new Color(1, 1, 1, 0.4F);
            }
            else
            {
                abilityTier.gameObject.SetActive(false);
            }

            abilityImage.sprite = AbilityUtilities.GetAbilityImageByID(info.abilityID, info.secondaryData);
            abilityImage.gameObject.SetActive(true);
            abilityText.text = AbilityUtilities.GetAbilityNameByID(info.abilityID, info.secondaryData) + (info.tier > 0 ? " " + info.tier : "");
            abilityText.gameObject.SetActive(true);
            abilityBox.gameObject.SetActive(true);

            string description = "";

            description += AbilityUtilities.GetAbilityNameByID(info.abilityID, info.secondaryData) + (info.tier > 0 ? " " + info.tier : "") + "\n";
            description += AbilityUtilities.GetDescriptionByID(info.abilityID, info.tier, info.secondaryData);
            buttonScript.abilityInfo = description;
        }
        else
        {
            abilityTier.gameObject.SetActive(false);
            abilityBox.gameObject.SetActive(false);
            abilityImage.gameObject.SetActive(false);
            abilityText.gameObject.SetActive(false);
        }

        image.gameObject.SetActive(true);
        partName.gameObject.SetActive(true);
        partStats.gameObject.SetActive(true);
        string partID = info.partID;

        partName.text = partID;
        var   blueprint = ResourceManager.GetAsset <PartBlueprint>(partID);
        float mass      = blueprint.mass;
        float health    = blueprint.health;
        int   value     = EntityBlueprint.GetPartValue(info);

        partStats.text = $"PART SHELL: {health / 2}\nPART CORE: {health / 4}\nPART WEIGHT: {mass * Entity.weightMultiplier}\nPART VALUE: \n{value} CREDITS";
        image.sprite   = ResourceManager.GetAsset <Sprite>(partID + "_sprite");
        image.rectTransform.sizeDelta = image.sprite.bounds.size * 50;
        image.color = info.shiny ? FactionManager.GetFactionShinyColor(0) : FactionManager.GetFactionColor(0);
    }
Beispiel #10
0
    public override void ApplyEffect(Ability ability, ICharacter target)
    {
        int effectValue = 0;

        effectValue = AbilityUtilities.EffectRoll(ability, this);

        statusEffect.SetupStatus(target, hitInfo, duration, AbilityUtilities.GetDamageBonus(this, ability.caster), dice);
        Debug.Log("Status effect to apply: " + statusEffect);
        target.ApplyEffect(this);
    }
Beispiel #11
0
    /// <summary>
    /// The effect
    /// </summary>
    /// <param name="ability"></param>
    /// <param name="target"></param>
    public virtual void ApplyEffect(Ability ability, ICharacter target)
    {
        int effectValue = 0;

        effectValue = AbilityUtilities.EffectRoll(ability, this);
        if (ability.rollInfo.wasCrit)
        {
            effectValue = effectValue * 2;
        }

        hitInfo = new EffectHitInfo(effectValue, ability.rollInfo, hitType);

        target.ApplyEffect(this);
    }
Beispiel #12
0
    public void ChangeDisplayFactors()
    {
        foreach (GameObject obj in contentTexts)
        {
            obj.SetActive(false);
        }

        if (phase == DroneWorkshopPhase.BuildPhase)
        {
            foreach (ShipBuilderInventoryScript inv in builderPartDict.Values)
            {
                string partName    = inv.part.partID.ToLower();
                string abilityName = AbilityUtilities.GetAbilityNameByID(inv.part.abilityID, inv.part.secondaryData).ToLower();
                if (partName.Contains(searcherString) || abilityName.Contains(searcherString) || searcherString == "")
                {
                    if (displayingTypes[(int)AbilityUtilities.GetAbilityTypeByID(inv.part.abilityID)])
                    {
                        inv.gameObject.SetActive(true);
                        contentTexts[ResourceManager.GetAsset <PartBlueprint>(inv.part.partID).size].SetActive(true);
                    }
                    else
                    {
                        inv.gameObject.SetActive(false);
                    }
                }
                else
                {
                    inv.gameObject.SetActive(false);
                }
            }
        }
        else
        {
            foreach (DWInventoryButton inv in partDict.Keys)
            {
                string partName    = inv.part.partID.ToLower();
                string abilityName = AbilityUtilities.GetAbilityNameByID(inv.part.abilityID, inv.part.secondaryData).ToLower();
                if (partName.Contains(searcherString) || abilityName.Contains(searcherString) || searcherString == "")
                {
                    inv.gameObject.SetActive(true);
                    contentTexts[ResourceManager.GetAsset <PartBlueprint>(inv.part.partID).size].SetActive(true);
                }
                else
                {
                    inv.gameObject.SetActive(false);
                }
            }
        }
    }
Beispiel #13
0
    public override void ApplyEffect(Ability ability, ICharacter target)
    {
        int modifier = AbilityUtilities.GetDamageBonus(this, ability.caster);

        //We want the duration to be based on the caster level
        duration = modifier + 1;
        modifier = Mathf.FloorToInt(modifier / 2);
        if (modifier < 1)
        {
            modifier = 1;
        }

        statusEffect.SetupStatus(target, duration, modifier);
        target.ApplyEffect(this);
    }
    public void Init(Ability ability, string hotkeyText, Entity entity, KeyName keycode)
    {
        this.entity = entity;
        abilities.Add(ability);

        // set up name, description, tier
        ReflectName(ability);
        ReflectDescription(ability);
        ReflectTier(ability);
        ReflectHotkey(GetPrettyStringFromKeycode(InputManager.keys[keycode].overrideKey));

        this.keycode = keycode;

        // set up image
        abilityImage.sprite = AbilityUtilities.GetAbilityImage(ability);

        gleamed = ability is PassiveAbility;
    }
    public void Init(Ability ability, string hotkeyText, Entity entity, KeyName keycode, bool visualMode = false)
    {
        this.entity = entity;
        abilities.Add(ability);
        this.visualMode = visualMode;
        // set up name, description, tier
        ReflectName(ability);
        ReflectDescription(ability);
        ReflectTier(ability);
        ReflectHotkey(keycode);

        rangeCirclePrefab = ResourceManager.GetAsset <GameObject>("range_circle_prefab");
        this.keycode      = keycode;

        // set up image
        abilityImage.sprite = AbilityUtilities.GetAbilityImage(ability);

        gleamed = ability is PassiveAbility;
    }
Beispiel #16
0
 protected virtual void UpdateAppearance()
 {
     // set colors
     image.color = info.shiny ? FactionManager.GetFactionShinyColor(faction) : FactionManager.GetFactionColor(faction);
     // set position
     image.rectTransform.anchoredPosition = info.location * 100;
     if (shooter)
     {
         shooter.color = image.color;
         shooter.gameObject.transform.SetAsLastSibling();
         shooter.rectTransform.anchoredPosition = info.location * 100;
         if (AbilityUtilities.GetShooterByID(info.abilityID) == null)
         {
             Destroy(shooter.gameObject);
         }
     }
     // set rotation and flipping
     image.rectTransform.localEulerAngles = new Vector3(0, 0, info.rotation);
     image.rectTransform.localScale       = new Vector3(info.mirrored ? -1 : 1, 1, 1);
 }
    void ReflectDescription(Ability ability)
    {
        string description = "";

        description += AbilityUtilities.GetAbilityName(ability) + (ability.GetTier() > 0 ? " " + ability.GetTier() : "") + "\n";
        if (ability.GetEnergyCost() > 0)
        {
            description += "Energy cost: " + ability.GetEnergyCost() + "\n";
        }
        if (ability.GetCDDuration() != 0)
        {
            description += "Cooldown duration: " + ability.GetCDDuration() + "\n";
        }
        description += AbilityUtilities.GetDescription(ability);
        abilityInfo  = description;
        if (tooltip)
        {
            tooltip.transform.Find("Text").GetComponent <Text>().text = abilityInfo;
        }
    }
Beispiel #18
0
 void Start()
 {
     if (AbilityUtilities.GetShooterByID(info.abilityID) != null)
     {
         shooter.sprite = ResourceManager.GetAsset <Sprite>(AbilityUtilities.GetShooterByID(info.abilityID));
         shooter.rectTransform.sizeDelta = shooter.sprite.bounds.size * 100;
         shooter.enabled       = true;
         shooter.raycastTarget = false;
     }
     image.rectTransform.anchoredPosition = shooter.rectTransform.anchoredPosition = info.location * 100;
     image.sprite = ResourceManager.GetAsset <Sprite>(info.partID + "_sprite");
     // NEVER name something with "_sprite" at the end UNLESS it is a PART SPRITE!
     if (image.sprite)
     {
         image.rectTransform.sizeDelta = image.sprite.bounds.size * 100;
         UpdateAppearance();
         image.enabled = true;
     }
     else
     {
         Debug.LogWarning("Invalid display part image.");
     }
 }
Beispiel #19
0
    void SetAppearance()
    {
        if (AbilityUtilities.GetShooterByID(info.abilityID) != null)
        {
            shooter.sprite = ResourceManager.GetAsset <Sprite>(AbilityUtilities.GetShooterByID(info.abilityID));
            shooter.rectTransform.sizeDelta = shooter.sprite.bounds.size * 100;
            shooter.enabled       = true;
            shooter.raycastTarget = false;
        }

        // NEVER name something with "_sprite" at the end UNLESS it is a PART SPRITE!
        if (ResourceManager.Instance.resourceExists(info.partID + "_sprite"))
        {
            image.sprite = ResourceManager.GetAsset <Sprite>(info.partID + "_sprite");
            image.rectTransform.sizeDelta = image.sprite.bounds.size * 100;
            UpdateAppearance();
            image.enabled = true;
        }
        else
        {
            Debug.LogWarning($"Invalid display part image: {info.partID}");
        }
    }
    void ReflectDescription(Ability ability)
    {
        string description = AbilityUtilities.GetAbilityName(ability) + (ability.GetTier() > 0 ? " " + ability.GetTier() : "");

        if (ability.GetEnergyCost() > 0)
        {
            description += $"\nEnergy cost: {ability.GetEnergyCost()}";
        }

        if (ability.GetCDDuration() != 0)
        {
            description += $"\nCooldown duration: {ability.GetCDDuration()}";
        }

        if (ability.GetRange() > 0)
        {
            description += $"\nRange: {ability.GetRange()}";
        }

        if (ability is WeaponAbility weaponAbility)
        {
            var bonusDamageType = weaponAbility.GetBonusDamageType();
            if (bonusDamageType != null)
            {
                description += $"\nDeals bonus damage to: {bonusDamageType}";
            }
        }

        description += $"\n{AbilityUtilities.GetDescription(ability)}";
        abilityInfo  = description;

        if (tooltip)
        {
            tooltip.transform.Find("Text").GetComponent <Text>().text = abilityInfo;
        }
    }
Beispiel #21
0
        public override void NodeGUI()
        {
            GUILayout.BeginHorizontal();
            inputLeft.DisplayLayout();
            outputAccept.DisplayLayout();
            GUILayout.EndHorizontal();
            outputDecline.DisplayLayout();
            GUILayout.BeginHorizontal();
            GUILayout.Label("Task Name:");
            height   = 270f;
            taskName = GUILayout.TextArea(taskName, GUILayout.Width(200f));
            GUILayout.EndHorizontal();
            GUILayout.Label("Dialogue:");
            dialogueText = GUILayout.TextArea(dialogueText, GUILayout.Width(200f));
            height      += GUI.skin.textArea.CalcHeight(new GUIContent(dialogueText), 200f);
            GUILayout.Label("Dialogue Color:");
            float r, g, b;

            GUILayout.BeginHorizontal();
            r = RTEditorGUI.FloatField(dialogueColor.r);
            g = RTEditorGUI.FloatField(dialogueColor.g);
            b = RTEditorGUI.FloatField(dialogueColor.b);
            GUILayout.EndHorizontal();
            dialogueColor = new Color(r, g, b);
            GUILayout.BeginHorizontal();
            GUILayout.Label("Accept Player Response:");
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            acceptResponse = GUILayout.TextArea(acceptResponse, GUILayout.Width(200f));
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            GUILayout.Label("Decline Player Response:");
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            declineResponse = GUILayout.TextArea(declineResponse, GUILayout.Width(200f));
            GUILayout.EndHorizontal();
            GUILayout.Label("Objective list:");
            objectiveList = GUILayout.TextArea(objectiveList, GUILayout.Width(200f));
            height       += GUI.skin.textArea.CalcHeight(new GUIContent(objectiveList), 200f);
            GUILayout.Label("Credit reward:");
            creditReward = RTEditorGUI.IntField(creditReward, GUILayout.Width(200f));
            GUILayout.Label("Reputation reward:");
            reputationReward = RTEditorGUI.IntField(reputationReward, GUILayout.Width(200f));
            partReward       = RTEditorGUI.Toggle(partReward, "Part reward", GUILayout.Width(200f));
            if (partReward)
            {
                height += 320f;
                GUILayout.Label("Part ID:");
                partID = GUILayout.TextField(partID, GUILayout.Width(200f));
                if (ResourceManager.Instance != null && partID != null && (GUI.changed || !init))
                {
                    init = true;
                    PartBlueprint partBlueprint = ResourceManager.GetAsset <PartBlueprint>(partID);
                    if (partBlueprint != null)
                    {
                        partTexture = ResourceManager.GetAsset <Sprite>(partBlueprint.spriteID).texture;
                    }
                    else
                    {
                        partTexture = null;
                    }
                }
                if (partTexture != null)
                {
                    GUILayout.Label(partTexture);
                    height += partTexture.height + 8f;
                }
                else
                {
                    NodeEditorGUI.nodeSkin.label.normal.textColor = Color.red;
                    GUILayout.Label("<Part not found>");
                    NodeEditorGUI.nodeSkin.label.normal.textColor = NodeEditorGUI.NE_TextColor;
                }
                partAbilityID = RTEditorGUI.IntField("Ability ID", partAbilityID, GUILayout.Width(200f));
                string abilityName = AbilityUtilities.GetAbilityNameByID(partAbilityID, null);
                if (abilityName != "Name unset")
                {
                    GUILayout.Label("Ability: " + abilityName);
                    height += 24f;
                }
                partTier = RTEditorGUI.IntField("Part tier", partTier, GUILayout.Width(200f));
                GUILayout.Label("Part Secondary Data:");
                partSecondaryData = GUILayout.TextField(partSecondaryData, GUILayout.Width(200f));
            }
            else
            {
                height += 160f;
            }
            forceTask = Utilities.RTEditorGUI.Toggle(forceTask, "Force Task Acceptance");
            height   += GUI.skin.textArea.CalcHeight(new GUIContent(dialogueText), 50f);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Entity ID for Confirmed Dialogue");
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            entityIDforConfirmedResponse = GUILayout.TextField(entityIDforConfirmedResponse);
            GUILayout.EndHorizontal();

            GUILayout.Label("Task Confirmed Dialogue:");
            taskConfirmedDialogue = GUILayout.TextArea(taskConfirmedDialogue, GUILayout.Width(200f));
            height += GUI.skin.textArea.CalcHeight(new GUIContent(taskConfirmedDialogue), 200f);
        }
Beispiel #22
0
    /// <summary>
    /// Generate shell parts in the blueprint, change ship stats accordingly
    /// </summary>
    protected virtual void BuildEntity()
    {
        // all created entities should have blueprints!
        if (!blueprint)
        {
            Debug.LogError(this + " does not have a blueprint! EVERY constructed entity should have one!");
        }

        DestroyOldParts();

        parts.Clear();
        blueprint.shellHealth.CopyTo(maxHealth, 0);
        blueprint.baseRegen.CopyTo(regenRate, 0);

        if (blueprint)
        {
            this.dialogue = blueprint.dialogue;
        }

        AttemptAddComponents();
        var renderer = GetComponent <SpriteRenderer>();

        if (blueprint)
        { // check if it contains a blueprint (it should)
            if (blueprint.coreSpriteID == "" && blueprint.intendedType == EntityBlueprint.IntendedType.ShellCore)
            {
                Debug.Log(this + "'s blueprint does not contain a core sprite ID!");
                // check if the blueprint does not contain a core sprite ID (it should)
            }
            renderer.sprite = ResourceManager.GetAsset <Sprite>(blueprint.coreSpriteID);
        }
        else
        {
            renderer.sprite = ResourceManager.GetAsset <Sprite>("core1_light");
        }
        renderer.sortingOrder = 101;

        renderer = transform.Find("Minimap Image").GetComponent <SpriteRenderer>();
        if (category == EntityCategory.Station && !(this is Turret))
        {
            if (this as Outpost)
            {
                renderer.sprite = ResourceManager.GetAsset <Sprite>("outpost_minimap_sprite");
            }
            else if (this as Bunker)
            {
                renderer.sprite = ResourceManager.GetAsset <Sprite>("bunker_minimap_sprite");
            }
            else
            {
                renderer.sprite = ResourceManager.GetAsset <Sprite>("minimap_sprite");
            }
            renderer.transform.localScale = new Vector3(3.5F, 3.5F, 3.5F);
        }
        else
        {
            renderer.sprite = ResourceManager.GetAsset <Sprite>("minimap_sprite");
        }


        abilities = new List <Ability>();

        entityName = blueprint.entityName;
        name       = blueprint.entityName;
        GetComponent <Rigidbody2D>().mass = 1; // reset mass
        weight = this as Drone ? 25 : coreWeight;

        var isLightDrone = this as Drone && (this as Drone).type == DroneType.Light; // used for light drone weight reduction

        //For shellcores, create the tractor beam
        // Create shell parts
        if (blueprint != null)
        {
            for (int i = 0; i < blueprint.parts.Count; i++)
            {
                EntityBlueprint.PartInfo part          = blueprint.parts[i];
                PartBlueprint            partBlueprint = ResourceManager.GetAsset <PartBlueprint>(part.partID);

                GameObject partObject = ShellPart.BuildPart(partBlueprint);
                ShellPart  shellPart  = partObject.GetComponent <ShellPart>();
                shellPart.info = part;
                partObject.transform.SetParent(transform, false);
                partObject.transform.SetAsFirstSibling();

                //Add an ability to the part:

                WeaponAbility ab = AbilityUtilities.AddAbilityToGameObjectByID(partObject, part.abilityID, part.secondaryData, part.tier) as WeaponAbility;
                if (ab)  // add weapon diversity
                {
                    ab.type = DroneUtilities.GetDiversityTypeByEntity(this);
                }
                partObject.transform.localEulerAngles = new Vector3(0, 0, part.rotation);
                partObject.transform.localPosition    = new Vector3(part.location.x, part.location.y, 0);
                SpriteRenderer sr = partObject.GetComponent <SpriteRenderer>();
                // sr.flipX = part.mirrored; this doesn't work, it does not flip the collider hitbox
                var tmp = partObject.transform.localScale;
                tmp.x = part.mirrored ? -1 : 1;
                partObject.transform.localScale = tmp;
                sr.sortingOrder = i + 2;
                //entityBody.mass += (isLightDrone ? partBlueprint.mass * 0.6F : partBlueprint.mass);
                var partWeight = isLightDrone ? partBlueprint.mass * 0.6F * weightMultiplier : partBlueprint.mass * weightMultiplier;
                weight       += partWeight;
                maxHealth[0] += partBlueprint.health / 2;
                maxHealth[1] += partBlueprint.health / 4;

                // Drone shell and core health penalty
                if (this as Drone)
                {
                    maxHealth[0] /= 2;
                    maxHealth[1] /= 4;
                }

                string shooterID = AbilityUtilities.GetShooterByID(part.abilityID, part.secondaryData);
                // Add shooter
                if (shooterID != null)
                {
                    var shooter = new GameObject("Shooter");
                    shooter.transform.SetParent(partObject.transform);
                    shooter.transform.localPosition = Vector3.zero;
                    var shooterSprite = shooter.AddComponent <SpriteRenderer>();
                    shooterSprite.sprite = ResourceManager.GetAsset <Sprite>(shooterID);
                    // if(blueprint.parts.Count < 2) shooterSprite.sortingOrder = 500; TODO: Figure out what these lines do
                    // shooterSprite.sortingOrder = sr.sortingOrder + 1;
                    shooterSprite.sortingOrder = 500;
                    shellPart.shooter          = shooter;
                    if (AbilityUtilities.GetAbilityTypeByID(part.abilityID) == AbilityHandler.AbilityTypes.Weapons)
                    {
                        shellPart.weapon = true;
                    }
                }

                var weaponAbility = partObject.GetComponent <WeaponAbility>();
                if (weaponAbility)
                {
                    // if the terrain and category wasn't preset set to the enitity's properties

                    if (weaponAbility.terrain == TerrainType.Unset)
                    {
                        weaponAbility.terrain = Terrain;
                    }
                    if (weaponAbility.category == EntityCategory.Unset)
                    {
                        weaponAbility.category = category;
                    }
                }


                parts.Add(partObject.GetComponent <ShellPart>());
                if (partObject.GetComponent <Ability>())
                {
                    abilities.Insert(0, partObject.GetComponent <Ability>());
                }

                // Disable collider if no sprite
                if (!(partObject.GetComponent <SpriteRenderer>() && partObject.GetComponent <SpriteRenderer>().sprite) &&
                    partObject.GetComponent <Collider2D>() && !partObject.GetComponent <Harvester>())
                {
                    partObject.GetComponent <Collider2D>().enabled = false;
                }
            }
        }

        if (this as ShellCore)
        {
            if (!gameObject.GetComponentInChildren <MainBullet>())
            {
                MainBullet mainBullet = gameObject.AddComponent <MainBullet>();
                mainBullet.SetTier(Mathf.Min(3, 1 + CoreUpgraderScript.GetCoreTier(blueprint.coreShellSpriteID)));
                mainBullet.bulletPrefab = ResourceManager.GetAsset <GameObject>("bullet_prefab");
                mainBullet.terrain      = TerrainType.Air;
                mainBullet.SetActive(true);
                abilities.Insert(0, mainBullet);
            }
            else
            {
                MainBullet mainBullet = gameObject.GetComponentInChildren <MainBullet>();
                mainBullet.SetTier(Mathf.Min(3, 1 + CoreUpgraderScript.GetCoreTier(blueprint.coreShellSpriteID)));
                mainBullet.SetDestroyed(false);
                abilities.Insert(0, mainBullet);
            }
        }

        // unique abilities for mini and worker drones here
        if (this as Drone)
        {
            Drone drone = this as Drone;
            switch (drone.type)
            {
            case DroneType.Mini:
                var     shellObj = transform.Find("Shell Sprite").gameObject;
                Ability ab       = AbilityUtilities.AddAbilityToGameObjectByID(shellObj, 6, null, 1);
                var     shooter  = new GameObject("Shooter");
                shooter.transform.SetParent(shellObj.transform);
                shooter.transform.localPosition = Vector3.zero;
                var shooterSprite = shooter.AddComponent <SpriteRenderer>();
                shooterSprite.sprite       = ResourceManager.GetAsset <Sprite>(AbilityUtilities.GetShooterByID(6));
                shooterSprite.sortingOrder = 500;
                shellObj.GetComponent <ShellPart>().shooter = shooter;
                (ab as WeaponAbility).terrain = TerrainType.Air;
                abilities.Insert(0, ab);
                break;

            default:
                break;
            }
        }
        IsInvisible = false;

        // check to see if the entity is interactible
        if (dialogue && faction == 0)
        {
            interactible = true;
        }

        Transform shellSprite = shell.transform;

        if (shellSprite)
        {
            parts.Add(shellSprite.GetComponent <ShellPart>());
        }
        ConnectedTreeCreator();

        maxHealth.CopyTo(currentHealth, 0);
        ActivatePassives(); // activate passive abilities here to avoid race condition BS

        if (OnEntitySpawn != null)
        {
            OnEntitySpawn.Invoke(this);
        }
    }
 public void ReflectName(Ability ability)
 {
     GetComponentInChildren <Text>().text = AbilityUtilities.GetAbilityName(ability)
                                            + (ability.GetTier() > 0 ? " " + ability.GetTier() : "");
 }
Beispiel #24
0
 public AbilityHandler.AbilityTypes GetAbilityType()
 {
     return(AbilityUtilities.GetAbilityTypeByID((int)ID));
 }
    private void showTaskPrompt(NodeEditorFramework.Standard.StartTaskNode node, Entity speaker) //TODO: reward part image
    {
        if (window)
        {
            endDialogue(0, false);
        }
        CreateWindow(taskDialogueBoxPrefab, node.dialogueText, node.dialogueColor, speaker);
        DialogueViewTransitionIn(speaker);
        AudioManager.PlayClipByID("clip_select", true); // task button cannot create a noise because it launches endDialogue()
                                                        // so cover for its noise here

        // Objective list
        var objectiveList = background.transform.Find("ObjectiveList").GetComponent <Text>();

        objectiveList.text = node.objectiveList;

        background.transform.Find("Credit Reward Text").GetComponent <Text>().text =
            "Credit reward: " + node.creditReward;

        background.transform.Find("Reputation Reward Text").GetComponent <Text>().text =
            "Reputation reward: " + node.reputationReward;
        // Part reward
        if (node.partReward)
        {
            // Part image:
            PartBlueprint blueprint = ResourceManager.GetAsset <PartBlueprint>(node.partID);
            if (!blueprint)
            {
                Debug.LogWarning("Part reward of Start Task node not found!");
            }
            var partImage = background.transform.Find("Part").GetComponent <Image>();
            partImage.sprite = ResourceManager.GetAsset <Sprite>(blueprint.spriteID);
            partImage.rectTransform.sizeDelta = partImage.sprite.bounds.size * 45;
            partImage.color = Color.green;

            // Ability image:
            if (node.partAbilityID > 0)
            {
                var backgroudBox   = background.transform.Find("backgroundbox");
                var abilityIcon    = backgroudBox.Find("Ability").GetComponent <Image>();
                var tierIcon       = backgroudBox.Find("Tier").GetComponent <Image>();
                var type           = backgroudBox.Find("Type").GetComponent <Text>();
                var abilityTooltip = backgroudBox.GetComponent <AbilityButtonScript>();

                abilityIcon.sprite = AbilityUtilities.GetAbilityImageByID(node.partAbilityID, node.partSecondaryData);
                if (node.partTier >= 1)
                {
                    tierIcon.sprite = ResourceManager.GetAsset <Sprite>("AbilityTier" + Mathf.Clamp(node.partTier, 1, 3));
                }
                else
                {
                    tierIcon.enabled = false;
                }
                type.text = AbilityUtilities.GetAbilityNameByID(node.partAbilityID, null) + (node.partTier > 0 ? " " + node.partTier : "");
                string description = "";
                description += AbilityUtilities.GetAbilityNameByID(node.partAbilityID, null) + (node.partTier > 0 ? " " + node.partTier : "") + "\n";
                description += AbilityUtilities.GetDescriptionByID(node.partAbilityID, node.partTier, null);
                abilityTooltip.abilityInfo = description;
            }
            else
            {
                background.transform.Find("backgroundbox").gameObject.SetActive(false);
            }
        }
        else
        {
            background.transform.Find("Part").GetComponent <Image>().enabled = false;
            background.transform.Find("backgroundbox").gameObject.SetActive(false);
        }

        string[] answers =
        {
            node.declineResponse,
            node.acceptResponse
        };

        // create buttons
        buttons = new GameObject[answers.Length];

        for (int i = 0; i < answers.Length; i++)
        {
            //TODO: createButton()
            int index = i;
            buttons[i] = CreateButton(answers[i], () => {
                if (index == 1)
                {
                    DialogueViewTransitionOut();
                    SectorManager.instance.player.alerter.showMessage("New Task", "clip_victory");
                    endDialogue(index, false);
                }
                else
                {
                    endDialogue(index, true);
                }
            }, 24 + 24 * i);
        }
    }
Beispiel #26
0
    /// <summary>
    /// Generate shell parts in the blueprint, change ship stats accordingly
    /// </summary>
    protected virtual void BuildEntity()
    {
        // all created entities should have blueprints!
        if (!blueprint)
        {
            Debug.LogError(this + " does not have a blueprint! EVERY constructed entity should have one!");
        }

        DestroyOldParts();

        parts.Clear();

        if (blueprint)
        {
            this.dialogue = blueprint.dialogue;
        }

        AttemptAddComponents();
        var coreRenderer = GetComponent <SpriteRenderer>();

        if (blueprint)
        {
            // check if it contains a blueprint (it should)

            if (blueprint.coreSpriteID == "" && blueprint.intendedType == EntityBlueprint.IntendedType.ShellCore)
            {
                Debug.Log(this + "'s blueprint does not contain a core sprite ID!");
                // check if the blueprint does not contain a core sprite ID (it should)
            }

            coreRenderer.sprite = ResourceManager.GetAsset <Sprite>(blueprint.coreSpriteID);
        }
        else
        {
            coreRenderer.sprite = ResourceManager.GetAsset <Sprite>("core1_light");
        }

        var renderer = transform.Find("Minimap Image").GetComponent <SpriteRenderer>();

        if (category == EntityCategory.Station && !(this is Turret))
        {
            if (this as Outpost)
            {
                renderer.sprite = ResourceManager.GetAsset <Sprite>("outpost_minimap_sprite");
            }
            else if (this as Bunker)
            {
                renderer.sprite = ResourceManager.GetAsset <Sprite>("bunker_minimap_sprite");
            }
            else
            {
                renderer.sprite = ResourceManager.GetAsset <Sprite>("minimap_sprite");
            }

            renderer.transform.localScale = new Vector3(3.5F, 3.5F, 3.5F);
        }
        else
        {
            renderer.sprite = ResourceManager.GetAsset <Sprite>("minimap_sprite");
        }


        abilities = new List <Ability>();

        entityName = blueprint.entityName;
        name       = blueprint.entityName;
        GetComponent <Rigidbody2D>().mass = 1; // reset mass

        var drone = this as Drone;

        ResetWeight();

        sortingOrder = 1;
        //For shellcores, create the tractor beam
        // Create shell parts
        SetUpParts(blueprint);

        // Drone shell and core health penalty
        if (drone)
        {
            maxHealth[0] /= 2;
            maxHealth[1] /= 4;
        }

        maxHealth.CopyTo(baseMaxHealth, 0);

        var shellRenderer = transform.Find("Shell Sprite").GetComponent <SpriteRenderer>();

        if (shellRenderer)
        {
            shellRenderer.sortingOrder = ++sortingOrder;
        }
        coreRenderer.sortingOrder = ++sortingOrder;
        UpdateShooterLayering();

        if (this as ShellCore)
        {
            if (!gameObject.GetComponentInChildren <MainBullet>())
            {
                MainBullet mainBullet = gameObject.AddComponent <MainBullet>();
                mainBullet.SetTier(Mathf.Min(3, 1 + CoreUpgraderScript.GetCoreTier(blueprint.coreShellSpriteID)));
                mainBullet.bulletPrefab = ResourceManager.GetAsset <GameObject>("bullet_prefab");
                mainBullet.terrain      = TerrainType.Air;
                mainBullet.SetActive(true);
                abilities.Insert(0, mainBullet);
            }
            else
            {
                MainBullet mainBullet = gameObject.GetComponentInChildren <MainBullet>();
                mainBullet.SetTier(Mathf.Min(3, 1 + CoreUpgraderScript.GetCoreTier(blueprint.coreShellSpriteID)));
                mainBullet.SetDestroyed(false);
                abilities.Insert(0, mainBullet);
            }
        }

        // unique abilities for mini and worker drones here
        if (drone)
        {
            switch (drone.type)
            {
            case DroneType.Mini:
                var     shellObj = transform.Find("Shell Sprite").gameObject;
                Ability ab       = AbilityUtilities.AddAbilityToGameObjectByID(shellObj, 6, null, 1);
                var     shooter  = new GameObject("Shooter");
                shooter.transform.SetParent(shellObj.transform);
                shooter.transform.localPosition = Vector3.zero;
                var shooterSprite = shooter.AddComponent <SpriteRenderer>();
                shooterSprite.sprite       = ResourceManager.GetAsset <Sprite>(AbilityUtilities.GetShooterByID(6));
                shooterSprite.sortingOrder = ++sortingOrder;
                shellObj.GetComponent <ShellPart>().shooter = shooter;
                shellObj.GetComponent <ShellPart>().weapon  = ab as WeaponAbility;
                (ab as WeaponAbility).terrain = TerrainType.Air;
                abilities.Insert(0, ab);
                break;

            default:
                break;
            }
        }

        IsInvisible = false;

        // check to see if the entity is interactible
        if (dialogue && FactionManager.IsAllied(0, faction))
        {
            interactible = true;
        }

        Transform shellSprite = shell.transform;

        if (shellSprite)
        {
            parts.Add(shellSprite.GetComponent <ShellPart>());
        }

        ConnectedTreeCreator();

        maxHealth.CopyTo(currentHealth, 0);
        ActivatePassives(); // activate passive abilities here to avoid race condition BS

        if (OnEntitySpawn != null)
        {
            OnEntitySpawn.Invoke(this);
        }
    }
Beispiel #27
0
    protected ShellPart SetUpPart(EntityBlueprint.PartInfo part)
    {
        var           drone         = this as Drone;
        var           isLightDrone  = drone && drone.type == DroneType.Light; // used for light drone weight reduction
        PartBlueprint partBlueprint = ResourceManager.GetAsset <PartBlueprint>(part.partID);

        GameObject partObject = ShellPart.BuildPart(partBlueprint);
        ShellPart  shellPart  = partObject.GetComponent <ShellPart>();

        shellPart.info = part;
        partObject.transform.SetParent(transform, false);
        partObject.transform.SetAsFirstSibling();

        //Add an ability to the part:

        WeaponAbility ab = AbilityUtilities.AddAbilityToGameObjectByID(partObject, part.abilityID, part.secondaryData, part.tier) as WeaponAbility;

        if (ab)
        {
            // add weapon diversity
            ab.type = DroneUtilities.GetDiversityTypeByEntity(this);
        }

        partObject.transform.localEulerAngles = new Vector3(0, 0, part.rotation);
        partObject.transform.localPosition    = new Vector3(part.location.x, part.location.y, 0);
        SpriteRenderer sr  = partObject.GetComponent <SpriteRenderer>();
        var            tmp = partObject.transform.localScale;

        tmp.x = part.mirrored ? -1 : 1;
        partObject.transform.localScale = tmp;
        sr.sortingOrder = ++sortingOrder;
        var partWeight = isLightDrone ? partBlueprint.mass * 0.6F * weightMultiplier : partBlueprint.mass * weightMultiplier;

        weight       += partWeight;
        maxHealth[0] += partBlueprint.health / 2;
        maxHealth[1] += partBlueprint.health / 4;

        string shooterID = AbilityUtilities.GetShooterByID(part.abilityID, part.secondaryData);

        // Add shooter
        if (shooterID != null)
        {
            var shooter = new GameObject("Shooter");
            shooter.transform.SetParent(partObject.transform);
            shooter.transform.localPosition = Vector3.zero;
            shooter.transform.localRotation = Quaternion.identity;
            var shooterSprite = shooter.AddComponent <SpriteRenderer>();
            shooterSprite.sprite = ResourceManager.GetAsset <Sprite>(shooterID);
            shellPart.shooter    = shooter;
            if (AbilityUtilities.GetAbilityTypeByID(part.abilityID) == AbilityHandler.AbilityTypes.Weapons)
            {
                shellPart.weapon = true;
            }
        }

        var weaponAbility = partObject.GetComponent <WeaponAbility>();

        if (weaponAbility)
        {
            // if the terrain and category wasn't preset set to the enitity's properties

            if (weaponAbility.terrain == TerrainType.Unset)
            {
                weaponAbility.terrain = Terrain;
            }

            if (weaponAbility.category == EntityCategory.Unset)
            {
                weaponAbility.category = category;
            }
        }

        var shellRenderer = transform.Find("Shell Sprite").GetComponent <SpriteRenderer>();

        if (shellRenderer)
        {
            shellRenderer.sortingOrder = ++sortingOrder;
        }

        var coreRenderer = GetComponent <SpriteRenderer>();

        if (coreRenderer)
        {
            coreRenderer.sortingOrder = ++sortingOrder;
        }

        parts.Add(partObject.GetComponent <ShellPart>());
        if (partObject.GetComponent <Ability>())
        {
            abilities.Insert(0, partObject.GetComponent <Ability>());
        }

        // Disable collider if no sprite
        if (!(partObject.GetComponent <SpriteRenderer>() && partObject.GetComponent <SpriteRenderer>().sprite) &&
            partObject.GetComponent <Collider2D>() && !partObject.GetComponent <Harvester>())
        {
            partObject.GetComponent <Collider2D>().enabled = false;
        }

        return(partObject.GetComponent <ShellPart>());
    }
Beispiel #28
0
    public virtual void AssignDisplay(EntityBlueprint blueprint, DroneSpawnData data, int faction = 0)
    {
        this.faction = faction;
        ClearDisplay();
        shell.sprite = ResourceManager.GetAsset <Sprite>(blueprint.coreShellSpriteID);
        if (shell.sprite)
        {
            shell.enabled = true;
            shell.rectTransform.sizeDelta = shell.sprite.bounds.size * 100;
            shell.color = FactionManager.GetFactionColor(faction);
            shell.type  = Image.Type.Sliced;
            shell.rectTransform.pivot = new Vector2(shell.sprite.pivot.x
                                                    / (shell.sprite.bounds.size.x * 100), shell.sprite.pivot.y / (shell.sprite.bounds.size.y * 100));
        }
        else
        {
            shell.enabled = false;
        }

        core.sprite = ResourceManager.GetAsset <Sprite>(blueprint.coreSpriteID);
        if (core.sprite)
        {
            core.enabled = true;
            core.rectTransform.sizeDelta = core.sprite.bounds.size * 100;
            core.type     = Image.Type.Sliced;
            core.material = ResourceManager.GetAsset <Material>("material_color_swap");
            core.color    = FactionManager.GetFactionColor(faction);
            // orient core image so relative center stays the same regardless of shell tier
        }
        else
        {
            core.enabled = false;
        }

        if (data != null && data.type == DroneType.Mini)
        {
            miniDroneShooter.enabled = true;
            miniDroneShooter.sprite  = ResourceManager.GetAsset <Sprite>(AbilityUtilities.GetShooterByID(6));
            miniDroneShooter.color   = FactionManager.GetFactionColor(faction);
            miniDroneShooter.rectTransform.sizeDelta = miniDroneShooter.sprite.bounds.size * 100;
            miniDroneShooter.type = Image.Type.Sliced;
        }
        else if (blueprint.intendedType == EntityBlueprint.IntendedType.Turret ||
                 blueprint.intendedType == EntityBlueprint.IntendedType.Tank || blueprint.intendedType == EntityBlueprint.IntendedType.WeaponStation)
        {
            miniDroneShooter.enabled = true;
            miniDroneShooter.sprite  =
                ResourceManager.GetAsset <Sprite>(AbilityUtilities.GetShooterByID(blueprint.parts[0].abilityID, blueprint.parts[0].secondaryData));
            miniDroneShooter.color = FactionManager.GetFactionColor(faction);
            miniDroneShooter.rectTransform.sizeDelta = miniDroneShooter.sprite.bounds.size * 100;
            miniDroneShooter.type = Image.Type.Sliced;
        }
        else
        {
            miniDroneShooter.enabled = false;
        }

        if (blueprint.intendedType != EntityBlueprint.IntendedType.Turret &&
            blueprint.intendedType != EntityBlueprint.IntendedType.Tank)
        {
            foreach (EntityBlueprint.PartInfo part in blueprint.parts)
            {
                DisplayPart basePart = Instantiate(partPrefab, transform, false).GetComponent <DisplayPart>();
                basePart.UpdateFaction(faction);
                parts.Add(basePart);
                basePart.info = part;
            }
        }
    }
Beispiel #29
0
        public override void NodeGUI()
        {
            GUILayout.BeginHorizontal();
            inputLeft.DisplayLayout();
            outputRight.DisplayLayout();
            GUILayout.EndHorizontal();

            showPopup = RTEditorGUI.Toggle(showPopup, "Show popup:");
            GUILayout.Label("Credit reward:");
            wrapper.creditReward = RTEditorGUI.IntField(wrapper.creditReward, GUILayout.Width(208f));
            GUILayout.Label("Reputation reward:");
            wrapper.reputationReward = RTEditorGUI.IntField(wrapper.reputationReward, GUILayout.Width(208f));
            GUILayout.Label("Shard reward:");
            wrapper.shardReward = RTEditorGUI.IntField(wrapper.shardReward, GUILayout.Width(208f));

            wrapper.partReward = RTEditorGUI.Toggle(wrapper.partReward, "Part reward", GUILayout.Width(200f));
            if (wrapper.partReward)
            {
                height += 320f;
                GUILayout.Label("Part ID:");
                wrapper.partID = GUILayout.TextField(wrapper.partID, GUILayout.Width(200f));
                if (ResourceManager.Instance != null && wrapper.partID != null && (GUI.changed || !init))
                {
                    init = true;
                    PartBlueprint partBlueprint = ResourceManager.GetAsset <PartBlueprint>(wrapper.partID);
                    if (partBlueprint != null)
                    {
                        partTexture = ResourceManager.GetAsset <Sprite>(partBlueprint.spriteID).texture;
                    }
                    else
                    {
                        partTexture = null;
                    }
                }

                if (partTexture != null)
                {
                    GUILayout.Label(partTexture);
                    height += partTexture.height + 8f;
                }
                else
                {
                    NodeEditorGUI.nodeSkin.label.normal.textColor = Color.red;
                    GUILayout.Label("<Part not found>");
                    NodeEditorGUI.nodeSkin.label.normal.textColor = NodeEditorGUI.NE_TextColor;
                }

                wrapper.partAbilityID = RTEditorGUI.IntField("Ability ID", wrapper.partAbilityID, GUILayout.Width(200f));
                string abilityName = AbilityUtilities.GetAbilityNameByID(wrapper.partAbilityID, null);
                if (abilityName != "Name unset")
                {
                    GUILayout.Label("Ability: " + abilityName);
                    height += 24f;
                }

                wrapper.partTier = RTEditorGUI.IntField("Part tier", wrapper.partTier, GUILayout.Width(200f));
                GUILayout.Label("Part Secondary Data:");
                wrapper.partSecondaryData = GUILayout.TextField(wrapper.partSecondaryData, GUILayout.Width(200f));
            }
            else
            {
                height += 160f;
            }
        }