OldBlueWater/BlueWater/Assets/RayFire/Scripts/Classes/Man/RFMaterial.cs
2023-08-22 14:31:24 +09:00

271 lines
11 KiB
C#

using System;
using UnityEngine;
namespace RayFire
{
[Serializable]
public class RFMaterial
{
private string name;
public bool destructible;
public int solidity;
public float density;
public float drag;
public float angularDrag;
public PhysicMaterial material;
public float dynamicFriction;
public float staticFriction;
public float bounciness;
public RFMaterial(
string Name,
float Density,
float Drag,
float AngularDrag,
int Solidity,
bool Destructible,
float DynFriction,
float StFriction,
float Bounce)
{
name = Name;
density = Density;
drag = Drag;
angularDrag = AngularDrag;
solidity = Solidity;
destructible = Destructible;
dynamicFriction = DynFriction;
staticFriction = StFriction;
bounciness = Bounce;
}
// Get Physic material
public PhysicMaterial Material
{
get
{
PhysicMaterial physMat = new PhysicMaterial();
physMat.name = name;
physMat.dynamicFriction = dynamicFriction;
physMat.staticFriction = staticFriction;
physMat.bounciness = bounciness;
physMat.frictionCombine = PhysicMaterialCombine.Minimum;
return physMat;
}
}
}
// Material presets
[Serializable]
public class RFMaterialPresets
{
public RFMaterial heavyMetal;
public RFMaterial lightMetal;
public RFMaterial denseRock;
public RFMaterial porousRock;
public RFMaterial concrete;
public RFMaterial brick;
public RFMaterial glass;
public RFMaterial rubber;
public RFMaterial ice;
public RFMaterial wood;
public RFMaterialPresets()
{
heavyMetal = new RFMaterial ("HeavyMetal", 11f, 0f, 0.05f, 80, false, 0.75f, 0.7f, 0.17f);
lightMetal = new RFMaterial ("LightMetal", 8f, 0f, 0.05f, 50, false, 0.71f, 0.72f, 0.14f);
denseRock = new RFMaterial ("DenseRock", 4f, 0f, 0.05f, 22, true, 0.88f, 0.87f, 0.14f);
porousRock = new RFMaterial ("PorousRock", 2.5f, 0f, 0.05f, 12, true, 0.84f, 0.82f, 0.16f);
concrete = new RFMaterial ("Concrete", 3f, 0f, 0.05f, 18, true, 0.81f, 0.83f, 0.15f);
brick = new RFMaterial ("Brick", 2.3f, 0f, 0.05f, 10, true, 0.76f, 0.75f, 0.13f);
glass = new RFMaterial ("Glass", 1.8f, 0f, 0.05f, 3, true, 0.53f, 0.53f, 0.2f);
rubber = new RFMaterial ("Rubber", 1.4f, 0f, 0.05f, 1, false, 0.95f, 0.98f, 0.93f);
ice = new RFMaterial ("Ice", 1f, 0f, 0.05f, 2, true, 0.07f, 0.07f, 0f);
wood = new RFMaterial ("Wood", 0.7f, 0f, 0.05f, 4, true, 0.75f, 0.73f, 0.22f);
}
// Create physic material if it was not applied by user
public void SetMaterials()
{
if (heavyMetal.material == null)
heavyMetal.material = heavyMetal.Material;
if (lightMetal.material == null)
lightMetal.material = lightMetal.Material;
if (denseRock.material == null)
denseRock.material = denseRock.Material;
if (porousRock.material == null)
porousRock.material = porousRock.Material;
if (concrete.material == null)
concrete.material = concrete.Material;
if (brick.material == null)
brick.material = brick.Material;
if (glass.material == null)
glass.material = glass.Material;
if (rubber.material == null)
rubber.material = rubber.Material;
if (ice.material == null)
ice.material = ice.Material;
if (wood.material == null)
wood.material = wood.Material;
}
// Get density by material Type
public float Density (MaterialType materialType)
{
if (materialType == MaterialType.Concrete)
return concrete.density;
if (materialType == MaterialType.Brick)
return brick.density;
if (materialType == MaterialType.Glass)
return glass.density;
if (materialType == MaterialType.Rubber)
return rubber.density;
if (materialType == MaterialType.Ice)
return ice.density;
if (materialType == MaterialType.Wood)
return wood.density;
if (materialType == MaterialType.HeavyMetal)
return heavyMetal.density;
if (materialType == MaterialType.LightMetal)
return lightMetal.density;
if (materialType == MaterialType.DenseRock)
return denseRock.density;
if (materialType == MaterialType.PorousRock)
return porousRock.density;
return 2f;
}
// Get Drag by material Type
public float Drag (MaterialType materialType)
{
if (materialType == MaterialType.Concrete)
return concrete.drag;
if (materialType == MaterialType.Brick)
return brick.drag;
if (materialType == MaterialType.Glass)
return glass.drag;
if (materialType == MaterialType.Rubber)
return rubber.drag;
if (materialType == MaterialType.Ice)
return ice.drag;
if (materialType == MaterialType.Wood)
return wood.drag;
if (materialType == MaterialType.HeavyMetal)
return heavyMetal.drag;
if (materialType == MaterialType.LightMetal)
return lightMetal.drag;
if (materialType == MaterialType.DenseRock)
return denseRock.drag;
if (materialType == MaterialType.PorousRock)
return porousRock.drag;
return 0f;
}
// Get AngularDrag by material Type
public float AngularDrag (MaterialType materialType)
{
if (materialType == MaterialType.Concrete)
return concrete.angularDrag;
if (materialType == MaterialType.Brick)
return brick.angularDrag;
if (materialType == MaterialType.Glass)
return glass.angularDrag;
if (materialType == MaterialType.Rubber)
return rubber.angularDrag;
if (materialType == MaterialType.Ice)
return ice.angularDrag;
if (materialType == MaterialType.Wood)
return wood.angularDrag;
if (materialType == MaterialType.HeavyMetal)
return heavyMetal.angularDrag;
if (materialType == MaterialType.LightMetal)
return lightMetal.angularDrag;
if (materialType == MaterialType.DenseRock)
return denseRock.angularDrag;
if (materialType == MaterialType.PorousRock)
return porousRock.angularDrag;
return 0.05f;
}
// Get solidity by material type
public int Solidity (MaterialType materialType)
{
int solid = 1;
if (materialType == MaterialType.Concrete)
return concrete.solidity;
if (materialType == MaterialType.Brick)
return brick.solidity;
if (materialType == MaterialType.Glass)
return glass.solidity;
if (materialType == MaterialType.Rubber)
return rubber.solidity;
if (materialType == MaterialType.Ice)
return ice.solidity;
if (materialType == MaterialType.Wood)
return wood.solidity;
if (materialType == MaterialType.HeavyMetal)
return heavyMetal.solidity;
if (materialType == MaterialType.LightMetal)
return lightMetal.solidity;
if (materialType == MaterialType.DenseRock)
return denseRock.solidity;
if (materialType == MaterialType.PorousRock)
return porousRock.solidity;
return solid;
}
// Get destructible by material type
public bool Destructible (MaterialType materialType)
{
if (materialType == MaterialType.HeavyMetal)
return heavyMetal.destructible;
if (materialType == MaterialType.LightMetal)
return lightMetal.destructible;
if (materialType == MaterialType.DenseRock)
return denseRock.destructible;
if (materialType == MaterialType.PorousRock)
return porousRock.destructible;
if (materialType == MaterialType.Concrete)
return concrete.destructible;
if (materialType == MaterialType.Brick)
return brick.destructible;
if (materialType == MaterialType.Glass)
return glass.destructible;
if (materialType == MaterialType.Rubber)
return rubber.destructible;
if (materialType == MaterialType.Ice)
return ice.destructible;
if (materialType == MaterialType.Wood)
return wood.destructible;
return true;
}
// Create material by material type
public static PhysicMaterial Material (MaterialType materialType)
{
// Crete new material
if (materialType == MaterialType.HeavyMetal)
return RayfireMan.inst.materialPresets.heavyMetal.material;
if (materialType == MaterialType.LightMetal)
return RayfireMan.inst.materialPresets.lightMetal.material;
if (materialType == MaterialType.DenseRock)
return RayfireMan.inst.materialPresets.denseRock.material;
if (materialType == MaterialType.PorousRock)
return RayfireMan.inst.materialPresets.porousRock.material;
if (materialType == MaterialType.Concrete)
return RayfireMan.inst.materialPresets.concrete.material;
if (materialType == MaterialType.Brick)
return RayfireMan.inst.materialPresets.brick.material;
if (materialType == MaterialType.Glass)
return RayfireMan.inst.materialPresets.glass.material;
if (materialType == MaterialType.Rubber)
return RayfireMan.inst.materialPresets.rubber.material;
if (materialType == MaterialType.Ice)
return RayfireMan.inst.materialPresets.ice.material;
if (materialType == MaterialType.Wood)
return RayfireMan.inst.materialPresets.wood.material;
return RayfireMan.inst.materialPresets.concrete.material;
}
}
}