public StartUp(IGameScene gameScene, IMouse mouse, ISound sound) { GameScene = gameScene; Mouse = mouse; var parameters = new Parameters(); Sound = new PixSound(new Sounds(sound)); Drawer = new Drawer(parameters, gameScene); var IdProcessor = new BlockIdProcessor(); var tileManager = new TileManager(Drawer, IdProcessor, parameters); engine = new Engine.Engine(tileManager, Drawer); var craftingSystem = new CraftingModule(Craftings.GetCraftings(), tileManager); var StatusWindow = new InventoryForm(craftingSystem, engine, mouse, Drawer, gameScene); var playerstatus = new PlayerStatus(StatusWindow, parameters); var blockConverter = new BlockConverter(Drawer, IdProcessor); var moveDefiner = new PlayerMoveDefiner(gameScene, mouse); SaveManager = new SaveManager(tileManager, playerstatus, blockConverter, engine.Center, engine); var pauseMenu = new PauseForm(engine, SaveManager, mouse, Drawer, gameScene); var oreTable = new OreTable(OreResource.InitOreTable()); pointerController = new PointerController(playerstatus, tileManager, moveDefiner, Drawer, Sound, parameters, engine, mouse); player = new Player(pauseMenu, tileManager, moveDefiner, playerstatus, Drawer, engine, Sound, parameters, gameScene, pointerController); MobSpawner = new MobSpawner(engine, tileManager, Drawer, Sound, player); Generator = new Generator(tileManager, oreTable, Drawer, parameters); }
public static bool OnEntity(Entity entity) { var ent = BaseNetworkable.Get(entity.baseNetworkable.uid); if (ent != null) { ent.OnEntityUpdate(entity); return(ent.OnEntity(entity)); } var prefabId = entity.baseNetworkable.prefabID; if (prefabId == (UInt32)EPrefabUID.BasePlayer) { ent = new BasePlayer(); } else if (prefabId == (UInt32)EPrefabUID.OreBonus) { ent = new OreBonus(); } else if (entity.resource != null && Database.IsOreResource(prefabId)) { ent = new OreResource(); } else if (entity.heldEntity != null) { ent = new BaseHeldEntity(); } else if (OpCodes.IsStorage(entity.baseNetworkable.prefabID)) { ent = new StorageContainer(); } else if (Database.IsCollectible(prefabId)) { ent = new CollectibleEntity(); } else if (Database.IsBaseResource(prefabId)) { ent = new BaseResource(); } else if (entity.worldItem != null && Database.IsComponent(entity.worldItem.item.itemid)) { //new WorldItem(); } if (ent == null) { return(false); } ent.OnEntityCreate(entity); return(ent.OnEntity(entity)); }
public override void Update() { base.Update(); if (refineryHomebase == null) { refineryHomebase = FindOreRefinery(); if (refineryHomebase == null) { return; } } switch (mineState) { case MineState.IDLE: //check if both minerals and a ore factory exists, iff -> SEARCH float shortestDistance = Vector3.Distance(transform.position, resources[0].transform.position); closestResource = resources[0]; for (int i = 1; i < resources.Length; i++) { float distance = Vector3.Distance(transform.position, resources[i].transform.position); if (distance < shortestDistance) { shortestDistance = distance; closestResource = resources[i]; } } ai.destination = closestResource.transform.position; ai.SearchPath(); mineState = MineState.SEARCH; break; case MineState.SEARCH: if ((ai.reachedEndOfPath && !ai.pathPending) || ai.remainingDistance < 6) { mineState = MineState.MINE; mineTime = Time.time; } break; case MineState.MINE: if (mineTime + mineInterval < Time.time) { addOreToInventory(closestResource.getResourceValue()); mineTime = Time.time; } if (inventorySize <= currentInventory) { if (refineryHomebase) { ai.destination = refineryHomebase.GetEntrancePosition(); ai.SearchPath(); mineState = MineState.RETURN; } } break; case MineState.RETURN: if ((ai.reachedEndOfPath && !ai.pathPending) && refineryHomebase) { enterUnloadState(); Vector3 _direction = (refineryHomebase.transform.position - transform.position).normalized; Quaternion _lookRotation = Quaternion.LookRotation(_direction); transform.rotation = Quaternion.Slerp(transform.rotation, _lookRotation, 0.35f); transform.position = Vector3.MoveTowards(transform.position, refineryHomebase.GetUnloadPosition(), 0.2f); if (Vector3.Distance(transform.position, refineryHomebase.GetUnloadPosition()) < 1f) { mineState = MineState.UNLOAD; } } break; case MineState.UNLOAD: refineryHomebase.AddResources(inventoryValue); Reset(); mineState = MineState.EXIT; break; case MineState.EXIT: if (refineryHomebase) { transform.position = Vector3.MoveTowards(transform.position, refineryHomebase.GetEntrancePosition(), 0.3f); if (Vector3.Distance(transform.position, refineryHomebase.GetEntrancePosition()) < 2f) { GetComponent <Collider>().enabled = true; //ai.gravity = savedGravity; ai.enabled = true; mineState = MineState.IDLE; } } break; } }