void Start()
    {
        inventory = GetComponent <InventoryComponent>();
        if (inventory)
        {
            inventoryObserver = new SimpleObserver <InventoryUpdateEvent>(inventory, OnInventoryUpdate);
        }
        actor = GetComponent <GridActor>();
        if (actor)
        {
            transform.position = actor.Position;
        }
        if (!data.hasSpawnedRequest)
        {
            MoveItemRequest req = new MoveItemRequest(data.itemRequired, actor.Position, actor.Guid);
            data.requestGuid = req.Guid;
            MoveItemRequestPool.Instance.PostRequest(req);
            data.hasSpawnedRequest = true;
        }
        myObserver = new SimpleObserver <RequestPoolUpdateEvent <MoveItemRequest> >(MoveItemRequestPool.Instance, (updateEvent) =>
        {
            if (updateEvent.Type == RequestPoolUpdateEvent <MoveItemRequest> .EventType.Cancelled && updateEvent.Request.Guid.Equals(data.requestGuid))
            {
                data.requestFinished = true;
                GameObject.Destroy(gameObject);
            }
        });

        BlockVisualizer visualizer = GetComponent <BlockVisualizer>();

        if (visualizer)
        {
            visualizer.RenderBlock(GetBlock());
        }
    }
        void Start()
        {
            myRenderer = GetComponent <MeshRenderer>();
            actor      = GetComponent <GridActor>();
            inventory  = GetComponent <InventoryComponent>();
            if (actor && inventory)
            {
                inventoryObserver = new SimpleObserver <InventoryUpdateEvent>(inventory, (update) =>
                {
                    if (update.Type == InventoryUpdateEvent.UpdateType.Added)
                    {
                        OnItemAdded();
                    }
                    else if (update.Type == InventoryUpdateEvent.UpdateType.Removed)
                    {
                        OnItemRemoved();
                    }
                });
                ItemMap.RegisterInventory(inventory, actor.Position);
                transform.position = actor.Position + new Vector3(.25f, -.25f, .25f);


                Item mainItem = inventory.GetMostCommonItem();
                visualizer = GetComponent <BlockVisualizer>();
                visualizer.RenderBlock(mainItem.GetTexturePosition());
            }
            cameraObserver = new SimpleObserver <CameraController>(Camera.main.GetComponent <CameraController>(), (c) =>
            {
                if (this.myRenderer && actor)
                {
                    this.myRenderer.enabled = c.PositionShouldBeVisible(actor.Position);
                }
            });
        }
 public DorfController(String name, GridActor actor, LilLogger logger)
 {
     this.name      = name;
     this.gridActor = actor;
     this.logger    = logger;
     stateMachine   = new StateMachine(new ChoosingJobState(gridActor, logger));
 }
Esempio n. 4
0
 public MiningJob(GridActor actor, MiningRequest request, LilLogger logger)
 {
     Debug.Assert(request != null);
     this.logger = logger;
     Debug.Log("Started a mining job");
     machine = new StateMachine(new WalkToBlockState(actor, request, logger));
 }
Esempio n. 5
0
 public WalkToBlockState(GridActor user, MiningRequest request, LilLogger logger) : base(user, 100, 1)
 {
     this.request = request;
     this.logger  = logger;
     logger.Log("Initialized a WalkToBlockState with request " + request);
     Debug.Assert(this.request != null);
 }
Esempio n. 6
0
 public MineBlockState(GridActor user, MiningRequest request, LilLogger logger)
 {
     this.user    = user;
     this.request = request;
     this.logger  = logger;
     logger.Log("Entering MineBlockState with request " + request);
 }
Esempio n. 7
0
 public DoJobState(GridActor actor, IGenericSaveData save, LilLogger logger) : base(((SaveData)save).parent)
 {
     this.actor  = actor;
     this.logger = logger;
     this.work   = LoadWork(((SaveData)save).workSave);
     logger.Log("Loading my DoJobState");
 }
Esempio n. 8
0
 public DoJobState(IJob work, GridActor actor, LilLogger logger)
 {
     this.actor  = actor;
     this.logger = logger;
     this.work   = work;
     logger.Log("Initializing my DoJobState");
 }
Esempio n. 9
0
    void Update()
    {
        if (!dorfsSpawned)
        {
            dorfsSpawned = true;
            for (int i = 0; i < 1; i++)
            {
                Vector3Int middleOfMap = new Vector3Int(GridMap.Instance.GetSize().x / 2, 0, GridMap.Instance.GetSize().z / 2);
                spawnedDorfs.Add(DorfComponent.InstantiateDorf(middleOfMap).gameObject);
            }
        }

        if (GridMap.Instance.IsGenerationDone() && correctDorfPositions)
        {
            correctDorfPositions = false;
            foreach (GameObject g in spawnedDorfs)
            {
                GridActor  actor  = g.GetComponent <GridActor>();
                Vector3Int pos    = actor.Position;
                Vector3Int newPos = Vector3Int.zero;
                for (int y = 0; y < GridMap.Instance.GetSize().y; y++)
                {
                    newPos = new Vector3Int(pos.x, y, pos.z);
                    if (GridMap.Instance.GetBlock(newPos).SupportsWalkingThrough())
                    {
                        break;
                    }
                }

                actor.Move(newPos);
            }
        }
    }
    public static BlockBuildingSite InstantiateNew(Vector3Int position, Block blockToBuild, Type itemRequired)
    {
        GameObject prefabObj = PrefabLoader.GetPrefab <GameObject>(prefabName);
        GameObject obj       = Instantiate(prefabObj) as GameObject;

        if (!obj)
        {
            throw new System.Exception("Could not instantiate prefab " + prefabName);
        }
        GridActor actor = obj.GetComponent <GridActor>();

        if (!actor)
        {
            throw new System.Exception("No GridActor on prefab " + prefabName);
        }
        actor.Move(position);
        BlockBuildingSite bbs = obj.GetComponent <BlockBuildingSite>();

        if (!bbs)
        {
            throw new System.Exception("No BlockBuildingSite on prefab " + prefabName);
        }
        bbs.data.targetBlock  = blockToBuild;
        bbs.data.itemRequired = itemRequired;
        return(bbs);
    }
Esempio n. 11
0
    private State LoadState(GridActor user, IGenericSaveData activeState)
    {
        Type type = activeState.GetSaveType();

        logger.Log("Loading my state");
        if (type == typeof(FindItemState))
        {
            logger.Log("I was in a FindItemState");
            return(new FindItemState(user, activeState, logger));
        }
        else if (type == typeof(WalkToItemState))
        {
            logger.Log("I was in a WalkToItemState");
            return(new WalkToItemState(user, activeState, logger));
        }
        else if (type == typeof(WalkToTargetState))
        {
            logger.Log("I was in a WalkToTargetState");
            return(new WalkToTargetState(user, activeState, logger));
        }
        else
        {
            throw new Exception("Unknown type " + type.ToString());
        }
    }
Esempio n. 12
0
 public FindItemState(GridActor actor, MoveItemRequest request, LilLogger logger)
 {
     this.actor   = actor;
     this.request = request;
     this.logger  = logger;
     logger.Log("Initialized my FindItemState with request " + request);
 }
Esempio n. 13
0
    public override MiningRequest GetRequest(GridActor actor)
    {
        // Get the closest request
        ReturnCooledDownTasks(false);
        Vector3Int    actorPos         = actor.Position;
        int           smallestDistance = int.MaxValue;
        MiningRequest closestReq       = null;

        lock (lockObject)
        {
            if (Requests.Count == 0)
            {
                return(null);
            }

            foreach (MiningRequest req in Requests)
            {
                Vector3Int diff     = req.Position - actorPos;
                int        distance = diff.sqrMagnitude;
                if (distance < smallestDistance)
                {
                    closestReq       = req;
                    smallestDistance = distance;
                }
            }
        }
        HandOutRequest(closestReq);
        return(closestReq);
    }
Esempio n. 14
0
    static public GridActor[] GetGridActors(Vector3Int pos)
    {
        if (!gridActorLock.TryEnterReadLock(lockTimeout))
        {
            throw new Exception("Readlock timeout");
        }
        GridActor[] actors;
        try
        {
            if (gridActors.ContainsKey(pos))
            {
                actors = gridActors[pos].ToArray();
            }
            else
            {
                actors = new GridActor[0];
            }
        }
        finally
        {
            gridActorLock.ExitReadLock();
        }

        return(actors);
    }
Esempio n. 15
0
    void OnInventoryUpdated(InventoryUpdateEvent update)
    {
        if (update.Type != InventoryUpdateEvent.UpdateType.Added)
        {
            return;
        }
        if (inventory == null)
        {
            return;
        }
        if (actor == null)
        {
            return;
        }

        if (AreAllRequiredItemsAvailable())
        {
            GameObject newObj   = Instantiate(blueprintPrefab) as GameObject;
            GridActor  newActor = newObj.GetComponent <GridActor>();
            if (actor)
            {
                newActor.Move(actor.Position);
            }

            GameObject.Destroy(gameObject);
        }
    }
Esempio n. 16
0
 public WalkToTargetState(GridActor actor, MoveItemRequest request, Item item, LilLogger logger) : base(actor, 100, 1)
 {
     this.actor   = actor;
     this.request = request;
     this.item    = item;
     this.logger  = logger;
     logger.Log("Initialized my WalkToTargetState with request " + request);
 }
Esempio n. 17
0
 public WalkToItemState(GridActor actor, MoveItemRequest request, Vector3Int target, LilLogger logger) : base(actor, 100)
 {
     this.actor   = actor;
     this.request = request;
     this.target  = target;
     this.logger  = logger;
     logger.Log("Initialized my WalkToItemState with request " + request);
 }
Esempio n. 18
0
        public MineBlockState(GridActor user, IGenericSaveData saveData, LilLogger logger) : base(((SaveData)saveData).parent)
        {
            this.user = user;
            SaveData save = saveData as SaveData;

            this.request = save.request;
            logger.Log("Loading MineBlockState with request " + request);
        }
Esempio n. 19
0
 /// <summary>
 /// 当所哟节点和单元都添加完毕
 /// </summary>
 public void AfterAdd(bool hasException)
 {
     if (hasException)
     {
         m_gridActor = null;
     }
     m_gridActor.ConstructActor();
 }
Esempio n. 20
0
    public WalkRandomlyJob(GridActor user, LilLogger logger)
    {
        this.logger = logger;
        logger.Log("Starting a WalkRandomlyJob");
        Vector3Int size = SingletonProvider.MainGridMap.GetSize();

        machine = new StateMachine(new WalkRandomlyState(user, logger));
    }
Esempio n. 21
0
        public FindItemState(GridActor actor, IGenericSaveData saveData, LilLogger logger) : base(((SaveData)saveData).parent)
        {
            this.actor  = actor;
            this.logger = logger;
            SaveData save = saveData as SaveData;

            this.request = save.request;
            logger.Log("Loaded my FindItemState with request " + request);
        }
Esempio n. 22
0
        public WalkToBlockState(GridActor user, IGenericSaveData saveData, LilLogger logger) : base(user, ((SaveData)saveData).parent)
        {
            this.logger = logger;
            SaveData save = saveData as SaveData;

            this.request = save.request;
            logger.Log("Loaded a WalkToBlockState with request " + request);
            Debug.Assert(this.request != null);
        }
Esempio n. 23
0
    private void SetupGridActor()
    {
        GridActor prefabActor = blueprintPrefab.GetComponent <GridActor>();

        if (prefabActor && actor)
        {
            actor.SetSize(prefabActor.Size);
        }
    }
Esempio n. 24
0
        public WalkingState(GridActor user, float msPerStep, int margin)
        {
            Debug.Assert(user != null);
            this.user               = user;
            this.data.aStarMargin   = margin;
            this.data.timePerStepMs = msPerStep;

            machine = new StateMachine(new AwaitingAstarState(this));
        }
Esempio n. 25
0
 private void Start()
 {
     if (logger == null)
     {
         logger = new LilLogger(gameObject.name);
     }
     gridActor  = GetComponent <GridActor>();
     controller = new DorfController(gameObject.name, gridActor, logger);
     logger.Log("I started");
 }
Esempio n. 26
0
    void Start()
    {
        GridActor actor = Helpers.GetComponent <GridActor>(gameObject, logger);

        if (actor)
        {
            posObserver = new SimpleObserver <Vector3Int>(actor, OnNewPos);
            OnNewPos(actor.Position);
        }
    }
Esempio n. 27
0
    public DorfController(IGenericSaveData data, GridActor actor, LilLogger logger)
    {
        SaveData save = (SaveData)data;

        name        = save.name;
        this.logger = logger;
        logger.Log("I'm being loaded");
        this.gridActor    = actor;
        this.stateMachine = new StateMachine(LoadState(save.currentStateSave));
    }
Esempio n. 28
0
        public WalkToTargetState(GridActor actor, IGenericSaveData saveData, LilLogger logger) : base(actor, ((SaveData)saveData).parent)
        {
            this.actor  = actor;
            this.logger = logger;
            SaveData save = saveData as SaveData;

            this.request = save.request;
            this.item    = save.item;
            logger.Log("Loaded my WalkToTargetState with request " + request);
        }
Esempio n. 29
0
    public MiningJob(GridActor actor, IGenericSaveData save, LilLogger logger)
    {
        this.logger = logger;
        SaveData saveData = (SaveData)save;

        if (saveData.activeState != null)
        {
            machine = new StateMachine(LoadState(actor, saveData.activeState));
        }
    }
Esempio n. 30
0
 void Start()
 {
     actor = GetComponent <GridActor>();
     transform.position = GridPosToRealPos(actor.Position);
     if (actor)
     {
         RecordPos(actor.Position);
     }
     camController = Camera.main.GetComponent <CameraController>();
     meshRenderer  = GetComponent <MeshRenderer>();
 }