Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        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);
        }