Esempio n. 1
0
    public Chip GetNewBomb(int2 coord, string powerup, Vector3 position, int id)
    {
        MatchThree.ChipInfo p = MatchThree.main.chipInfos.Find(pu => pu.name == powerup);
        if (p == null)
        {
            return(null);
        }
        id = Mathf.Clamp(id, 0, Chip.colors.Length);
        GameObject o = ContentAssistant.main.GetItem(p.contentName + (p.color ? Chip.chipTypes[id] : ""));

        o.transform.position = position;
        o.name = p.contentName + (p.color ? Chip.chipTypes[id] : "");
        if (Slot.GetSlot(coord).chip)
        {
            o.transform.position = Slot.GetSlot(coord).chip.transform.position;
        }
        Chip chip = o.GetComponent <Chip>();

        Slot.GetSlot(coord).chip = chip;
        return(chip);
    }
Esempio n. 2
0
    public IEnumerator  CreateField()
    {
        RemoveField();

        field = new Field(LevelProfile.main.GetClone());

        Slot.folder      = new GameObject().transform;
        Slot.folder.name = "Slots";


        Slot.all.Clear();

        Vector3 fieldDimensions = new Vector3(field.width - 1, field.height - 1, 0) * ProjectParameters.main.slot_offset;

        foreach (SlotSettings settings in field.slots.Values)
        {
            yield return(0);

            Slot slot;

            #region Creating a new empty slot
            Vector3    position = new Vector3(settings.position.x, settings.position.y, 0) * ProjectParameters.main.slot_offset - fieldDimensions / 2;
            GameObject obj      = ContentAssistant.main.GetItem("SlotEmpty", position);
            obj.name = "Slot_" + settings.position.x + "x" + settings.position.y;
            obj.transform.SetParent(Slot.folder);
            slot       = obj.GetComponent <Slot>();
            slot.coord = settings.position;
            Slot.all.Add(slot.coord, slot);
            #endregion

            #region Creating a generator
            if (settings.generator)
            {
                slot.gameObject.AddComponent <SlotGenerator>();
            }
            #endregion

            #region Creating a block
            if (settings.block_type != "")
            {
                GameObject b_obj = ContentAssistant.main.GetItem(settings.block_type);
                b_obj.transform.SetParent(slot.transform);
                b_obj.transform.localPosition = Vector3.zero;
                b_obj.name = settings.block_type + "_" + settings.position.x + "x" + settings.position.y;
                IBlock block = b_obj.GetComponent <IBlock>();
                slot.block  = block;
                block.slot  = slot;
                block.level = settings.block_level;
                block.Initialize();
            }
            #endregion

            #region Create a chip
            if (!string.IsNullOrEmpty(settings.chip) && (slot.block == null || slot.block.CanItContainChip()))
            {
                MatchThree.ChipInfo chipInfo = MatchThree.main.chipInfos.Find(x => x.name == settings.chip);
                if (chipInfo != null)
                {
                    string     key   = chipInfo.contentName + (chipInfo.color ? Chip.chipTypes[Mathf.Clamp(settings.color_id, 0, Chip.colors.Length - 1)] : "");
                    GameObject c_obj = ContentAssistant.main.GetItem(key);
                    c_obj.transform.SetParent(slot.transform);
                    c_obj.transform.localPosition = Vector3.zero;
                    c_obj.name = key;
                    slot.chip  = c_obj.GetComponent <Chip>();
                }
            }
            #endregion
        }

        Slot.Initialize();

        List <Pair <int2> > outlines = new List <Pair <int2> >();
        foreach (Slot slot in Slot.all.Values)
        {
            foreach (Side side in Utils.straightSides)
            {
                if (slot[side] != null)
                {
                    continue;
                }

                Pair <int2> pair = new Pair <int2>(slot.coord, slot.coord + Utils.SideOffset(side));
                if (outlines.Contains(pair))
                {
                    continue;
                }

                yield return(0);

                #region Create a outline object
                Vector3 position = new Vector3(Utils.SideOffsetX(side), Utils.SideOffsetY(side), 0) * 0.353f;

                GameObject ol_obj = ContentAssistant.main.GetItem("Outline");
                ol_obj.transform.SetParent(slot.transform);
                ol_obj.transform.localPosition = position;
                ol_obj.name = "Outline_" + side;
                if (Utils.SideOffsetY(side) != 0)
                {
                    ol_obj.transform.Rotate(0, 0, 90);
                }

                outlines.Add(pair);
                #endregion
            }
        }

        SlotGravity.Reshading();

        yield return(0);
    }