// Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { ray = mainCamera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity)) { GameObject game = hit.collider.gameObject; ItemAcceptor item = game.GetComponent <ItemAcceptor>(); if (item != null) { Visit(item); } DoorAcceptor door = game.GetComponent <DoorAcceptor>(); if (door != null) { Visit(door); } ActorAcceptor actor = game.GetComponent <ActorAcceptor>(); if (actor != null) { Visit(actor); } } } }
public override void WorldUpdate() { if (Item != null) { if (!hasReachedMiddle) { Vector3 pos = Item.transform.position; pos = Vector3.MoveTowards(pos, Center.position, ConveyorInfo.GetConveyorSpeed() * Time.deltaTime); Item.transform.position = pos; if (pos == Center.position) hasReachedMiddle = true; } else { Vector2 furnacePos = Instances.gridManager.GetCoords(this.gameObject); Vector3 pos = new Vector3(furnacePos.x, 0, furnacePos.y) + (Vector3)transform.forward; pos = new Vector2(Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.z)); if (Instances.gridManager.getObject(pos) != null) { Debug.Log("GetObject"); GameObject go = Instances.gridManager.getObject(pos); if (go.GetComponent<ItemAcceptor>() != null) { ItemAcceptor acceptor = go.GetComponent<ItemAcceptor>(); nextAcceptor = acceptor; } } else print("No Object at pos"); if (nextAcceptor != null) { pos = transform.position + transform.forward; pos = new Vector3(Mathf.RoundToInt(pos.x),0, Mathf.RoundToInt(pos.z)); if (nextAcceptor.CanAccept(Item.GetComponent<Item>(), (int)pos.x, (int)pos.z)) { if (nextAcceptor.AcceptItem(Item)) { this.Item = null; hasReachedMiddle = false; } } } } } }
public override void WorldUpdate() { if (nextAcceptor == null) { Vector2 furnacePos = Instances.gridManager.GetCoords(this.gameObject); Vector3 pos = new Vector3(furnacePos.x, 0, furnacePos.y) + (Vector3)transform.forward; pos = new Vector2(Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.z)); if (Instances.gridManager.getObject(pos) != null) { Debug.Log("GetObject"); GameObject go = Instances.gridManager.getObject(pos); if (go.GetComponent<ItemAcceptor>() != null) { ItemAcceptor acceptor = go.GetComponent<ItemAcceptor>(); nextAcceptor = acceptor; } } else print("No Object at pos"); } else { if(Item == null) Item = GameObject.Instantiate(ImportItem, SpawnPoint.position, Quaternion.identity) as GameObject; //Item.hideFlags = HideFlags.HideInHierarchy; } Vector3 itempos = transform.position + transform.forward; itempos = new Vector3(Mathf.RoundToInt(itempos.x),0, Mathf.RoundToInt(itempos.z)); if (Item == null) return; if (nextAcceptor.CanAccept(Item.GetComponent<Item>(), (int)itempos.x, (int)itempos.z)) { if (nextAcceptor.AcceptItem(Item)) { Instances.moneyManager.AddFunds(-Item.GetComponent<Item>().BuyValue, transform.position); this.Item = null; } } }
// Update is called once per frame void Update() { Ray ray = new Ray(transform.position, transform.forward); Debug.DrawRay(ray.origin, ray.direction * InteractDistance, Color.red, 1); RaycastHit hit; if (Physics.Raycast(ray, out hit, InteractDistance)) { if (hit.collider.CompareTag("KeyItem")) { if (Input.GetKeyDown(KeyCode.Mouse0)) { { GameObject game = hit.collider.gameObject; ItemAcceptor item = game.GetComponent <ItemAcceptor>(); if (item != null) { Visit(item); //対象オブジェクトにitemが含まれていればitemにアクセス } DoorAcceptor door = game.GetComponent <DoorAcceptor>(); if (door != null) { Visit(door); //対象オブジェクトにdoorが含まれていればdoorにアクセス } NoteAcceptor note = game.GetComponent <NoteAcceptor>(); if (note != null) { Visit(note); //対象オブジェクトにnoteが含まれていればnoteにアクセス } } } } } }
public override void Visit(ItemAcceptor acceptor) { acceptor.Accept(this); Debug.Log("アイテムを取得する処理"); }
public override void WorldUpdate() { if (Item != null) { if (!hasReachedMiddle) { Vector3 pos = Item.transform.position; pos = Vector3.MoveTowards(pos, Center.position, ConveyorInfo.GetConveyorSpeed() * Time.deltaTime); Item.transform.position = pos; if (pos == Center.position) hasReachedMiddle = true; } else { if(!processed) Process += Time.deltaTime; if (Process >= MaxProcess || processed) { if (!processed) { Item item = processor.FindOutput(Item.GetComponent<Item>()); if (item != null) { Destroy(Item); Instances.moneyManager.AddFunds(-ProductionCost, transform.position); Item = GameObject.Instantiate(item.gameObject, OutputPoint.position, OutputPoint.rotation) as GameObject; processed = true; Process = 0; } } if (nextAcceptor != null && processed) { Vector2 furnacePos = Instances.gridManager.GetCoords(this.gameObject); Vector3 pos = new Vector3(furnacePos.x, 0, furnacePos.y) + (Vector3)transform.forward; pos = new Vector3(Mathf.RoundToInt(pos.x), 0, Mathf.RoundToInt(pos.z)); if (nextAcceptor.CanAccept(Item.GetComponent<Item>(), (int)pos.x, (int)pos.z)) { if (nextAcceptor.AcceptItem(Item)) { processed = false; this.Item = null; hasReachedMiddle = false; } } } else { Vector2 furnacePos = Instances.gridManager.GetCoords(this.gameObject); Vector3 pos = new Vector3(furnacePos.x, 0, furnacePos.y) + (Vector3)transform.forward; pos = new Vector2(Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.z)); if (Instances.gridManager.getObject(pos) != null) { Debug.Log("GetObject"); GameObject go = Instances.gridManager.getObject(pos); if (go.GetComponent<ItemAcceptor>() != null) { ItemAcceptor acceptor = go.GetComponent<ItemAcceptor>(); nextAcceptor = acceptor; } } else print("No Object at pos"); } } } } }
// Start is called before the first frame update public abstract void Visit(ItemAcceptor acceptor);