Пример #1
0
        public void addSeed(SeedItem seed)
        {
            if (seed.GetCount() > 0 && plantedSeed == null)
            {
                switch (seed.GetName())
                {
                case "corn":
                    plantedSeed = new Corn(content, Position, this, game);
                    seed.Plant();
                    break;

                case "lettuce":
                    plantedSeed = new Lettuce(content, Position, this, game);
                    seed.Plant();
                    break;

                case "wheat":
                    plantedSeed = new Wheat(content, Position, this, game);
                    seed.Plant();
                    break;

                default:
                    break;
                }
            }
        }
        public override void BlockInteraction(Vector3i pos, Quaternion rot, VehicleComponent vehicle, Inventory inv = null)
        {
            if (inv == null)
            {
                return;
            }
            foreach (var offset in area)
            {
                SeedItem seed       = inv.GroupedStacks.Where(x => x.Item is SeedItem).First().Item as SeedItem;
                var      targetPos  = (rot.RotateVector(offset) + pos).XYZi;
                Result   authResult = AuthManager.IsAuthorized(targetPos, vehicle.Driver.User);
                if (authResult.Success)
                {
                    if (World.GetBlock(targetPos + Vector3i.Down).Is <Tilled>() && World.GetBlock(targetPos).Is <Empty>())
                    {
                        var changes = new InventoryChangeSet(inv, vehicle.Driver.User);
                        changes.RemoveItem(seed.Type);
                        IAtomicAction plantAction = PlayerActions.Plant.CreateAtomicAction(vehicle.Driver, targetPos, seed.Species);

                        if (new MultiAtomicAction(changes, plantAction).TryApply())
                        {
                            var plant = EcoSim.PlantSim.SpawnPlant(seed.Species, targetPos);
                            plant.Tended = true;
                        }
                    }
                }
            }
        }
Пример #3
0
 void MouseMethod()
 {
     if (Mouse.GetState().RightButton == ButtonState.Pressed && selectedSeed != null)
     {
         selectedSeed.Select(false);
         selectedSeed = null;
     }
 }
Пример #4
0
 public void Clear(bool recycle = false)
 {
     nameText.text = string.Empty;
     Seed          = null;
     if (recycle)
     {
         ObjectPool.Put(gameObject);
     }
 }
Пример #5
0
    private void OnSeedUse(SeedItem seed)
    {
        if (selected.plant != null || !selected.isWatered || !selected.isTilled)
        {
            return;
        }

        DrawProgressBar(selected);
        selected.plant = seed.plant;

        EventManager.instance.OnConsumeItem(seed);
    }
        // TODO: create atomic actions covering the case and utilize them.
        public override void BlockInteraction(Vector3i pos, Quaternion rot, VehicleComponent vehicle, Inventory inv = null)
        {
            if (inv == null)
            {
                return;
            }

            if (!this.enabled)
            {
                return;
            }

            foreach (var offset in area)
            {
                var stack = inv.GroupedStacks.Where(x => x.Item is SeedItem).FirstOrDefault();
                if (stack == null)
                {
                    return;
                }
                SeedItem seed       = stack.Item as SeedItem;
                var      targetPos  = (rot.RotateVector(offset) + pos).XYZi;
                Result   authResult = ServiceHolder <IAuthManager> .Obj.IsAuthorized(targetPos, vehicle.Driver.User, AccessType.ConsumerAccess, null);

                if (authResult.Success)
                {
                    if (World.GetBlock(targetPos + Vector3i.Down).Is <Tilled>() && World.GetBlock(targetPos).Is <Empty>())
                    {
                        var pack = new GameActionPack();
                        pack.AddGameAction(new PlantSeeds()
                        {
                            Species        = seed.Species.GetType(),
                            ActionLocation = targetPos,
                            Citizen        = vehicle.Driver.User,
                            ToolUsed       = this
                        });

                        var changes = new InventoryChangeSet(inv, vehicle.Driver.User);
                        changes.RemoveItem(seed.Type);
                        pack.AddChangeSet(changes);

                        if (pack.TryPerform())
                        {
                            var plant = EcoSim.PlantSim.SpawnPlant(seed.Species, targetPos);
                            plant.Tended = true;
                        }
                    }
                }
            }
        }
Пример #7
0
    public void ShowDescription(SeedItem seed)
    {
        if (!seed)
        {
            HideDescription();
            return;
        }

        descriptionWindow.alpha = 1;
        nameText.text           = seed.Crop.Name;
        int amount = BackpackManager.Instance.GetAmount(seed);

        icon.SetItem(seed, amount > 0 ? amount.ToString() : null);
        StringBuilder str = new StringBuilder("占用田地空间:");

        str.Append(seed.Crop.Size);
        str.Append("\n");
        str.Append(CropInformation.CropSeasonString(seed.Crop.PlantSeason));
        str.Append("\n");
        str.Append("生长阶段:");
        str.Append("\n");
        for (int i = 0; i < seed.Crop.Stages.Count; i++)
        {
            CropStage stage = seed.Crop.Stages[i];
            str.Append(ZetanUtility.ColorText(CropStage.CropStageName(stage.Stage), Color.yellow));
            str.Append("持续");
            str.Append(ZetanUtility.ColorText(stage.LastingDays.ToString(), Color.green));
            str.Append("天");
            if (stage.HarvestAble)
            {
                if (stage.RepeatTimes > 0)
                {
                    str.Append(",可收割");
                    str.Append(ZetanUtility.ColorText(stage.RepeatTimes.ToString(), Color.green));
                    str.Append("次");
                }
                else if (stage.RepeatTimes < 0)
                {
                    str.Append(",可无限收割");
                }
            }
            if (i != seed.Crop.Stages.Count - 1)
            {
                str.Append("\n");
            }
        }
        description.text = str.ToString();
    }
Пример #8
0
        void PrepareSeed()
        {
            foreach (SeedItem seeds in inventory.seeds)
            {
                if (seeds.IsSelected() == false)
                {
                    this.selectedSeed = null;
                }
            }

            foreach (SeedItem seeds in inventory.seeds)
            {
                if (seeds.IsSelected() && (seeds.GetCount() > 0))
                {
                    this.selectedSeed = seeds;
                }
            }
        }
Пример #9
0
        public void CreateInvList()
        {
            SeedItem wheatSeed   = new SeedItem(_content.Load <Texture2D>("seeds_wheat"), new Vector2(-100, -100), 100, 0, "wheat");
            SeedItem lettuceSeed = new SeedItem(_content.Load <Texture2D>("seeds_lettuce"), new Vector2(-100, -100), 50, 0, "lettuce");
            SeedItem cornSeed    = new SeedItem(_content.Load <Texture2D>("seeds_corn"), new Vector2(-100, -100), 5, 0, "corn");

            this.invList.Add(wheatSeed);
            this.invList.Add(lettuceSeed);
            this.invList.Add(cornSeed);

            LivestockItem cowItem     = new LivestockItem(_content.Load <Texture2D>("cow"), new Vector2(-100, -100), 750, 0, "cow");
            LivestockItem chickenItem = new LivestockItem(_content.Load <Texture2D>("chicken"), new Vector2(-100, -100), 300, 0, "chicken");

            this.invList.Add(cowItem);
            this.invList.Add(chickenItem);

            TileItem tileItem = new TileItem(_content.Load <Texture2D>("Sprites/land"), new Vector2(), 10000, 0, "farmslot");

            this.invList.Add(tileItem);
        }
Пример #10
0
        public InventorySlot(ContentManager content, Vector2 position, SeedItem seeditem, float scale) : base(seeditem.GetTexture(), position, 1)
        {
            this.Position = position;
            this.seeditem = seeditem;
            this.scale    = scale;
            this.isSeed   = true;
            Texture2D buttonTexture = content.Load <Texture2D>("Button");

            slotTexture    = content.Load <Texture2D>("ItemSlot");
            font           = content.Load <SpriteFont>("defaultFont");
            itemCount      = content.Load <Texture2D>("itemCount");
            this.buttonSfx = content.Load <SoundEffect>("Sound/selectionClick");
            var buttonFont = content.Load <SpriteFont>("defaultFont");

            selectButton = new Button(buttonTexture, buttonFont, this.Position + new Vector2(-30, 120), 1)
            {
                Text = "select",
            };
            selectButton.Click += SelectButton_Click;
        }
Пример #11
0
        void CreateInventory()
        {
            CropItem wheatItem   = new CropItem(wheatSprite, new Vector2(-100, -100), 600, 0, "wheat", 600);
            SeedItem wheatSeed   = new SeedItem(wheatSeedSprite, new Vector2(-100, -100), 100, 0, "wheat");
            CropItem lettuceItem = new CropItem(lettuceSprite, new Vector2(-100, -100), 250, 0, "lettuce", 250);
            SeedItem lettuceSeed = new SeedItem(lettuceSeedSprite, new Vector2(-100, -100), 50, 0, "lettuce");
            CropItem cornItem    = new CropItem(cornSprite, new Vector2(-100, -100), 75, 0, "corn", 50);
            SeedItem cornSeed    = new SeedItem(cornSeedSprite, new Vector2(-100, -100), 5, 0, "corn");
            MeatItem cowItem     = new MeatItem(cowSprite, new Vector2(-100, -100), 750, 0, "cow", 1150);
            MeatItem chickenItem = new MeatItem(chickenSprite, new Vector2(-100, -100), 300, 0, "chicken", 650);

            Inventory.Add(wheatItem);
            Inventory.Add(lettuceItem);
            Inventory.Add(cornItem);
            Inventory.Add(cowItem);
            Inventory.Add(chickenItem);
            seeds.Add(wheatSeed);
            seeds.Add(lettuceSeed);
            seeds.Add(cornSeed);
        }
Пример #12
0
    void InitScrollView()
    {
        list = GameTableManager.Instance.GetTableList <SeedAndCubDataBase>();
        if (list != null)
        {
            if (this.m_entityType == EntityType.EntityType_Plant)//Ö²Îï
            {
                list = list.FindAll((x) => { return(x.type == 0); });
            }

            if (this.m_entityType == EntityType.EntityType_Animal)
            {
                list = list.FindAll((x) => { return(x.type == 1); });//¶¯ÎïÓ×áÌ
            }

            foreach (var db in list)
            {
                Transform itemTrans = m_grid_seedgrid.transform.Find(db.itemID.ToString());
                if (itemTrans == null)
                {
                    GameObject seedItem = NGUITools.AddChild(m_grid_seedgrid.gameObject, m_sprite_SeedItem.gameObject);
                    if (seedItem != null)
                    {
                        seedItem.name = db.itemID.ToString();
                        itemTrans     = seedItem.transform;
                    }
                }
                itemTrans.gameObject.SetActive(true);
                SeedItem seed = itemTrans.GetComponent <SeedItem>();
                if (seed == null)
                {
                    seed = itemTrans.gameObject.AddComponent <SeedItem>();
                }
                if (seed != null)
                {
                    seed.InitSeedItem(db);
                }
            }
        }
    }
Пример #13
0
 public void OnSeedUse(SeedItem seed)
 {
     SeedUse?.Invoke(seed);
 }
Пример #14
0
 public void Init(SeedItem seed)
 {
     Seed          = seed;
     nameText.text = Seed.name;
 }
Пример #15
0
 public void ShowDescription(SeedItem seed)
 {
 }
Пример #16
0
        private void GenerateSeedSlot(Vector2 position, SeedItem item)
        {
            InventorySlot newSlot = new InventorySlot(_content, position, item, 1f);

            components.Add(newSlot);
        }
Пример #17
0
    public void LootSeed(Vector3 pos, Plant.Type type, float chance)
    {
        if (type == Plant.Type.None || type == Plant.Type.Withered || chance <= 0F)
        {
            return;
        }

        float p = 0F, r = 0F;

        if (type == Plant.Type.Aquabud)
        {
            r = 0.015F * (lootCnt[Plant.Type.Aquabud] - 15);
            r = Mathf.Clamp(r, 0F, 0.6F);
            if (Random.Range(0F, 1F) <= r)
            {
                type = Random.Range(0F, 2F) < 1F ? Plant.Type.Turret : Plant.Type.Bubble;
            }
        }
        if (type == Plant.Type.Goji)
        {
            r = 1 - Mathf.Pow(0.7F, lootCnt[Plant.Type.Goji]);
            if (lootCnt[Plant.Type.Goji] >= 5)
            {
                r = 1;
            }
            if (Random.Range(0F, 1F) <= r)
            {
                p = Random.Range(0F, 3F);
                if (p < 1F)
                {
                    type = Plant.Type.Dragonfruit;
                }
                else if (p < 2F)
                {
                    type = Plant.Type.Jujube;
                }
                else
                {
                    type = Plant.Type.Persimmon;
                }
            }
        }
        if (type == Plant.Type.Mulberry)
        {
            r = 1 - Mathf.Pow(0.7F, lootCnt[Plant.Type.Mulberry]);
            if (lootCnt[Plant.Type.Mulberry] >= 5)
            {
                r = 1;
            }
            if (Random.Range(0F, 1F) <= r)
            {
                p = Random.Range(0F, 3F);
                if (p < 1F)
                {
                    type = Plant.Type.Lychee;
                }
                else if (p < 2F)
                {
                    type = Plant.Type.Cyanberry;
                }
                else
                {
                    type = Plant.Type.Mango;
                }
            }
        }
        if (type == Plant.Type.Wisplum)
        {
            r = 1 - Mathf.Pow(0.6F, lootCnt[Plant.Type.Wisplum]);
            if (lootCnt[Plant.Type.Wisplum] >= 3)
            {
                r = 1;
            }
            if (Random.Range(0F, 1F) <= r)
            {
                type = Random.Range(0F, 2F) < 1F ? Plant.Type.Lime : Plant.Type.Cloudberry;
            }
        }

        lootChanceMultiplier[type] += chance * basicLootChance[type];

        float rand = Random.Range(0F, 1F);

        if (rand <= lootChanceMultiplier[type] * chance)
        {
            SeedItem.Generate(pos, type);
            lootChanceMultiplier[type] = 1F;
            lootCnt[type]++;
        }
    }