private BoxGizmo CreateEntityGizmo(EntityData entityData) { YHDebug.LogFormat("create gizmo {0}", entityData.id); if (entityData.id <= 0) //|| entityData.beltId != 0 { return(null); } BoxGizmo gizmo = null; ItemProto itemProto2 = LDB.items.Select(entityData.protoId); Vector3 position = entityData.pos; float num = itemProto2.prefabDesc.buildCollider.ext.magnitude * 0.7f; if (entityData.inserterId == 0) { gizmo = BoxGizmo.Create(entityData.pos, entityData.rot, itemProto2.prefabDesc.selectCenter, itemProto2.prefabDesc.selectSize); } else { ColliderData colliderData2 = player.planetData.physics.GetColliderData(entityData.colliderId); colliderData2.ext.x += 0.1f; gizmo = BoxGizmo.Create(colliderData2.pos, colliderData2.q, Vector3.zero, colliderData2.ext * 2f); } gizmo.multiplier = 1f; gizmo.alphaMultiplier = itemProto2.prefabDesc.selectAlpha; gizmo.fadeInScale = 1.3f; gizmo.fadeInTime = 0.05f; gizmo.fadeInFalloff = 0.5f; gizmo.fadeOutScale = 1.3f; gizmo.fadeOutTime = 0.05f; gizmo.fadeOutFalloff = 0.5f; gizmo.color = Color.white; return(gizmo); }
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); }
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; } }
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); } } } } } }
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; } }