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)); }
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)); }
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); }
public MineBlockState(GridActor user, MiningRequest request, LilLogger logger) { this.user = user; this.request = request; this.logger = logger; logger.Log("Entering MineBlockState with request " + request); }
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"); }
public DoJobState(IJob work, GridActor actor, LilLogger logger) { this.actor = actor; this.logger = logger; this.work = work; logger.Log("Initializing my DoJobState"); }
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); }
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()); } }
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); }
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); }
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); }
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); } }
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); }
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); }
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); }
/// <summary> /// 当所哟节点和单元都添加完毕 /// </summary> public void AfterAdd(bool hasException) { if (hasException) { m_gridActor = null; } m_gridActor.ConstructActor(); }
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)); }
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); }
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); }
private void SetupGridActor() { GridActor prefabActor = blueprintPrefab.GetComponent <GridActor>(); if (prefabActor && actor) { actor.SetSize(prefabActor.Size); } }
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)); }
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"); }
void Start() { GridActor actor = Helpers.GetComponent <GridActor>(gameObject, logger); if (actor) { posObserver = new SimpleObserver <Vector3Int>(actor, OnNewPos); OnNewPos(actor.Position); } }
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)); }
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); }
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)); } }
void Start() { actor = GetComponent <GridActor>(); transform.position = GridPosToRealPos(actor.Position); if (actor) { RecordPos(actor.Position); } camController = Camera.main.GetComponent <CameraController>(); meshRenderer = GetComponent <MeshRenderer>(); }