Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
    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;
        }
    }