Exemplo n.º 1
0
        public static bool Prefix(PlayerControlGizmo __instance, EObjectType tarType, int tarId)
        {
            if (__instance.mouseOverTargetType == tarType && __instance.mouseOverTargetId == tarId)
            {
                return(true);
            }
            if (tarId == 0 || tarType != EObjectType.Entity)
            {
                return(true);
            }

            PlanetFactory factory    = __instance.player.factory;
            EntityData    entityData = factory.entityPool[tarId];

            if (entityData.id == 0)
            {
                return(true);
            }

            ItemProto itemProto = LDB.items.Select(entityData.protoId);

            if (itemProto.ModelCount > 1)
            {
                __instance.mouseOverTargetType = tarType;
                __instance.mouseOverTargetId   = tarId;
                if (__instance.mouseOverTargetGizmo != null)
                {
                    __instance.mouseOverTargetGizmo.Close();
                    __instance.mouseOverTargetGizmo = null;
                }

                if (__instance.mouseOverBuildingGizmo != null)
                {
                    __instance.mouseOverBuildingGizmo.Close();
                    __instance.mouseOverBuildingGizmo = null;
                }

                if (__instance.mouseOverMinerGizmo != null)
                {
                    __instance.mouseOverMinerGizmo.Close();
                    __instance.mouseOverMinerGizmo = null;
                }

                ModelProto proto = LDB.models.modelArray[entityData.modelIndex];
                __instance.mouseOverBuildingGizmo                 = BoxGizmo.Create(entityData.pos, entityData.rot, proto.prefabDesc.selectCenter, proto.prefabDesc.selectSize);
                __instance.mouseOverBuildingGizmo.multiplier      = 1f;
                __instance.mouseOverBuildingGizmo.alphaMultiplier = proto.prefabDesc.selectAlpha;
                __instance.mouseOverBuildingGizmo.fadeInScale     = 1.3f;
                __instance.mouseOverBuildingGizmo.fadeInTime      = 0.05f;
                __instance.mouseOverBuildingGizmo.fadeInFalloff   = 0.5f;
                __instance.mouseOverBuildingGizmo.fadeOutScale    = 1.3f;
                __instance.mouseOverBuildingGizmo.fadeOutTime     = 0.05f;
                __instance.mouseOverBuildingGizmo.fadeOutFalloff  = 0.5f;
                __instance.mouseOverBuildingGizmo.color           = Color.white;
                __instance.mouseOverBuildingGizmo.Open();
                return(false);
            }

            return(true);
        }
Exemplo n.º 2
0
        public static void AlterReference(PlayerAction_Build __instance)
        {
            if (referenceSelectionGizmo == null)
            {
                referenceSelectionGizmo                 = BoxGizmo.Create(Vector3.zero, Quaternion.identity, Vector3.zero, new Vector3(0.5f, 100f, 0.5f));
                referenceSelectionGizmo.multiplier      = 1f;
                referenceSelectionGizmo.alphaMultiplier = 0.5f;
                referenceSelectionGizmo.fadeInScale     = referenceSelectionGizmo.fadeOutScale = 1.3f;
                referenceSelectionGizmo.fadeInTime      = referenceSelectionGizmo.fadeOutTime = 0.05f;
                referenceSelectionGizmo.fadeInFalloff   = referenceSelectionGizmo.fadeOutFalloff = 0.5f;
                referenceSelectionGizmo.color           = Color.cyan;
            }

            if (areaSelectionGizmo != null)
            {
                areaSelectionGizmo.Close();
                areaSelectionGizmo = null;
            }

            bool isValidReference = false;

            if (__instance.castObjId != 0 && __instance.castObjId != referenceId && bpSelection.TryGetValue(__instance.castObjId, out BoxGizmo reference))
            {
                var       entityData = __instance.factory.entityPool[__instance.castObjId];
                ItemProto itemProto  = LDB.items.Select((int)entityData.protoId);
                if (__instance.castObjId == entityData.id &&
                    !itemProto.prefabDesc.isInserter &&
                    !itemProto.prefabDesc.isBelt &&
                    itemProto.prefabDesc.minerType == EMinerType.None)
                {
                    referenceSelectionGizmo.transform.position = reference.transform.position;
                    referenceSelectionGizmo.transform.rotation = reference.transform.rotation;
                    referenceSelectionGizmo.center             = reference.center;

                    isValidReference = true;
                }
            }


            if (isValidReference)
            {
                referenceSelectionGizmo.Open();
            }
            else
            {
                referenceSelectionGizmo.Close();
                referenceSelectionGizmo = null;
            }

            if (VFInput._buildConfirm.pressing && isValidReference)
            {
                referenceId = __instance.castObjId;

                referenceGizmo.transform.position = referenceSelectionGizmo.transform.position;
                referenceGizmo.transform.rotation = referenceSelectionGizmo.transform.rotation;
                referenceGizmo.center             = referenceSelectionGizmo.center;
            }
        }
Exemplo n.º 3
0
        public static void EndBpMode(bool ignoreBlueprint = false)
        {
            if (!bpMode)
            {
                return;
            }

            if (!ignoreBlueprint)
            {
                var ids = bpSelection.Keys.ToList();

                BlueprintManager.Copy(ids, referenceId);

                if (BlueprintManager.hasData)
                {
                    BlueprintManager.EnterBuildModeAfterBp();
                }
            }

            bpMode      = false;
            referenceId = 0;
            foreach (var selectionGizmo in bpSelection.Values)
            {
                selectionGizmo.Close();
            }

            bpSelection.Clear();
            if (areaSelectionGizmo != null)
            {
                areaSelectionGizmo.Close();
                areaSelectionGizmo = null;
            }
            if (referenceGizmo != null)
            {
                referenceGizmo.Close();
                referenceGizmo = null;
            }
            if (referenceSelectionGizmo != null)
            {
                referenceSelectionGizmo.Close();
                referenceSelectionGizmo = null;
            }



            GC.Collect();
        }
Exemplo n.º 4
0
        public override void UpdateGizmos(BuildModel model)
        {
            base.UpdateGizmos(model);

            //check add
            foreach (var entityData in m_SelectEntities)
            {
                //Debug.LogFormat("gizmos:{0}", entityData.id);
                //belt and prebuild no gizmos
                if (entityData.id == 0)                                 //		|| entityData.id <= 0
                {
                    continue;
                }

                BoxGizmo gizmo = null;
                if (!m_SelectEntitiesGizmo.TryGetValue(entityData, out gizmo))
                {
                    gizmo = CreateEntityGizmo(entityData);
                    gizmo.Open();
                    m_SelectEntitiesGizmo[entityData] = gizmo;
                }
            }

            //check removed
            m_NeedRemoveGizmosKeys.Clear();
            foreach (var iter in m_SelectEntitiesGizmo)
            {
                if (!m_SelectEntities.Contains(iter.Key))
                {
                    iter.Value.Close();
                    m_NeedRemoveGizmosKeys.Add(iter.Key);
                }
            }

            foreach (var k in m_NeedRemoveGizmosKeys)
            {
                m_SelectEntitiesGizmo.Remove(k);
            }
        }
Exemplo n.º 5
0
        public static void PlayerAction_Build_GameTick_Postfix(ref PlayerAction_Build __instance)
        {
            if (bpMode)
            {
                bool removeMode = VFInput.control;

                if (circleGizmo != null)
                {
                    circleGizmo.color  = removeMode ? REMOVE_SELECTION_GIZMO_COLOR : ADD_SELECTION_GIZMO_COLOR;
                    circleGizmo.radius = MultiBuild.selectionRadius;

                    if (__instance.groundTestPos != Vector3.zero)
                    {
                        circleGizmo.position = __instance.groundTestPos;
                    }
                }

                if (VFInput._buildConfirm.pressing)
                {
                    circleGizmo.color = removeMode ? REMOVE_SELECTION_GIZMO_COLOR : ADD_SELECTION_GIZMO_COLOR;

                    // target only buildings
                    int mask  = 131072;
                    int found = Physics.OverlapBoxNonAlloc(__instance.groundTestPos, new Vector3(MultiBuild.selectionRadius, 100f, MultiBuild.selectionRadius), _tmp_cols, Maths.SphericalRotation(__instance.groundTestPos, 0f), mask, QueryTriggerInteraction.Collide);

                    PlanetPhysics planetPhysics = __instance.player.planetData.physics;
                    for (int i = 0; i < found; i++)
                    {
                        planetPhysics.GetColliderData(_tmp_cols[i], out ColliderData colliderData);
                        if (colliderData.objId > 0)
                        {
                            var entityId = colliderData.objId;
                            if (removeMode)
                            {
                                if (bpSelection.ContainsKey(entityId))
                                {
                                    bpSelection[entityId].Close();
                                    bpSelection.Remove(entityId);
                                }
                            }
                            else if (!bpSelection.ContainsKey(entityId))
                            {
                                var       entityData = __instance.factory.entityPool[entityId];
                                ItemProto itemProto  = LDB.items.Select((int)entityData.protoId);
                                var       gizmo      = BoxGizmo.Create(entityData.pos, entityData.rot, itemProto.prefabDesc.selectCenter, itemProto.prefabDesc.selectSize);
                                gizmo.multiplier      = 1f;
                                gizmo.alphaMultiplier = itemProto.prefabDesc.selectAlpha;
                                gizmo.fadeInScale     = gizmo.fadeOutScale = 1.3f;
                                gizmo.fadeInTime      = gizmo.fadeOutTime = 0.05f;
                                gizmo.fadeInFalloff   = gizmo.fadeOutFalloff = 0.5f;
                                gizmo.color           = Color.white;

                                gizmo.Open();

                                bpSelection.Add(entityId, gizmo);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 6
0
        public static void AlterSelection(PlayerAction_Build __instance)
        {
            bool removeMode = VFInput.control;

            if (referenceSelectionGizmo != null)
            {
                referenceSelectionGizmo.Close();
                referenceSelectionGizmo = null;
            }
            if (areaSelectionGizmo == null)
            {
                areaSelectionGizmo = CircleGizmo.Create(6, Vector3.zero, 10);

                areaSelectionGizmo.fadeOutScale = areaSelectionGizmo.fadeInScale = 1.8f;
                areaSelectionGizmo.fadeOutTime  = areaSelectionGizmo.fadeInTime = 0.15f;
                areaSelectionGizmo.autoRefresh  = true;
                areaSelectionGizmo.Open();
            }

            areaSelectionGizmo.color  = removeMode ? REMOVE_SELECTION_GIZMO_COLOR : ADD_SELECTION_GIZMO_COLOR;
            areaSelectionGizmo.radius = selectionRadius;

            if (__instance.groundTestPos != Vector3.zero)
            {
                areaSelectionGizmo.position = __instance.groundTestPos;
            }


            if (VFInput._buildConfirm.pressing)
            {
                areaSelectionGizmo.color = removeMode ? REMOVE_SELECTION_GIZMO_COLOR : ADD_SELECTION_GIZMO_COLOR;

                // target only buildings
                int mask  = 131072;
                int found = Physics.OverlapBoxNonAlloc(__instance.groundTestPos, new Vector3(selectionRadius, 100f, selectionRadius), _tmp_cols, Maths.SphericalRotation(__instance.groundTestPos, 0f), mask, QueryTriggerInteraction.Collide);

                PlanetPhysics planetPhysics = __instance.player.planetData.physics;

                for (int i = 0; i < found; i++)
                {
                    planetPhysics.GetColliderData(_tmp_cols[i], out ColliderData colliderData);
                    if (colliderData.objId > 0)
                    {
                        var entityId = colliderData.objId;
                        if (removeMode)
                        {
                            if (bpSelection.ContainsKey(entityId))
                            {
                                bpSelection[entityId].Close();
                                bpSelection.Remove(entityId);
                            }
                            if (entityId == referenceId)
                            {
                                referenceId = 0;
                            }
                        }
                        else if (!bpSelection.ContainsKey(entityId))
                        {
                            var       entityData = __instance.factory.entityPool[entityId];
                            ItemProto itemProto  = LDB.items.Select((int)entityData.protoId);
                            var       gizmo      = BoxGizmo.Create(entityData.pos, entityData.rot, itemProto.prefabDesc.selectCenter, itemProto.prefabDesc.selectSize);
                            gizmo.multiplier      = 1f;
                            gizmo.alphaMultiplier = itemProto.prefabDesc.selectAlpha;
                            gizmo.fadeInScale     = gizmo.fadeOutScale = 1.3f;
                            gizmo.fadeInTime      = gizmo.fadeOutTime = 0.05f;
                            gizmo.fadeInFalloff   = gizmo.fadeOutFalloff = 0.5f;
                            gizmo.color           = Color.white;

                            gizmo.Open();

                            bpSelection.Add(entityId, gizmo);
                        }
                    }
                }

                if (referenceId == 0)
                {
                    var belts     = new List <int>();
                    var buildings = new List <int>();

                    foreach (var entityId in bpSelection.Keys)
                    {
                        var entityData = __instance.factory.entityPool[entityId];

                        if (entityId != entityData.id)
                        {
                            continue;
                        }

                        ItemProto itemProto = LDB.items.Select((int)entityData.protoId);
                        if (itemProto.prefabDesc.isBelt)
                        {
                            belts.Add(entityId);
                        }
                        else if (!itemProto.prefabDesc.isInserter)
                        {
                            buildings.Add(entityId);
                        }
                    }

                    if (buildings.Count > 0)
                    {
                        referenceId = buildings.First();
                    }
                    else if (belts.Count > 0)
                    {
                        referenceId = belts.First();
                    }
                }
            }

            if (referenceId != 0 && bpSelection.TryGetValue(referenceId, out BoxGizmo reference))
            {
                if (referenceGizmo == null)
                {
                    referenceGizmo                 = BoxGizmo.Create(Vector3.zero, Quaternion.identity, Vector3.zero, new Vector3(0.5f, 100f, 0.5f));
                    referenceGizmo.multiplier      = 1f;
                    referenceGizmo.alphaMultiplier = 0.5f;
                    referenceGizmo.fadeInScale     = referenceGizmo.fadeOutScale = 1.3f;
                    referenceGizmo.fadeInTime      = referenceGizmo.fadeOutTime = 0.05f;
                    referenceGizmo.fadeInFalloff   = referenceGizmo.fadeOutFalloff = 0.5f;
                    referenceGizmo.color           = Color.green;

                    referenceGizmo.Open();
                }

                referenceGizmo.transform.position = reference.transform.position;
                referenceGizmo.transform.rotation = reference.transform.rotation;
                referenceGizmo.center             = reference.center;
            }
        }