// Spawns an object in the world at random edge position and random angle private void SpawnEntity() { if (!isActive) { return; } Vector3 startPosition = GenerateStartLocation(); Quaternion startRotation = GenerateStartRotation(startPosition); // TODO: Warn player that a entity is approaching GameObject entity = Instantiate(prefab, startPosition, startRotation, transform); if (entity.tag == "Ship") { ShipHandler shipHandler = entity.GetComponent <ShipHandler>(); shipHandler.CurrentDirection = CalculateStartVelocity(entity); shipHandler.Speed = speed; if (speed <= 50) { speed += speedIncrease; } ColorCoordinator colorCoordinator = FindObjectOfType <ColorCoordinator>(); shipHandler.ShipColor = colorCoordinator.GetRandomPadColor(); } else { entity.GetComponent <Rigidbody>().velocity = CalculateStartVelocity(entity); } NetworkServer.Spawn(entity); }
public RefuelStarFinder( ApplicationDbContext dbContext, IStarSystemRepository starSystemRepository, ShipHandler shipHandler, bool useFsdBoost) { this.dbContext = dbContext; this.starSystemRepository = starSystemRepository; this.shipHandler = shipHandler; this.useFsdBoost = useFsdBoost; }
public MainHandler(DiscordSocketClient Discord) { guilds = new Dictionary <ulong, GuildHandler>(); Client = Discord; ConfigHandler = new Handlers.ConfigHandler(); CommandHandler = new CommandHandler(); PermissionHandler = new PermissionHandler(this); TextHandler = new TextHandler(this); ShipHandler = new ShipHandler(this); BotHandler = new BotHandler(); forumUpdater = new ForumUpdater(this); ExceptionHandler = new ExceptionHandler(this); DatabaseHandler = new Handlers.DatabaseHandler(this); }
public async Task InitializeEarlyAsync(IServiceProvider services) { await ConfigHandler.InitializeAsync(); await CommandHandler.InitializeAsync(this, services); await TextHandler.InitializeAsync(ConfigHandler.GetSwearString()); await ShipHandler.InitializeAsync(); await BotHandler.InitializeAsync(); await DatabaseHandler.InitializeAsync(); }
public static Toil PutPawnOnShip(Pawn pawnToBoard, Pawn ship) { Toil toil = new Toil(); toil.initAction = delegate() { CompShips shipComp = ship.GetComp <CompShips>(); shipComp.Notify_Boarded(pawnToBoard); ShipHandler handler = shipComp.handlers.Find(x => x.role.handlingType == HandlingTypeFlags.None); shipComp.GiveLoadJob(pawnToBoard, handler); }; toil.defaultCompleteMode = ToilCompleteMode.Instant; return(toil); }
private void InitHandlers() { GameEvents = new GameHandler(this); PlayerEvents = new PlayerHandler(this); ShipEvents = new ShipHandler(this); CombatEvents = new CombatHandler(this); ExplorationEvents = new ExplorationHandler(this); StationEvents = new StationHandler(this); TradeEvents = new TradeHandler(this); TravelEvents = new TravelHandler(this); PowerplayEvents = new PowerplayHandler(this); WingEvents = new WingHandler(this); SquadronEvents = new SquadronHandler(this); CrewEvents = new CrewHandler(this); }
public async Task Close() { foreach (ulong id in guilds.Keys) { await guilds[id].Close(); } await ConfigHandler.Close(); await CommandHandler.Close(); await TextHandler.Close(); await ShipHandler.Close(); await BotHandler.Close(); await DatabaseHandler.Close(); }
void RegisterTouchToShip(Touch currentTouch) { int currentFingerId = currentTouch.fingerId; if (fingerIdToShip.ContainsKey(currentFingerId)) { GameObject shipObject = fingerIdToShip[currentFingerId]; // Handle if ship is destroyed while drawing path if (shipObject != null) { ShipHandler shipHandler = shipObject.GetComponent <ShipHandler>(); if (currentFingerId == shipHandler.FingerId) { Vector3 point = cam.ScreenToWorldPoint(new Vector3(currentTouch.position.x, currentTouch.position.y, cam.transform.position.y - shipObject.transform.position.y)); CmdAddPointToPath(shipObject.GetComponent <NetworkIdentity>(), point); } } } }
protected override Job TryGiveJob(Pawn pawn) { if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)) { return(null); } Pawn pawn2 = this.FindPrisoner(pawn); if (pawn2 is null) { return(null); } Pawn ship = this.FindShipToDeposit(pawn, pawn2); ShipHandler handler = ship.GetComp <CompShips>().handlers.Find(x => x.role.handlingType == HandlingTypeFlags.None); return(new Job(JobDefOf.PrepareCaravan_GatherPawns, pawn2) { count = 1 }); }
protected override Job TryGiveJob(Pawn pawn) { if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)) { return(null); } Pawn pawn2 = this.FindDownedPawn(pawn); if (pawn2 is null) { return(null); } Pawn ship = this.FindShipToDeposit(pawn, pawn2); ShipHandler handler = ship.GetComp <CompShips>().handlers.Find(x => x.role.handlingType == HandlingTypeFlags.None); return(new Job(JobDefOf_Ships.CarryPawnToShip, pawn2, ship) { count = 1 }); }
// Set up ship and finger id if touch on ship void InitTouch(Touch currentTouch) { Ray ray = cam.ScreenPointToRay(currentTouch.position); RaycastHit hit; // Send out ray and see if ship got touched if (Physics.Raycast(ray, out hit)) { if (hit.collider.tag == "Ship") { // Save ship to dict GameObject shipObject = hit.transform.gameObject; fingerIdToShip.Add(currentTouch.fingerId, shipObject); // Set finger id to ship ShipHandler shipHandler = shipObject.GetComponent <ShipHandler>(); shipHandler.FingerId = currentTouch.fingerId; CmdClearPath(shipObject.GetComponent <NetworkIdentity>()); } } }
public static Toil BoardShip(Pawn pawnBoarding, TargetIndex index) { Toil toil = new Toil(); toil.initAction = delegate() { CompShips ship = toil.actor.jobs.curJob.GetTarget(index).Thing.TryGetComp <CompShips>(); ship.Notify_Boarded(pawnBoarding); bool flag = !pawnBoarding.IsColonist; if (!flag) { foreach (ShipHandler handler in ship.handlers) { if (handler.AreSlotsAvailable) { ship.GiveLoadJob(pawnBoarding, handler); ship.ReserveSeat(pawnBoarding, handler); break; } } } else { ShipHandler handler = ship.handlers.Find(x => x.role.handlingType == HandlingTypeFlags.None && x.AreSlotsAvailable); if (handler is null) { handler = ship.handlers.Find(x => x.AreSlotsAvailable); } if (handler is null) { Log.Error("Could not find spot for " + pawnBoarding.LabelShort + " to board."); } ship.GiveLoadJob(pawnBoarding, handler); ship.ReserveSeat(pawnBoarding, handler); } }; toil.defaultCompleteMode = ToilCompleteMode.Instant; return(toil); }
// Spawns an object in the world at random edge position and random angle private void SpawnEntity() { Vector3 startPosition = GenerateStartLocation(); Quaternion startRotation = GenerateStartRotation(startPosition); // TODO: Warn player that a entity is approaching GameObject entity = Instantiate(prefab, startPosition, startRotation, transform); if (entity.tag == "Ship") { ShipHandler shipHandler = entity.GetComponent <ShipHandler>(); shipHandler.CurrentDirection = CalculateStartVelocity(entity); shipHandler.Speed = speed; } else { entity.GetComponent <Rigidbody>().velocity = CalculateStartVelocity(entity); } NetworkServer.Spawn(entity); }
public Bill_BoardShip(Pawn newBoard, ShipHandler newHandler) { pawnToBoard = newBoard; handler = newHandler; }
void Start() { handler = GetComponent <ShipHandler>(); }
public static void Main() { var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile("appsettings.ignored.json") .Build(); var app = new AppSettings(); configuration.GetSection("App").Bind(app); var serviceProvider = new ServiceCollection() .AddLogging() .AddDbContext <ApplicationDbContext>(options => { options.UseMySql( configuration.GetConnectionString("Default"), new MySqlServerVersion(new Version(8, 0, 21)), mysqlOptions => { mysqlOptions.EnableRetryOnFailure(); } ); }) .BuildServiceProvider(); var dbContext = serviceProvider.GetService <ApplicationDbContext>(); var repository = new StarSystemRepository( dbContext, new StarSystemRepository.Options { Mode = "all", SectorSize = app.RepositorySectorSize, } ); var ship = new Ship { Name = app.Ship.Name, DryMass = app.Ship.DryMass, FuelCapacity = app.Ship.FuelCapacity, FSD = new FrameShiftDrive { FuelPower = app.Ship.FsdFuelPower, FuelMultiplier = app.Ship.FsdFuelMultiplier, MaxFuelPerJump = app.Ship.FsdMaxFuelPerJump, OptimisedMass = app.Ship.FsdOptimisedMass }, GuardianBonus = app.Ship.GuardianBonus, FuelScoopRate = app.Ship.FuelScoopRate }; var jumpParameters = app.Ship.RefuelLevels .Select(x => new JumpParameters( (RefuelType)Enum.Parse(typeof(RefuelType), x.RefuelType, true), x.RefuelMin, x.RefuelMax, x.JumpsMin, x.JumpsMax, x.MultiJumpRangeFactor )) .ToList(); var start = repository.GetByName(app.Start); if (app.NeutronBoostedAtStart) { start.HasNeutron = true; start.DistanceToNeutron = 0; } var goal = repository.GetByName(app.Goal); var edgeConstraints = (app.EdgeConstraints ?? new List <EdgeConstraintSettings>()) .Select <EdgeConstraintSettings, IEdgeConstraint>(x => { if (x.Type == "Angle") { return(new AngleEdgeConstraint( goal, double.Parse(x.Parameters["Angle"]) )); } else if (x.Type == "Cylinder") { return(new CylinderEdgeConstraint( start, goal, float.Parse(x.Parameters["Radius"]) )); } else if (x.Type == "MaximumJumps") { return(new MaximumJumpsEdgeConstraint( int.Parse(x.Parameters["Jumps"]) )); } else if (x.Type == "MinimumDistance") { return(new MinimumDistanceEdgeConstraint( double.Parse(x.Parameters["Distance"]) )); } else if (x.Type == "FuelRestriction") { var min = x.Parameters["Min"]; var max = x.Parameters["Max"]; return(new FuelRestrictionEdgeConstraint( repository.GetByName(x.Parameters["System"]), string.IsNullOrEmpty(min) ? (double?)null : double.Parse(min), string.IsNullOrEmpty(max) ? (double?)null : double.Parse(max) )); } else if (x.Type == "Exclude") { return(new ExcludeEdgeConstraint( x.Parameters["Names"] .Split(';') .Select(y => y.Trim()) .Where(y => !string.IsNullOrEmpty(y)) .Select(y => { var parts = y.Split(","); return (parts[0], parts[1]); }) .ToList() )); } else if (x.Type == "Beagle") { return(new BeagleEdgeConstraint()); } else { throw new InvalidOperationException(); } }) .ToList(); var shipHandler = new ShipHandler(ship); var refuelStarFinder = new RefuelStarFinder( dbContext, new StarSystemRepository( dbContext, new StarSystemRepository.Options { Mode = "scoopable", SectorSize = app.RepositorySectorSize, } ), shipHandler, app.UseFsdBoost ); var nodeHandler = new NodeHandler( new StarSystemRepository( dbContext, new StarSystemRepository.Options { Mode = app.RepositoryMode, SectorSize = app.RepositorySectorSize, } ), refuelStarFinder, edgeConstraints, shipHandler, jumpParameters, start, goal, new NodeHandler.Options { UseFsdBoost = app.UseFsdBoost, UseRefuelStarFinder = app.UseRefuelStarFinder, NeighborRangeMin = app.NeighborRangeMin, NeighborRangeMax = 5000, NeighborRangeMultiplier = 2, NeighborCountMin = 10, NeighborCountMax = 1000000, } ); var pathfinder = new Pathfinder(nodeHandler); var tStart = DateTime.UtcNow; var route = pathfinder.Invoke() .Cast <Node>() .ToList(); if (app.UseRefuelStarFinder) { route = refuelStarFinder.Invoke(route).ToList(); } var tEnd = DateTime.UtcNow; Console.WriteLine(); Console.WriteLine( "Neighbors cache: [Hits={0}, Misses={1}]", nodeHandler.cacheHits, nodeHandler.cacheMisses ); Console.WriteLine(); Console.WriteLine("Time: {0}", (tEnd - tStart)); Console.WriteLine(); Console.WriteLine("route:"); for (var i = 0; i < route.Count; i++) { var prev = 0 < i ? route[i - 1] : default; var node = route[i]; var next = i < route.Count - 1 ? route[i + 1] : default; var system = node.StarSystem; Console.WriteLine(" - name: {0}", system.Name); if (system.Name.Equals("???")) { Console.WriteLine(" x: {0:0}", system.Coordinates.X); Console.WriteLine(" y: {0:0}", system.Coordinates.Y); Console.WriteLine(" z: {0:0}", system.Coordinates.Z); } var scoopable = false; var neutron = false; var whiteDwarf = false; var boost = false; double?fuel = null; if (next != null) { if (next.RefuelType == RefuelType.Scoop || next.RefuelType == RefuelType.ScoopHeatsink || next.RefuelType == RefuelType.ScoopReckless) { scoopable = true; } if (next.RefuelType != RefuelType.None) { fuel = next.RefuelAvg; } if (next.BoostType == BoostType.Neutron) { neutron = true; } else if (next.BoostType == BoostType.WhiteDwarf) { whiteDwarf = true; } else if (next.BoostType == BoostType.Synthesis) { boost = true; } } if (scoopable && system.DistanceToScoopable != 0) { Console.WriteLine(" scoopable: true"); } else if (!scoopable && system.HasScoopable && system.DistanceToScoopable == 0) { Console.WriteLine(" scoopable: false"); } if (neutron && system.DistanceToNeutron != 0) { Console.WriteLine(" neutron: true"); } else if (!neutron && system.HasNeutron && system.DistanceToNeutron == 0) { Console.WriteLine(" neutron: false"); } if (whiteDwarf && system.DistanceToWhiteDwarf != 0) { Console.WriteLine(" white-dwarf: true"); Console.WriteLine(" boost: true"); } else if (!whiteDwarf && system.HasWhiteDwarf && system.DistanceToWhiteDwarf == 0) { Console.WriteLine(" white-dwarf: false"); } if (boost) { Console.WriteLine(" boost: true"); } if (fuel.HasValue) { Console.WriteLine(" fuel: {0:0.00}", fuel); } /* * if (i < route.Count - 1) * { * Console.WriteLine(" x-fuel: {0}", node.FuelAvg); * Console.WriteLine(" x-jumps: {0}", node.Jumps); * Console.WriteLine(" x-time: {0:0}", pathfinder.GetDistance(node, route[i+1])); * } */ } }
private void Awake() { Instance = this; }