public void Tick(float deltaTime) { if (mainPawn != null) { ActorInstance.Room room = mainPawn.curRoom; IntVector3 logicPos = room.LogicPosition; LAYER layer = logicPos.y == -1 ? LAYER.BASEMENT : (logicPos.y == 0 ? LAYER.GROUND : LAYER.UPSTAIRS); SetLayer(layer); Vector3 pos = new Vector3(bkgCenter.x + logicPos.x * 20, bkgCenter.y + logicPos.z * 20, 0); Transform pawnTrans = mainPawn.transform; Vector2 delta = room.WorldToLogic(pawnTrans.position); pos.x += delta.x * 20; pos.y += delta.y * 20; Quaternion pawnRot = pawnTrans.rotation; Quaternion logicRot = room.WorldToLogic(pawnRot); float yaw = logicRot.eulerAngles.y; RectTransform tran = mainCharImg.rectTransform; Vector3 euler = tran.rotation.eulerAngles; euler.z = -yaw; tran.localPosition = pos; tran.rotation = Quaternion.Euler(euler); //tran.SetPositionAndRotation(pos, Quaternion.Euler(euler)); } }
protected override void _OnLoad(ActorInstance.ActorBase actor) { base._OnLoad(actor); ActorInstance.Room roomInst = actor as ActorInstance.Room; if (roomInst != null) { roomInst.mono = roomInst.actorTrans.GetComponent <RoomMono>(); } else { Debug.LogErrorFormat("Room {0} OnLoad an actor which is NOT a room instance!", name); } int index = 0; //init connectors foreach (ConnectorSocket socket in ConnectorSockets) { ActorInstance.Trigger trig = socket.GenerateTrigger(); ActorInstance.Connector connector = trig as ActorInstance.Connector; if (roomInst.ConnectorList == null) { roomInst.ConnectorList = new List <ActorInstance.Connector>(); } if (connector == null) { Debug.LogErrorFormat("{0} connector {1} is null!", roomName, index); } else { roomInst.ConnectorList.Add(connector); connector.parentRoom = roomInst; connector.SetParent(roomInst.actorTrans, socket.LocalPosition, Quaternion.Euler(socket.LocalEulerRotation)); } index++; } //init triggers foreach (TriggerSocket socket in TriggerSockets) { ActorInstance.Trigger trigger = socket.GenerateTrigger(); trigger.parentRoom = roomInst; trigger.SetParent(roomInst.actorTrans, socket.LocalPosition, Quaternion.Euler(socket.LocalEulerRotation)); } }
public ActorInstance.Room CreateLinkedRoom(IntVector3 logicPos, Rotation2D rot, Vector3 worldPos, Quaternion worldRot) { //Assuming there's no room-conflict ActorInstance.Room linkRoom = GameLoader.Instance.GetRoomByLogicPosition(logicPos + LogicPosition); if (linkRoom == null) { Room roomProp = Resources.Load <Room>(LinkRoomPath); if (roomProp != null) { ActorInstance.Room instRoom = new ActorInstance.Room(roomProp); instRoom.Init(logicPos + rot * LogicPosition, rot, worldPos + Position, worldRot * Quaternion.Euler(EulerRotation)); linkRoom = instRoom; } } return(linkRoom); }