コード例 #1
0
ファイル: BlueprintCreator.cs プロジェクト: songyandong/QOL
        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;
            }
        }
コード例 #2
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);
            }
        }
コード例 #3
0
ファイル: BlueprintCreator.cs プロジェクト: songyandong/QOL
        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;
            }
        }