private void ApplyInput(GameState s, float dt, SpawnBuildingEvent e) { RTSTeam team = s.teams[e.Team]; // Check If We Can Add A Building There Vector2 wp = new Vector2(e.GridPosition.X + 0.5f, e.GridPosition.Y + 0.5f) * s.CGrid.cellSize; if(!s.CGrid.CanAddBuilding(wp, team.Race.Buildings[e.Type].GridSize)) return; RTSBuilding building = team.AddBuilding(e.Type, wp); if(building == null) return; // Check For Instant Building if(e.InstantBuild) { building.BuildAmountLeft = 0; } else { building.OnBuildingFinished += (b) => { s.SendAlert(building.Data.FriendlyName + " Is Built", AlertLevel.Passive); }; } // Check If A Building Was Possible if(building == null) return; s.EntityHashSet.Add(building.UUID, building); // Set Default Height building.Height = s.CGrid.HeightAt(building.GridPosition); building.CollisionGeometry.Height = building.Height; s.CGrid.Add(building); // Add Building Decision Task AddTask(s, building, e.Team, e.Type); }