6 public static int Index = 227;
8 public int[][]
m_facesMaps = [[0, 1, 2, 3, 4, 5], [1, 2, 3, 0, 4, 5], [2, 3, 0, 1, 4, 5], [3, 0, 1, 2, 4, 5]];
9 public int[][]
m_reverseFacesMaps = [[0, 1, 2, 3, 4, 5], [3, 0, 1, 2, 4, 5], [2, 3, 0, 1, 4, 5], [1, 2, 3, 0, 4, 5]];
10 public const string fName =
"FurnitureBlock";
13 for (
int i = 0; i < 4; i++) {
34 for (
int i = 0; i < 6; i++) {
37 Color color =
new(b, b, b);
65 if ((mountingFacesMask & (1 << num2)) != 0) {
100 for (
int i = 0; i < 6; i++) {
113 if (subsystemTerrain !=
null) {
118 if (design !=
null) {
141 if (subsystemTerrain !=
null) {
144 if (design !=
null) {
145 if (!
string.IsNullOrEmpty(design.
Name)) {
155 if (subsystemTerrain !=
null) {
158 if (design !=
null) {
167 return base.IsInteractive(subsystemTerrain, value);
171 if (subsystemTerrain !=
null) {
174 if (design !=
null) {
180 return base.GetSoundMaterialName(subsystemTerrain, value);
184 if (subsystemTerrain !=
null) {
189 if (design !=
null) {
193 return base.GetCustomCollisionBoxes(subsystemTerrain, value);
197 if (subsystemTerrain !=
null) {
202 if (design !=
null) {
206 return base.GetCustomInteractionBoxes(subsystemTerrain, value);
216 if (design !=
null) {
241 else if (num2 ==
MathUtils.
Max(num, num2, num3, num4)) {
244 else if (num3 ==
MathUtils.
Max(num, num2, num3, num4)) {
247 else if (num4 ==
MathUtils.
Max(num, num2, num3, num4)) {
253 result.CellFace = raycastResult.
CellFace;
262 List<BlockDropValue> dropValues,
263 out
bool showDebris) {
274 if (design !=
null) {
279 return base.GetIconViewScale(value, environmentData);
288 if (design !=
null) {
289 List<FurnitureDesign> list = design.
CloneChain();
294 if (furnitureDesign !=
null) {
304 if (heatLevel != 0f) {
310 List<FurnitureDesign> list =
new();
311 for (
int i = 0; i < ingredients.Length; i++) {
312 if (
string.IsNullOrEmpty(ingredients[i])) {
318 if (design ==
null) {
343 if (furnitureDesign2 ==
null) {
355 Ingredients = (
string[])ingredients.Clone()
362 List<FurnitureDesign> list2 = list.Select(d => d.Clone()).ToList();
363 for (
int j = 0; j < list2.Count; j++) {
365 list2[j].LinkedDesign = list2[(j + 1) % list2.Count];
368 if (furnitureDesign3 ==
null) {
380 Ingredients = (
string[])ingredients.Clone()
387 List<FurnitureDesign> list3 = list.Select(d => d.Clone()).ToList();
388 for (
int k = 0; k < list3.Count; k++) {
390 list3[k].LinkedDesign = list3[(k + 1) % list3.Count];
393 if (furnitureDesign4 ==
null) {
405 Ingredients = (
string[])ingredients.Clone()
414 if (design !=
null) {
440 if (design !=
null) {
473 public static int SetRotation(
int data,
int rotation) => (data & -4) | (rotation & 3);
475 public static int GetDesignIndex(
int data) => (((data >> 15) & 7) << 10) | ((data >> 2) & 1023);
477 public static int SetDesignIndex(
int data,
int designIndex,
int shadowStrengthFactor,
bool isLightEmitter) {
478 int IndexI3 = designIndex >> 10;
479 int IndexI10 = designIndex & 1023;
480 data = (data & 3) | ((IndexI10 & 1023) << 2);
481 data = (data & 4095) | ((shadowStrengthFactor & 3) << 12);
482 data = (data & 16383) | ((isLightEmitter ? 1 : 0) << 14);
483 data = (data & 32767) | (IndexI3 << 15);
489 return subsystemFurnitureBlockBehavior.
GetDesign(designIndex);
static int Max(int x1, int x2)
virtual void GenerateShadedMeshVertices(Block block, int x, int y, int z, BlockMesh blockMesh, Color color, Matrix? matrix, int[] facesMap, TerrainGeometrySubset subset)
virtual void GenerateWireVertices(int value, int x, int y, int z, int mountingFace, float centerBoxSize, Vector2 centerOffset, TerrainGeometrySubset subset)
SubsystemFurnitureBlockBehavior SubsystemFurnitureBlockBehavior
virtual BlockDebrisParticleSystem CreateDebrisParticleSystem(SubsystemTerrain subsystemTerrain, Vector3 position, int value, float strength)
float DefaultIconViewScale
virtual string GetSoundMaterialName(SubsystemTerrain subsystemTerrain, int value)
float DestructionDebrisScale
virtual bool IsFaceNonAttachable(SubsystemTerrain subsystemTerrain, int face, int value, int attachBlockValue)
virtual int GetFaceTextureSlot(int face, int value)
static void DrawMeshBlock(PrimitivesRenderer3D primitivesRenderer, BlockMesh blockMesh, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
ComponentCreatureModel ComponentCreatureModel
ComponentCreature ComponentCreature
static void DecodeIngredient(string ingredient, out string craftingId, out int? data)
static void ShowDialog(ContainerWidget parentWidget, Dialog dialog)
SubsystemTerrain SubsystemTerrain
int Paint(SubsystemTerrain terrain, int value, int? color)
static int SetRotation(int data, int rotation)
static FurnitureDesign GetDesign(SubsystemFurnitureBlockBehavior subsystemFurnitureBlockBehavior, int value)
static int GetShadowStrengthFactor(int data)
static int GetRotation(int data)
override bool IsInteractive(SubsystemTerrain subsystemTerrain, int value)
ElectricConnectorType? GetConnectorType(SubsystemTerrain terrain, int value, int face, int connectorFace, int x, int y, int z)
static int SetDesignIndex(int data, int designIndex, int shadowStrengthFactor, bool isLightEmitter)
override BlockDebrisParticleSystem CreateDebrisParticleSystem(SubsystemTerrain subsystemTerrain, Vector3 position, int value, float strength)
override BoundingBox[] GetCustomInteractionBoxes(SubsystemTerrain subsystemTerrain, int value)
override void Initialize()
override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult)
方块放置方向
int[][] m_reverseFacesMaps
override void GetDropValues(SubsystemTerrain subsystemTerrain, int oldValue, int newValue, int toolLevel, List< BlockDropValue > dropValues, out bool showDebris)
static bool GetIsLightEmitter(int data)
int? GetPaintColor(int value)
override int GetEmittedLightAmount(int value)
override BoundingBox[] GetCustomCollisionBoxes(SubsystemTerrain subsystemTerrain, int value)
override string GetDisplayName(SubsystemTerrain subsystemTerrain, int value)
override string GetSoundMaterialName(SubsystemTerrain subsystemTerrain, int value)
override int GetShadowStrength(int value)
override void GenerateTerrainVertices(BlockGeometryGenerator generator, TerrainGeometry geometry, int value, int x, int y, int z)
static int GetDesignIndex(int data)
ElectricElement CreateElectricElement(SubsystemElectricity subsystemElectricity, int value, int x, int y, int z)
override bool IsFaceTransparent(SubsystemTerrain subsystemTerrain, int face, int value)
override float GetIconViewScale(int value, DrawBlockEnvironmentData environmentData)
override CraftingRecipe GetAdHocCraftingRecipe(SubsystemTerrain terrain, string[] ingredients, float heatLevel, float playerLevel)
override void DrawBlock(PrimitivesRenderer3D primitivesRenderer, int value, Color color, float size, ref Matrix matrix, DrawBlockEnvironmentData environmentData)
override bool IsMovableByPiston(int value, int pistonFace, int y, out bool isEnd)
int GetConnectionMask(int value)
FurnitureInteractionMode InteractionMode
FurnitureGeometry Geometry
BoundingBox[] GetCollisionBoxes(int rotation)
List< FurnitureDesign > CloneChain()
BoundingBox[] GetInteractionBoxes(int rotation)
BlockMesh[] SubsetOpaqueByFace
BlockMesh[] SubsetAlphaTestByFace
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
static readonly float[] LightIntensityByLightValueAndFace
static ? ElectricConnectorDirection GetConnectorDirection(int mountingFace, int rotation, int connectorFace)
SubsystemTerrain SubsystemTerrain
FurnitureDesign GetDesign(int index)
FurnitureDesign TryAddDesignChain(FurnitureDesign design, bool garbageCollectIfNeeded)
virtual SubsystemFurnitureBlockBehavior SubsystemFurnitureBlockBehavior
TerrainGeometrySubset SubsetOpaque
TerrainGeometrySubset[] AlphaTestSubsetsByFace
TerrainGeometrySubset[] OpaqueSubsetsByFace
static int ExtractContents(int value)
static int ReplaceData(int value, int data)
virtual int GetCellValue(int x, int y, int z)
static int MakeBlockValue(int contents)
static int ExtractData(int value)
static Color MultiplyColorOnly(Color c, float s)
static Matrix CreateFromQuaternion(Quaternion quaternion)
static Matrix CreateTranslation(float x, float y, float z)
static Matrix CreateRotationY(float radians)
static readonly Vector2 Zero
static readonly Vector3 UnitX
static readonly Vector3 UnitZ
static float Dot(Vector3 v1, Vector3 v2)
static int OppositeFace(int face)
static Point3 FaceToPoint3(int face)