Beispiel #1
0
        public override void Update(Timestep timestep, EntityUniverseFacade universe)
        {
            Tile tile;

            if (!universe.ReadTile(Location, TileAccessFlags.None, out tile))
            {
                return;
            }
            if ((tile.Configuration != _configuration) || (_variant != tile.Variant()) || (Component == null))
            {
                _done = true;
                if (tile.Configuration == _configuration)
                {
                    universe.RemoveTile(Entity, Location, TileAccessFlags.None);
                }
            }
            if (!_ballSpawned && RoundStartedTimestep + 6 * Constants.TimestepsPerSecond < timestep)
            {
                ResetBall(universe);
            }
            CheckIfEntityExists();
        }
        /// <summary>
        /// Update
        /// </summary>
        /// <param name="timestep"></param>
        /// <param name="universe"></param>
        public override void Update(Timestep timestep, EntityUniverseFacade universe)
        {
            // Following check is taken from Daemons mod
            // Don't let this logic do anything if tile does not exist. Might be accessed after removal of tile.
            if (!universe.ReadTile(Location, TileAccessFlags.None, out Tile tile))
            {
                return;
            }

            // Following check is taken from Daemons mod
            // If the tile/variant has changed, or it doesn't have a Sprinkler Component set this logic to be removed.
            if ((tile.Configuration != this._configuration) || this._variant != tile.Variant() || this._signComponent == null)
            {
                this._isRemoved = true;

                if (tile.Configuration == this._configuration)
                {
                    universe.RemoveTile(base.Entity, base.Location, TileAccessFlags.None);
                }

                return;
            }

            // If the centerPos is not set lets set it
            if (this._centerPos == Vector3D.Zero)
            {
                uint     rotation = tile.Configuration.Rotation(tile.Variant());
                Vector3D offset   = VectorHelper.RotatePosition(rotation, this._signComponent.offsetFromCenter);
                this._centerPos = tile.Configuration.TileCenter(this.Location, tile.Variant()) + offset;

                Vector3F tileOffset = default(Vector3F);
                if (universe.TileOffset(base.Location, TileAccessFlags.None, out tileOffset))
                {
                    this._centerPos += tileOffset.ToVector3D();
                }
            }
        }
        public override void Update(Timestep timestep, EntityUniverseFacade universe)
        {
            Tile tile;

            if (!universe.ReadTile(Location, TileAccessFlags.None, out tile))
            {
                return;
            }
            if ((tile.Configuration != _configuration) || (_variant != tile.Variant()))
            {
                _done = true;
                if (tile.Configuration == _configuration)
                {
                    universe.RemoveTile(Entity, Location, TileAccessFlags.None);
                }
                return;
            }

            _countPosition = tile.Configuration.TileCenterTop(Location, tile);

            Vector3F tileOffset;

            if (universe.TileOffset(Location, TileAccessFlags.None, out tileOffset))
            {
                _countPosition.Y += tileOffset.Y;
            }

            CheckIfEntityExists();

            if (!IsClaimed() || !Totem.HasGameStarted())
            {
                return;
            }

            if (SpawnFireworksStart + (long)(_goalComponent.FireworkLaunchingLength * Constants.TimestepsPerSecond) > timestep)
            {
                if (timestep - _lastSpawn > _goalComponent.FireworkTimeBetweenLaunch * Constants.TimestepsPerSecond)
                {
                    _lastSpawn = timestep;
                    SpawnFireworks(universe);
                }
                return;
            }

            if (Totem.CanStartNewGame())
            {
                return;
            }

            // get all entities inside the goal area
            var entities = universe.FindAllEntitiesInRange(tile.Configuration.TileCenter(Location, tile.Variant()), (float)_boundingShape.Radius.Length(),
                                                           FindEntityCondition);

            if (entities == null || entities.Count <= 0)
            {
                return;
            }

            // if an item has moved into the goal area increase the score
            Console.WriteLine("Checking all entities in collision.");
            foreach (var entity in entities)
            {
                var itemlogic = entity.Logic as ItemEntityLogic;
                if (itemlogic == null)
                {
                    continue;
                }
                Console.WriteLine("There is an item logic.");
                ItemStack stack = (ItemStack)GetInstanceField(typeof(ItemEntityLogic), itemlogic, "Stack"); //Use reflection to find internal stack
                if (stack.Item.Configuration.Code == "mods.Deamon.Soccer.item.SoccerBall")
                {
                    SetInstanceField(typeof(ItemEntityLogic), itemlogic, "Stack", new ItemStack());
                    Totem.IncreaseScore(Team, timestep); //Increase the score
                }
            }
        }