Example #1
0
        public static InstanceData Move(MoveMessage msg)
        {
            switch (msg.type)
            {
            case "node":
                MoveableNode mnode = new MoveableNode(new InstanceID()
                {
                    NetNode = (ushort)msg.id
                });
                mnode.MoveCall(msg.position != null ? msg.position.ToUnity() : mnode.position);
                return(NetLogic.PrepareNode((ushort)msg.id));

            case "segment":
                MoveableSegment seg = new MoveableSegment(new InstanceID()
                {
                    NetSegment = (ushort)msg.id
                });
                seg.MoveCall(msg.position != null ? msg.position.ToUnity() : seg.position);
                return(NetLogic.PrepareSegment((ushort)msg.id));

            case "building":
                MoveableBuilding b = new MoveableBuilding(new InstanceID()
                {
                    Building = (ushort)msg.id
                });
                b.MoveCall(msg.position != null ? msg.position.ToUnity() : b.position, msg.is_angle_defined ? msg.angle : b.angle);
                return(ManagersLogic.PrepareBuilding((ushort)msg.id));

            case "prop":
                MoveableProp p = new MoveableProp(new InstanceID()
                {
                    Prop = (ushort)msg.id
                });
                p.MoveCall(msg.position != null ? msg.position.ToUnity() : p.position, msg.is_angle_defined ? msg.angle : p.angle);
                return(ManagersLogic.PrepareProp((ushort)msg.id));

            case "tree":
                MoveableTree t = new MoveableTree(new InstanceID()
                {
                    Tree = msg.id
                });
                t.MoveCall(msg.position != null ? msg.position.ToUnity() : t.position);
                return(ManagersLogic.PrepareTree(msg.id));

            default:
                throw new Exception($"Cannot move {msg.type}");
            }
        }
Example #2
0
        public static InstanceState Postfix(InstanceState state, ref MoveableBuilding __instance)
        {
            List <InstanceState> subSubStates  = new List <InstanceState>();
            BuildingState        buildingState = (BuildingState)state;

            if (buildingState.subStates != null)
            {
                foreach (InstanceState subState in buildingState.subStates)
                {
                    if (subState != null)
                    {
                        if (subState is BuildingState subBuildingState)
                        {
                            if (subBuildingState.instance != null && subBuildingState.instance.isValid)
                            {
                                BuildingState    ss          = (BuildingState)subState;
                                MoveableBuilding subInstance = (MoveableBuilding)subBuildingState.instance;
                                subSubStates.Clear();

                                ushort parent = buildingBuffer[subInstance.id.Building].m_parentBuilding; // Hack to get around Move It's single layer check
                                buildingBuffer[subInstance.id.Building].m_parentBuilding = 0;
                                foreach (Instance subSubInstance in subInstance.subInstances)
                                {
                                    if (subSubInstance != null && subSubInstance.isValid)
                                    {
                                        subSubStates.Add(subSubInstance.GetState());
                                    }
                                }
                                buildingBuffer[subInstance.id.Building].m_parentBuilding = parent;

                                if (subSubStates.Count > 0)
                                {
                                    ss.subStates = subSubStates.ToArray();
                                }
                            }
                        }
                    }
                }
            }

            return(state);
        }
Example #3
0
        public static void Postfix(InstanceState state, MoveableBuilding __instance)
        {
            if (!(state is BuildingState buildingState))
            {
                return;
            }

            //Debug.Log($"SS0 - {buildingState.subStates}");
            if (buildingState.subStates != null)
            {
                foreach (InstanceState subState in buildingState.subStates)
                {
                    if (subState != null)
                    {
                        if (subState is BuildingState subBuildingState)
                        {
                            if (subBuildingState.instance != null && subBuildingState.instance.isValid)
                            {
                                BuildingState    ss          = (BuildingState)subState;
                                MoveableBuilding subInstance = (MoveableBuilding)subBuildingState.instance;
                                if (ss.subStates != null)
                                {
                                    foreach (InstanceState subSubState in ss.subStates)
                                    {
                                        if (subSubState != null)
                                        {
                                            subSubState.instance.SetState(subSubState);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }