Ejemplo n.º 1
0
        private RustItem CreateItem(string itemId, IItemState state)
        {
            if (!int.TryParse(itemId, out int parsedItemId))
            {
                throw new ArgumentException($"Invalid Item ID: {itemId}", nameof(itemId));
            }

            Item item = ItemManager.CreateByItemID(parsedItemId);

            if (item == null)
            {
                return(null);
            }

            var rustItem = new RustItem(item);

            if (state != null && !(state is NullItemState))
            {
                rustItem.SetItemAmountAsync(state.ItemAmount);
                rustItem.SetItemQualityAsync(state.ItemQuality);
                rustItem.Item.maxCondition = (float)state.ItemDurability;
            }

            return(rustItem);
        }
Ejemplo n.º 2
0
        public Task <IItemDrop> SpawnItemAsync(Vector3 position, string itemId, IItemState state = null)
        {
            async UniTask <IItemDrop> SpawnItemTask()
            {
                ValidateState(state);

                await UniTask.SwitchToMainThread();

                if (!ushort.TryParse(itemId, out var parsedItemId))
                {
                    throw new ArgumentException($"Invalid Item ID: {itemId}", nameof(itemId));
                }

                var item = CreateItem(parsedItemId, state);

                if (item == null)
                {
                    return(null);
                }

                var droppedItem = DropItem(item, position);

                if (droppedItem.drop == null)
                {
                    return(null);
                }

                return(new UnturnedItemDrop(droppedItem.region, droppedItem.drop));
            }

            return(SpawnItemTask().AsTask());
        }
Ejemplo n.º 3
0
 public static Task <IItemDrop> SpawnItemAsync(this IItemSpawner spawner,
                                               Vector3 position,
                                               IItemAsset asset,
                                               [CanBeNull] IItemState state = null)
 {
     return(spawner.SpawnItemAsync(position, asset.ItemAssetId, state));
 }
Ejemplo n.º 4
0
 public static Task <IInventoryItem> GiveItemAsync(this IItemSpawner spawner,
                                                   IInventory inventory,
                                                   IItemAsset asset,
                                                   [CanBeNull] IItemState state = null)
 {
     return(spawner.GiveItemAsync(inventory, asset.ItemAssetId, state));
 }
Ejemplo n.º 5
0
 public FireFlower(
     IWorld world,
     Point location,
     IListener <IGameObject> listener,
     IListener <ISoundable> soundListener,
     bool isUnveil = false) : base(
         world,
         location,
         listener,
         new Point(32, 32))
 {
     soundListener.Subscribe(this);
     SoundEventArgs = new SoundArgs();
     SoundEventArgs.SetMethodCalled();
     collected = false;
     if (isUnveil)
     {
         state = new Unveil(this);
         UpdateSprite();
     }
     else
     {
         state = new Normal(this);
         UpdateSprite();
     }
 }
Ejemplo n.º 6
0
 public override void Enter(IItemState state)
 {
     NextState = state;
     if (NextState is RevealItemState && Item is CoinEntity)
     {
         Item.Dead = true;
     }
 }
Ejemplo n.º 7
0
 public override void Enter(IItemState state)
 {
     if (Item.Mario.SpritePosition.X > Item.SpritePosition.X)
     {
         Item.SpriteVelocity = new Vector2(-1, 1);
     }
     else
     {
         Item.SpriteVelocity = new Vector2(1, 1);
     }
 }
Ejemplo n.º 8
0
        public DKPlayerBarrel()
        {
            state = new DKPlayerBarrelIdleState(this);
            BodyDefinition bodyDef = new BodyDefinition()
            {
                BottomCenter = new Vector2(725, 150), Dimensions = sprite.Dimensions, Type = BodyType.Kinematic
            };
            Filter filter = new Filter();

            filter.Category = (byte)Filter.Categories.Collectible;
            filter.Mask     = (byte)Filter.Categories.Player;
            bodyDef.Filter  = filter;
            body            = PhysicsWorld.Instance.CreateBody(bodyDef);
            body.UserData   = this;
        }
Ejemplo n.º 9
0
        public DKThrownBarrel()
        {
            state = new DKThrownBarrelRollState(this);
            BodyDefinition bodyDef = new BodyDefinition()
            {
                BottomCenter = new Vector2(575, 150), Type = BodyType.Dynamic, Dimensions = sprite.Dimensions
            };
            Filter filter = new Filter();

            filter.Category = (byte)Filter.Categories.Throwable;
            filter.Mask     = (byte)Filter.Categories.Enemy + (byte)Filter.Categories.Projectile + (byte)Filter.Categories.LevelBlock;
            bodyDef.Filter  = filter;
            bodyDef.Mass    = 1;
            body            = PhysicsWorld.Instance.CreateBody(bodyDef);
            body.UserData   = this;
        }
Ejemplo n.º 10
0
        public DKExitSign()
        {
            sprite = ItemSpriteFactory.Instance.CreateDKBalloonSprite();
            state  = new DKExitSignIdleState(this);
            BodyDefinition bodyDef = new BodyDefinition()
            {
                BottomCenter = new Vector2(150, 150), Dimensions = sprite.Dimensions
            };
            Filter filter = new Filter();

            filter.Category = (byte)Filter.Categories.Collectible;
            filter.Mask     = (byte)Filter.Categories.Player;
            bodyDef.Filter  = filter;
            body            = PhysicsWorld.Instance.CreateBody(bodyDef);
            body.UserData   = this;
        }
Ejemplo n.º 11
0
        public DKRambiCrate()
        {
            state = new DKRambiCrateIdleState(this);
            Vector2 rambiBB = new Vector2(41, 40);
            //For sprint 3 Rambi crate bounding box is based on open crate, causes collisions outside its sprite.
            BodyDefinition bodyDef = new BodyDefinition()
            {
                BottomCenter = new Vector2(650, 150), Dimensions = rambiBB
            };
            Filter filter = new Filter();

            filter.Category = (byte)Filter.Categories.Interactive;
            filter.Mask     = (byte)Filter.Categories.Player;
            bodyDef.Filter  = filter;
            body            = PhysicsWorld.Instance.CreateBody(bodyDef);
            body.UserData   = this;
        }
Ejemplo n.º 12
0
        public Rambi()
        {
            sprite = ItemSpriteFactory.Instance.CreateDKRambiIdleSprite();
            state  = new RambiIdleState(this);
            BodyDefinition bodyDef = new BodyDefinition()
            {
                BottomCenter = new Vector2(150, 150), Dimensions = sprite.Dimensions
            };
            Filter filter = new Filter();

            filter.Category = (byte)Filter.Categories.Interactive;
            filter.Mask     = (byte)Filter.Categories.Player;
            bodyDef.Filter  = filter;
            body            = PhysicsWorld.Instance.CreateBody(bodyDef);
            //body.Dimensions = sprite.Dimensions;
            body.UserData = this;
        }
Ejemplo n.º 13
0
        // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local
        private void ValidateState(IItemState state)
        {
            if (state is NullItemState)
            {
                return;
            }

            if (state != null && state.ItemAmount < 1)
            {
                throw new ArgumentException($"Item amount can not be less than 1", nameof(state));
            }

            if (state != null && state.ItemAmount > byte.MaxValue)
            {
                throw new ArgumentException($"Item amount can not be more than {byte.MaxValue}", nameof(state));
            }
        }
Ejemplo n.º 14
0
        public Task <IItemDrop> SpawnItemAsync(Vector3 position, string itemId, IItemState state = null)
        {
            ValidateState(state);

            async UniTask <IItemDrop> SpawnItemTask()
            {
                await UniTask.SwitchToMainThread();

                RustItem item = CreateItem(itemId, state);

                var droppedItem = item.Item
                                  .Drop(position.ToUnityVector(), UnityVector3.zero, UnityQuaternion.identity) as DroppedItem;

                return(droppedItem == null ? null : new RustItemDrop(droppedItem));
            }

            return(SpawnItemTask().AsTask());
        }
Ejemplo n.º 15
0
        private Item CreateItem(ushort id, IItemState state)
        {
            var itemAsset = (ItemAsset)Assets.find(EAssetType.ITEM, id);

            if (itemAsset == null || itemAsset.isPro)
            {
                return(null);
            }

            Item item = new Item(itemAsset.id, EItemOrigin.WORLD);

            if (state != null && !(state is NullItemState))
            {
                item.state      = state.StateData ?? itemAsset.getState(EItemOrigin.WORLD); /* item.state must not be null */
                item.amount     = (byte)state.ItemAmount;
                item.quality    = (byte)state.ItemQuality;
                item.durability = (byte)state.ItemDurability;
            }

            return(item);
        }
Ejemplo n.º 16
0
        public override void Enter(IItemState state)
        {
            Vector2 RightVelocity = new Vector2(1, 1);
            Vector2 LeftVelocity  = new Vector2(-1, 1);

            if (Item is RedMushroomEntity)
            {
                if (Item.Mario.SpritePosition.X > Item.SpritePosition.X)
                {
                    Item.SpriteVelocity = RightVelocity;
                }
                else
                {
                    Item.SpriteVelocity = LeftVelocity;
                }
            }
            else
            {
                if (Item.Mario.SpritePosition.X > Item.SpritePosition.X)
                {
                    Item.SpriteVelocity = LeftVelocity;
                }
                else
                {
                    Item.SpriteVelocity = RightVelocity;
                }
            }
            //if (Item is RedMushroomEntity)
            //{

            //}
            //else if (Item is GreenMushroomEntity)
            //{

            //}
        }
Ejemplo n.º 17
0
 public SuperMushroom(
     IWorld world,
     Point location,
     IListener <IGameObject> listener,
     IListener <ISoundable> soundListener,
     bool isUnveil = false) : base(world, location, listener, new Point(32, 32), 32)
 {
     collected          = false;
     this.listener      = listener;
     this.soundListener = soundListener;
     soundListener.Subscribe(this);
     SoundEventArgs = new SoundArgs();
     SoundEventArgs.SetMethodCalled();
     if (isUnveil)
     {
         state = new Unveil(this);
         UpdateSprite();
     }
     else
     {
         state = new SuperMushroomStates.Normal(this);
         UpdateSprite();
     }
 }
Ejemplo n.º 18
0
 public Coin(
     IWorld world,
     Point location,
     IListener <IGameObject> listener,
     IListener <ISoundable> soundListener,
     bool isUnveil = false) : base(world, location, null, new Point(32, 32))
 {
     listener.Subscribe(this);
     soundListener.Subscribe(this);
     collected = false;
     //eventually if coin needs to pass info put it in eventinfo
     coinEventInfo  = EventArgs.Empty;
     SoundEventArgs = new SoundArgs();
     if (isUnveil)
     {
         state = new Unveil(this);
         UpdateSprite();
     }
     else
     {
         state = new Normal(this);
         UpdateSprite();
     }
 }
Ejemplo n.º 19
0
 public void ChangeItemState(IItemState newState)
 {
     CurrentItemState = newState;
 }
Ejemplo n.º 20
0
 public override void Enter(IItemState state)
 {
     Item.SpriteVelocity = new Vector2(0, -1);
     NextState           = state.NextState;
 }
Ejemplo n.º 21
0
        public Task <IInventoryItem> GiveItemAsync(IInventory inventory, string itemId, IItemState state = null)
        {
            ValidateState(state);

            async UniTask <IInventoryItem> GiveItemTask()
            {
                await UniTask.SwitchToMainThread();

                if (inventory is RustPlayerInventory playerInventory)
                {
                    RustItem item = CreateItem(itemId, state);

                    playerInventory.GiveItem(item.Item);
                    return(new RustInventoryItem(item));
                }

                throw new NotSupportedException($"Inventory type not supported: {inventory.GetType().FullName}");
            }

            return(GiveItemTask().AsTask());
        }
Ejemplo n.º 22
0
        public Task <IInventoryItem> GiveItemAsync(IInventory inventory, string itemId, IItemState state = null)
        {
            async UniTask <IInventoryItem> GiveItemTask()
            {
                ValidateState(state);

                await UniTask.SwitchToMainThread();

                if (!ushort.TryParse(itemId, out var parsedItemId))
                {
                    throw new ArgumentException($"Invalid Item ID: {itemId}", nameof(itemId));
                }

                if (inventory is UnturnedPlayerInventory playerInventory)
                {
                    var item = CreateItem(parsedItemId, state);
                    if (item == null)
                    {
                        return(null);
                    }

                    if (!TryAddItem(item, playerInventory, out var itemJar))
                    {
                        var(drop, _) = DropItem(item, playerInventory.Player.transform.position.ToSystemVector());
                        itemJar      = drop.interactableItem.jar;
                    }

                    playerInventory.Inventory.forceAddItem(item, auto: true, playEffect: true);
                    return(new UnturnedInventoryItem(itemJar, new UnturnedItem(item)));
                }

                throw new NotSupportedException($"Inventory type not supported: {inventory.GetType().FullName}");
            }

            return(GiveItemTask().AsTask());
        }
Ejemplo n.º 23
0
 public FlagPole(Vector2 pos)
 {
     position     = pos;
     state        = new StandingFlagPoleState(this);
     flagFallTime = ConstantNumber.FLAG_FALLING_TIME;
 }
Ejemplo n.º 24
0
 public virtual void Enter(IItemState state)
 {
 }