Exemple #1
0
        public void OnChangedWithType(Chunk chunk, BlockChangeRequestOrigin origin, Vector3Int blockPosition, ItemTypes.ItemType typeOld, ItemTypes.ItemType typeNew)
        {
            if (Types.ContainsByReference(typeOld, out int idxOld))
            {
                if (Positions.TryRemove(blockPosition, out CivCrate instance))
                {
                    chunk.GetEntities()?.Remove(blockPosition);
                }
            }

            if (Types.ContainsByReference(typeNew, out int idxNew))
            {
                Colony colony = null;
                switch (origin.Type)
                {
                case BlockChangeRequestOrigin.EType.Colony:
                    colony = origin.AsColony;
                    break;

                case BlockChangeRequestOrigin.EType.Player:
                    Players.Player play = origin.AsPlayer;
                    colony = play.ActiveColony;
                    break;
                }

                CivCrate crate = new CivCrate(colony);
                if (chunk.GetOrAllocateEntities().Add(blockPosition, crate))
                {
                    Positions.TryAdd(blockPosition, crate);
                }
            }
        }
Exemple #2
0
 void IChangedWithType.OnChangedWithType(Chunk chunk, BlockChangeRequestOrigin requestOrigin, Vector3Int blockPosition, ItemTypes.ItemType typeOld, ItemTypes.ItemType typeNew)
 {
     if (typeNew == BuiltinBlocks.Types.water && ServerManager.ServerSettings.Water.MaxUpdatesPerTick > 0)
     {
         locationsToCheck.AddIfUnique(blockPosition, val: true);
     }
 }
Exemple #3
0
        public virtual void OnChangedWithType(Chunk chunk, BlockChangeRequestOrigin origin, Vector3Int blockPosition, ItemTypes.ItemType typeOld, ItemTypes.ItemType typeNew)
        {
            //OnRemove
            if (typeNew == BlockTypes.BuiltinBlocks.Types.air)
            {
                SignManager.signs.Remove(blockPosition);

                //Remove the marker
                foreach (var mapNPlayer in Players.PlayerDatabase.Where(pl => pl.Value.ConnectionState == Players.EConnectionState.Connected).ToList())
                {
                    Players.Player player = mapNPlayer.Value;
                    if (Math.ManhattanDistance(new Vector3Int(player.Position), blockPosition) <= SignManager.markerDistance)
                    {
                        UIManager.RemoveMarker("Khanx.Sign" + blockPosition + player.Name, player);
                    }
                }
            }

            //OnAdd
            if (typeOld == BlockTypes.BuiltinBlocks.Types.air)
            {
                if (SignManager.signs.ContainsKey(blockPosition))
                {
                    return;
                }

                if (origin.Type == BlockChangeRequestOrigin.EType.Player)
                {
                    SignManager.signs.Add(blockPosition, new Sign(origin.AsPlayer.ID, "-"));
                }
                else
                {
                    SignManager.signs.Add(blockPosition, new Sign(new NetworkID(), "-"));
                }
            }
        }