示例#1
0
    public Trap StartPreviewTrap(TrapModel model)
    {
        var trap = SpawnTrap(model, Vector3Int.zero);

        trap.Highlight(true, true);
        return(trap);
    }
    public AbstractTrapBehaviour GetTrapOfType(TrapType trapType)
    {
        var selectedTrapGo = AllTraps.FirstOrDefault(x => x.TrapType == trapType);

        selectedTrapGo.Model = TrapModel.GetTrapModelInfo(trapType);

        return(selectedTrapGo);
    }
    public void SetBulletModelFromTrap(TrapModel trapModel, CreepsBehaviour targetCreepsa)
    {
        Model = new TrapBulletModel(trapModel);

        this.targetCreepsa = targetCreepsa;

        ReadyForBattle = true;
    }
    public TrapBulletModel(TrapModel trapModel)
    {
        MoveSpeed = MoveSpeedFromAttackType(trapModel.AttackType);

        Damage = Random.Range(trapModel.MinDamage, trapModel.MaxDamage + 1);

        AttackType = trapModel.AttackType;
    }
示例#5
0
    public void Init(TrapModel model, Vector3Int position)
    {
        m_model               = model;
        m_nextActivation      = Time.realtimeSinceStartup + m_model.Delay;
        m_activationPositions = new List <Vector2Int>();
        m_blockPositions      = new List <Vector2Int>();

        m_position = new Vector2Int(position.x, position.y);
        m_activationPositions.AddRange(m_model.ActivationPositions(m_position));
        m_blockPositions.AddRange(m_model.BlockPositions(m_position));
    }
示例#6
0
    public Trap SpawnTrap(TrapModel model, Vector3Int position)
    {
        var trapGO = Instantiate(model.gameObject);

        trapGO.transform.SetParent(m_trapContainer);
        trapGO.transform.position = position;
        var modelI = trapGO.GetComponent <TrapModel>();
        var trap   = trapGO.AddComponent <Trap>();

        trap.Init(modelI, position);
        return(trap);
    }
    public static void CopyTrapModel(TrapModel source, TrapModel dest)
    {
        dest.MinDamage           = source.MinDamage;
        dest.MaxDamage           = source.MaxDamage;
        dest.TrapName            = source.TrapName;
        dest.NextUpgradeTrapName = source.NextUpgradeTrapName;
        dest.AttackSpeed         = source.AttackSpeed;
        dest.MoneyCost           = source.MoneyCost;
        dest.NextUpgradeTrap     = source.NextUpgradeTrap;

        dest.AttackType      = source.AttackType;
        dest.AbilityType     = source.AbilityType;
        dest.AbilityCooldown = source.AbilityCooldown;
    }
示例#8
0
    public bool CanSpawnTrapAt(TrapModel model, Vector3Int position)
    {
        var positions     = Helper.ToVector3Int(model.BlockPositions(new Vector2Int(position.x, position.y)));
        var trapPositions = GridInformation.GetAllPositions(TilemapProperty.TrapProperty);

        if (!positions.All((pos) => trapPositions.Contains(pos)))
        {
            return(false);
        }

        List <Vector3Int> allTrapsPositions = new List <Vector3Int>();

        m_traps.ForEach((t) => allTrapsPositions.AddRange(Helper.ToVector3Int(t.BlockPositions)));
        return(!positions.Any((pos) => allTrapsPositions.Contains(pos)));
    }
    public static TrapModel GetTrapModelInfo(TrapType trapType)
    {
        var staticTrap = AllTraps.FirstOrDefault(x => x.TrapName.ToLower() == trapType.ToString().ToLower());

        if (staticTrap == null)
        {
            Debug.LogError("staticTrap == null : " + trapType.ToString());
        }

        var newTrap = new TrapModel();

        CopyTrapModel(staticTrap, newTrap);

        return(newTrap);
    }
    public void CreateNewTrap(TrapType trapType)
    {
        var trapTemplate = trapsManager.GetTrapOfType(trapType);

        var newTrapGo = GameObject.Instantiate(trapTemplate);

        //this.CurrentTrap = newTrapGo;

        newTrapGo.SetTrapPlace(this);

        newTrapGo.Model = TrapModel.GetTrapModelInfo(trapType);

        TrapMenuGUI.StartClosingCurrentGui();

        Debug.Log("Building " + trapType);

        GetComponentInChildren <SpriteRenderer>().gameObject.SetActive(false);

        var particle = GetComponentInChildren <ParticleSystem>(true);

        particle.gameObject.SetActive(true);
        var particleMain = particle.main;

        switch (newTrapGo.Model.AttackType)
        {
        case TrapAttackType.Fear:
            particleMain.startColor = new ParticleSystem.MinMaxGradient(new Color(110f / 255f, 18f / 255f, 223f / 255f));
            break;

        case TrapAttackType.Light:
            particleMain.startColor = new ParticleSystem.MinMaxGradient(new Color(224f / 255f, 248f / 255f, 5f / 255f));
            break;

        case TrapAttackType.Chaos:
            particleMain.startColor = new ParticleSystem.MinMaxGradient(new Color(51f / 255f, 135f / 255f, 44f / 255f));
            break;

        case TrapAttackType.Poison:
            particleMain.startColor = new ParticleSystem.MinMaxGradient(new Color(55f / 255f, 165f / 255f, 165f / 255f));
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
    }
示例#11
0
    public void RequestSpawnAt(TrapModel model, Vector3Int position)
    {
        if (!CanSpawnTrapAt(model, position))
        {
            return;
        }
        if (Souls < model.Souls)
        {
            return;
        }

        var trap = TrapManager.SpawnTrap(model, position);

        trap.OnPurchase();
        if (trap != null)
        {
            m_traps.Add(trap);
        }
    }
    public void CreateNewTrap(TrapType trapType)
    {
        var toCreateTrap = TrapModel.GetTrapModelInfo(trapType);

        Money -= toCreateTrap.MoneyCost;
    }
    public bool CanCreateTrap(TrapType trapType)
    {
        var toCreateTrap = TrapModel.GetTrapModelInfo(trapType);

        return(Money >= toCreateTrap.MoneyCost);
    }
 public void SetText(string trapsInfoText)
 {
     TrapModel.SetTrapModelsFromTextFile(trapsInfoText);
 }
    // TrapName | MinDamage | MaxDamage | AttackSpeed | NextUpgradeTrapName | MoneyCost | AttackType | AbilityType
    private static TrapModel ReadTrapModelFromLine(string line)
    {
        try
        {
            if (string.IsNullOrEmpty(line) || line.IsNullOrWhiteSpace())
            {
                return(null);
            }

            if (line.StartsWith("//"))
            {
                return(null);
            }

            line = line.Replace("\r", "");

            while (line.Contains("\t\t"))
            {
                line = line.Replace("\t\t", "\t");
            }

            var parts = line.Split(new char[] { '|', '\t' });

            var i = 0;

            var prefabName = parts[i++];

            var minDamage = int.Parse(parts[i++]);

            var maxDamage = int.Parse(parts[i++]);

            var attackSpeed = float.Parse(parts[i++]);

            var nextUpgradeName = parts[i++] == "None" ? "" : parts[i - 1];

            var moneyCost = int.Parse(parts[i++]);

            var attackType = ParseAttackType(parts[i++]);

            KeyValuePair <TrapAbilityType, int>?abilityCooldown = null;

            //var sb = new StringBuilder();

            //for (int j = 0; j < parts.Length; j++)
            //{
            //	sb.Append("[" + j + "]");
            //	sb.Append(parts[j]);
            //	sb.Append("   ");
            //}

            //Debug.Log(sb);

            if (parts.Length >= 8)
            {
                abilityCooldown = ParseAbilityTypeWithCooldown(parts[i++]);
            }

            var trap = new TrapModel()
            {
                MinDamage           = minDamage,
                MaxDamage           = maxDamage,
                AttackSpeed         = attackSpeed,
                NextUpgradeTrapName = nextUpgradeName,
                MoneyCost           = moneyCost,
                AttackType          = attackType,
                TrapName            = prefabName,
            };

            if (abilityCooldown.HasValue)
            {
                trap.AbilityType     = abilityCooldown.Value.Key;
                trap.AbilityCooldown = abilityCooldown.Value.Value;
            }

            return(trap);
        }
        catch (Exception e)
        {
            Debug.Log(e.Message.ToString() + " line = " + line);

            return(null);
        }
    }
    static TrapModel()
    {
        return;

        var allTrapsInfo =
            "Fear|1|3|1|Fear2|50|Fear|\n" +
            "Void|1|3|1|Void2|50|Chaos|\n" +
            "Oblivion|1|3|1|Oblivion2|50|Poison|\n" +
            "Envy|1|3|1|Envy2|50|Fear|\n" +
            "Madness|1|3|1|Madness2|50|Light|\n" +
            "Hypocrisy|1|3|1|Hypocrisy2|50|Chaos|\n" +
            "Lust|1|3|1|Lust2|50|Light|\n" +
            "Pride|1|3|1|Pride2|50|Poison|\n" +
            "Fear2|1|3|1|Fear3|50|Fear|Ghost,60\n" +
            "Void2|1|3|1|Void3|50|Chaos|Ghost,60\n" +
            "Oblivion2|1|3|1|Oblivion3|50|Poison|Ghost,60\n" +
            "Envy2|1|3|1|Envy3|50|Fear|\n" +
            "Madness2|1|3|1|Madness3|50|Light|\n" +
            "Hypocrisy2|1|3|1|Hypocrisy3|50|Chaos|Steal,45\n" +
            "Lust2|1|3|1|Lust3|50|Light|Frost,60\n" +
            "Pride2|1|3|1|Pride3|50|Poison|Envenom,60\n" +
            "Fear3|1|3|1|Fear4|50|Fear|Ghost,30\n" +
            "Void3|1|3|1|Void4|50|Chaos|Ghost,30\n" +
            "Oblivion3|1|3|1|Oblivion4|50|Poison|Ghost,30\n" +
            "Envy3|1|3|1|Envy4|50|Fear|\n" +
            "Madness3|1|3|1|Madness4|50|Light|\n" +
            "Hypocrisy3|1|3|1|Hypocrisy4|50|Chaos|Steal,30\n" +
            "Lust3|1|3|1|Lust4|50|Light|Frost,30\n" +
            "Pride3|1|3|1|Pride4|50|Poison|Envenom,40\n" +
            "Fear4|1|3|1||50|Fear|Ghost,15\n" +
            "Void4|1|3|1||50|Chaos|Ghost,15\n" +
            "Oblivion4|1|3|1||50|Poison|Ghost,15\n" +
            "Envy4|1|3|1||50|Fear|\n" +
            "Madness4|1|3|1||50|Light|\n" +
            "Hypocrisy4|1|3|1||50|Chaos|Steal,15\n" +
            "Lust4|1|3|1||50|Light|Frost,15\n" +
            "Pride4|1|3|1||50|Poison|Envenom,20\n";

        AllTraps = new List <TrapModel>();

        // TrapName | MinDamage | MaxDamage | AttackSpeed | NextUpgradeTrapName | MoneyCost | AttackType | AbilityType
        foreach (var line in allTrapsInfo.Split('\n'))
        {
            if (string.IsNullOrEmpty(line))
            {
                continue;
            }

            var part = line.Split('|');

            if (part.Length < 8)
            {
                Debug.LogError("part.Length < 5 : " + part);
                continue;
            }

            var trap = new TrapModel();

            var i = 0;

            trap.TrapName = part[i++];

            trap.MinDamage = int.Parse(part[i++]);
            trap.MaxDamage = int.Parse(part[i++]);

            trap.AttackSpeed = float.Parse(part[i++]);

            trap.NextUpgradeTrapName = part[i++];

            trap.MoneyCost = int.Parse(part[i++]);

            trap.AttackType = ParseAttackType(part[i++]);

            if (string.IsNullOrEmpty(part[i]))
            {
                trap.AbilityType = TrapAbilityType.None;
            }
            else
            {
                var abilityInfo = part[i].Split(',');

                var abilityType = ParseAbilityType(abilityInfo[0]);

                var abilityTime = int.Parse(abilityInfo[1]);

                trap.AbilityType = abilityType;

                trap.AbilityCooldown = abilityTime;
            }

            AllTraps.Add(trap);
        }

        // Задаем апгрейдычи из имен.

        foreach (var trap in AllTraps)
        {
            if (string.IsNullOrEmpty(trap.NextUpgradeTrapName))
            {
                continue;
            }
            var nextTrap = AllTraps.FirstOrDefault(x => x.TrapName == trap.NextUpgradeTrapName);

            if (nextTrap == null)
            {
                Debug.LogError("nextTrap == null : trap.Upgrade = " + trap.NextUpgradeTrapName);
                continue;
            }

            trap.NextUpgradeTrap = nextTrap;
        }
    }