/// <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) { base.Update(timestep, universe); Tile tile; if (!universe.ReadTile(Location, TileAccessFlags.None, out tile)) { return; } _tileCenter = tile.Configuration.TileCenter(Location, tile.Variant()); Vector3F tileOffset; if (universe.TileOffset(Location, TileAccessFlags.None, out tileOffset)) { _tileCenter.Y += tileOffset.Y; } if (_timer == Timestep.Null) { _timer = timestep; } if (timestep > _timer + 3000000) { _timer = timestep; if (!IsReady()) { ScanSurroundings(); BlueTeamScore = 0; RedTeamScore = 0; _gameStarted = false; } } CheckIfEntitiesStillExists(); }
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 } } }