Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using UnityEngine;
- using System.IO;
- using System.Threading;
- using spaar.ModLoader;
- namespace WaterMod {
- public class WaterLoader : spaar.ModLoader.Mod {
- public override string Author {
- get { return "ITR"; }
- }
- public override string DisplayName {
- get { return "WaterMod"; }
- }
- public override string Name {
- get { return "WaterMod"; }
- }
- Water water;
- public override void OnLoad() {
- Game.DontDestroyOnLoad(water=Water.Instance);
- }
- public override void OnUnload() {
- Game.Destroy(water.gameObject);
- }
- public override bool CanBeUnloaded {
- get {
- return true;
- }
- }
- public override Version Version {
- get {
- return new Version(1,0,0);
- }
- }
- }
- public class Water : SingleInstance<Water> {
- public override string Name {
- get {
- return "WaterHandler";
- }
- }
- private FloaterController floaterController;
- // private FogVolumeInscatterX2 fogVolumeInscatterX2;
- public static float waterHeight = spaar.ModLoader.Configuration.GetFloat("WaterHeight",25);
- public static float waterForce = spaar.ModLoader.Configuration.GetFloat("WaterForce",200);
- public static float massMultiplier = spaar.ModLoader.Configuration.GetFloat("MassMultiplier",2.5f);
- public static bool addRandomTorque = spaar.ModLoader.Configuration.GetBool("AddRandomWaterTorque",false);
- public static bool useMassChange = spaar.ModLoader.Configuration.GetBool("UseMassChange",false);
- public static float dragPlus = spaar.ModLoader.Configuration.GetFloat("DragPlus",5f);
- public static float dragMult = spaar.ModLoader.Configuration.GetFloat("DragMult",2f);
- public static bool useRusting = spaar.ModLoader.Configuration.GetBool("UseRusting",true);
- public static bool useSharkSoldiers = spaar.ModLoader.Configuration.GetBool("UseSharkSoldiers",true);
- public static bool useDivingArchers = spaar.ModLoader.Configuration.GetBool("UseDivingArchers",true);
- public static bool useJetJaks = spaar.ModLoader.Configuration.GetBool("UseJetJaks",true);
- public static bool useBoats = spaar.ModLoader.Configuration.GetBool("UseBoats",false);
- public static float rotForce = spaar.ModLoader.Configuration.GetFloat("RotForce",5f);
- public static bool useWaterPlane = spaar.ModLoader.Configuration.GetBool("UseWaterPlane",true);
- WaterPlane waterPlane;
- public static int RustDestroyed = 0;
- public void Start() {
- // fogVolumeInscatterX2 = gameObject.AddComponent<FogVolumeInscatterX2>();
- floaterController = gameObject.AddComponent<FloaterController>();
- spaar.Commands.RegisterHelpMessage("Water commands:\n WaterHeight /[height]\n WaterForce /[multiplier]\n EditMultiplier [name] [multiplier]\n ForceCheck\n ListFloaters /[name]\n CheckFloater [name]\n CheckRuster [name]\n WaterPlane /[bool]\n MassMultiplier /[multiplier]\n WaterAlpha /[alpha]\n RoofHeight /[height]\n FogDensity /[alpha]\n FogEndDistance /[distance]\n CountAddedOnSimulate /[bool]\n useSharkSoldiers /[bool]\n useDivingArchers /[bool]\n useJetJaks /[bool]\n useMassChange /[bool]\n DragAdd /[value]\n DragMult /[multiplier]\n UseRust /[bool]\n Boats [bool]\n UseOtherGraphiscForWater [bool]\n ChangeShaderLegacies [bool]\n AddRandomTorque [bool]\n FloaterGravity [float]");
- spaar.Commands.RegisterCommand("WaterHeight",(args,namedArgs) => {
- try {
- waterHeight = float.Parse(args[0]);
- }
- catch {
- return "WaterHeight is "+waterHeight.ToString();
- }
- return "WaterHeight was set to "+waterHeight.ToString();
- },"Sets the water level to [height] or tells you how high it is");
- spaar.Commands.RegisterCommand("WaterForce",(args,namedArgs) => {
- try {
- waterForce = float.Parse(args[0]);
- }
- catch {
- return "WaterForce is "+waterForce.ToString();
- }
- return "WaterForce was set to "+waterForce.ToString();
- },"Sets the water level to [multiplier] or tells you how high it is");
- spaar.Commands.RegisterCommand("DragMult",(args,namedArgs) => {
- try {
- dragMult = float.Parse(args[0]);
- }
- catch {
- return "DragMult is "+dragMult.ToString();
- }
- return "DragMult was set to "+dragMult.ToString();
- },"Sets DragMult to [multiplier] or tells you how high it is");
- spaar.Commands.RegisterCommand("DragPlus",(args,namedArgs) => {
- try {
- dragPlus = float.Parse(args[0]);
- }
- catch {
- return "DragPlus is "+dragPlus.ToString();
- }
- return "DragPlus was set to "+dragPlus.ToString();
- },"Sets DragPlus to [value] or tells you how high it is");
- spaar.Commands.RegisterCommand("ForceCheck",(args,namedArgs) => {
- return floaterController.AddStuff();
- },"Checks for rigidbodies without floaters");
- spaar.Commands.RegisterCommand("ListFloaters",(args,namedArgs) => {
- Floater[] floaters = floaterController.allFloaters;
- string ret = "Floaters:\n";
- for(int i = 0;i<floaters.Length;i++) {
- if(floaters[i]==null) {
- ModConsole.AddMessage(LogType.Error,"floater["+i+"] is null!");
- continue;
- }
- if(floaters[i].gameObject==null) {
- ModConsole.AddMessage(LogType.Error,"floater["+i+"].gameObject is null!");
- continue;
- }
- if(args.Length>0) {
- if(!floaters[i].gameObject.name.Contains(args[0]))
- continue;
- }
- ret += floaters[i].gameObject.name;
- if(floaters[i].gameObject.GetComponent<MyBlockInfo>()!=null)
- ret += ": " + floaters[i].gameObject.GetComponent<MyBlockInfo>().blockName;
- ret += "\n";
- }
- return ret;
- },"Lists all floaters or those containing [name] in their name");
- spaar.Commands.RegisterCommand("CheckFloater",(args,namedArgs) => {
- if(args.Length<1)
- return "You forgot to name which floater you wanted to check";
- Floater[] floaters = floaterController.allFloaters;
- string ret = "";
- for(int i = 0;i<floaters.Length;i++) {
- if(floaters[i].gameObject.name.Contains(args[0])) {
- ret += floaters[i].gameObject.name +": OriginalDrag:"+floaters[i].originalDrag.ToString() + " CurrentDrag:"+floaters[i].currentDrag.ToString()+" OriginalAngularDrag: "+floaters[i].originalAngularDrag.ToString()+" CurrentAngularDrag: "+floaters[i].currentAngularDrag.ToString()+" Multiplier: "+floaters[i].multiplier.ToString()+" OriginalMass: "+floaters[i].originalMass.ToString();
- MyBlockInfo myBlockInfo = floaters[i].gameObject.GetComponent<MyBlockInfo>();
- if(myBlockInfo!=null) {
- ret += " BlockName: "+myBlockInfo.blockName;
- }
- ret += "\n";
- }
- }
- return ret;
- },"Checks floaters that have [name] in their name");
- spaar.Commands.RegisterCommand("CheckRuster",(args,namedArgs) => {
- if(args.Length<1)
- return "You forgot to name which ruster you wanted to check";
- Ruster[] rusters = FindObjectsOfType<Ruster>();
- string ret = "";
- for(int i = 0;i<rusters.Length;i++) {
- if(rusters[i].name.Contains(args[0])) {
- ret += rusters[i].name +": Rusty:"+rusters[i].Rusty.ToString();
- MyBlockInfo myBlockInfo = rusters[i].GetComponent<MyBlockInfo>();
- if(myBlockInfo!=null) {
- ret += " BlockName: "+myBlockInfo.blockName;
- }
- ret += "\n";
- }
- }
- return ret;
- },"Checks rusters that have [name] in their name");
- spaar.Commands.RegisterCommand("EditMultiplier",(args,namedArgs) => {
- if(args.Length<1)
- return "You forgot to name which floater you wanted to edit";
- float newMultiplier = 0;
- try {
- newMultiplier = float.Parse(args[1]);
- }
- catch {
- return "Failed to parse [multiplier]";
- }
- Floater[] floaters = floaterController.allFloaters;
- string ret = "";
- for(int i = 0;i<floaters.Length;i++) {
- if(floaters[i].gameObject.name.Contains(args[0])) {
- ret += floaters[i].gameObject.name;
- MyBlockInfo myBlockInfo = floaters[i].gameObject.GetComponent<MyBlockInfo>();
- if(myBlockInfo!=null) {
- ret += ", BlockName: "+myBlockInfo.blockName;
- }
- ret += ", Changed from:"+floaters[i].multiplier;
- floaters[i].multiplier = newMultiplier;
- ret += "\n";
- }
- }
- return ret;
- },"Edits the UpForceMultipliers of floaters that have [name] in their name to [multiplier]");
- spaar.Commands.RegisterCommand("WaterPlane",(args,namedArgs) => {
- try {
- useWaterPlane = bool.Parse(args[0]);
- }
- catch {
- return "Water plane is "+useWaterPlane.ToString();
- }
- return "Set water plane to "+useWaterPlane.ToString();
- },"Changes if the WaterPlane is visible to [bool]");
- spaar.Commands.RegisterCommand("MassMultiplier",(args,namedArgs) => {
- try {
- massMultiplier = float.Parse(args[0]);
- }
- catch {
- return "MassMultiplier is "+massMultiplier.ToString();
- }
- return "Set MassMultiplier to "+massMultiplier.ToString();
- },"Changes the MassMultiplier to [multiplier]");
- spaar.Commands.RegisterCommand("WaterAlpha",(args,namedArgs) => {
- float alpha;
- try {
- alpha = float.Parse(args[0]);
- }
- catch {
- return "WaterAlpha is "+WaterPlane.waterAlpha.ToString();
- }
- if(alpha<0) {
- return "[alpha] must be bigger than 0";
- }
- else if(alpha>1) {
- return "[alpha] must be less than 1";
- }
- WaterPlane.waterAlpha = alpha;
- return "Set WaterAlpha to "+alpha.ToString();
- },"Changes the WaterAlpha to [alpha]");
- spaar.Commands.RegisterCommand("FogDensity",(args,namedArgs) => {
- float alpha;
- try {
- alpha = float.Parse(args[0]);
- }
- catch {
- return "FogDensity is "+newFogDensity.ToString();
- }
- if(alpha<0) {
- return "[alpha] must be bigger than 0";
- }
- else if(alpha>1) {
- // return "[alpha] must be less than 1";
- }
- newFogDensity = alpha;
- return "Set FogDensity to "+alpha.ToString();
- },"Changes the FogDensity to [alpha]");
- spaar.Commands.RegisterCommand("FogEndDistance",(args,namedArgs) => {
- float distance;
- try {
- distance = float.Parse(args[0]);
- }
- catch {
- return "FogEndDistance is "+newFogEndDistance.ToString();
- }
- if(distance<0) {
- return "[distance] must be bigger than 0";
- }
- else if(distance>1) {
- // return "[alpha] must be less than 1";
- }
- newFogEndDistance = distance;
- return "Set FogEndDistance to "+distance.ToString();
- },"Changes the FogEndDistance to [distance]");
- spaar.Commands.RegisterCommand("RoofHeight",(args,namedArgs) => {
- float alpha;
- try {
- alpha = float.Parse(args[0]);
- }
- catch {
- return "ROOF is "+ StatMaster.Bounding.roofHeight.ToString();
- }
- StatMaster.Bounding.roofHeight = alpha;
- return "Set ROOF to "+StatMaster.Bounding.roofHeight.ToString();
- },"Changes the bounding box height to [height]");
- spaar.Commands.RegisterCommand("CountAddedOnSimulate",(args,namedArgs) => {
- try {
- floaterController.countAddedOnSimulate = bool.Parse(args[0]);
- }
- catch {
- return "CountAddedOnSimulate is "+floaterController.countAddedOnSimulate.ToString();
- }
- return "Set CountAddedOnSimulate to "+floaterController.countAddedOnSimulate.ToString();
- },"Changes if it outputs how many of the different stuff it adds when it starts simulating");
- spaar.Commands.RegisterCommand("useSharkSoldiers",(args,namedArgs) => {
- try {
- useSharkSoldiers = bool.Parse(args[0]);
- }
- catch {
- return "useSharkSoldiers is "+useSharkSoldiers.ToString();
- }
- return "Set useSharkSoldiers to "+useSharkSoldiers.ToString();
- },"Changes useSharkSoldiers to [bool]");
- spaar.Commands.RegisterCommand("useDivingArchers",(args,namedArgs) => {
- try {
- useDivingArchers = bool.Parse(args[0]);
- }
- catch {
- return "useDivingArchers is "+useDivingArchers.ToString();
- }
- return "Set useDivingArchers to "+useDivingArchers.ToString();
- },"Changes useDivingArchers to [bool]");
- spaar.Commands.RegisterCommand("useJetJaks",(args,namedArgs) => {
- try {
- useJetJaks = bool.Parse(args[0]);
- }
- catch {
- return "useJetJaks is "+useJetJaks.ToString();
- }
- return "Set useJetJaks to "+useJetJaks.ToString();
- },"Changes useJetJaks to [bool]");
- spaar.Commands.RegisterCommand("useMassChange",(args,namedArgs) => {
- try {
- useMassChange = bool.Parse(args[0]);
- }
- catch {
- return "useMassChange is "+useMassChange.ToString();
- }
- return "Set useMassChange to "+useMassChange.ToString();
- },"Changes useMassChange to [bool]");
- spaar.Commands.RegisterCommand("UseRust",(args,namedArgs) => {
- try {
- useRusting = bool.Parse(args[0]);
- }
- catch {
- return "Use Rust is "+useRusting.ToString();
- }
- return "Set Use Rust to "+useRusting.ToString();
- },"Changes if the metal stuff will break underwater");
- spaar.Commands.RegisterCommand("Boats",(args,namedArgs) => {
- try {
- useBoats = bool.Parse(args[0]);
- }
- catch {
- return "Boats is "+useBoats.ToString();
- }
- return "Set Boats to "+useBoats.ToString();
- },"Boats.");
- spaar.Commands.RegisterCommand("RotForce",(args,namedArgs) => {
- try {
- rotForce = float.Parse(args[0]);
- }
- catch {
- return "RotForce is "+rotForce.ToString();
- }
- return "Set RotForce to "+rotForce.ToString();
- },"Changes the RotForce to [multiplier]");
- spaar.Commands.RegisterCommand("AddRandomTorque",(args,namedArgs) => {
- try {
- addRandomTorque = bool.Parse(args[0]);
- }
- catch {
- return "AddRandomTorque is "+addRandomTorque.ToString();
- }
- return "Set AddRandomTorque to "+addRandomTorque.ToString();
- },"Makes trees fall");
- spaar.Commands.RegisterCommand("FloaterGravity",(args,namedArgs) => {
- try {
- Floater.gravity = float.Parse(args[0]);
- }
- catch {
- return "FloaterGravity is "+Floater.gravity.ToString();
- }
- return "FloaterGravity was set to "+Floater.gravity.ToString();
- },"Makes the floaters assume the gravity is [float]");
- spaar.Commands.RegisterCommand("UseThreads",(args,namedArgs) => {
- if(AddPiece.isSimulating) return "This can only be done while not simulating";
- try {
- FloaterController.UseThreads = Boolean.Parse(args[0]);
- }
- catch {
- return "UseThreads is set to "+FloaterController.UseThreads;
- }
- return "Set UseThreads to "+FloaterController.UseThreads;
- },"If this is true, water will calculate multithreaded");
- if(File.Exists(Application.dataPath+"/Mods/WinterMod.dll")) {
- WINTERISHERE = true;
- ModConsole.AddMessage(LogType.Assert,("WINTER IS HERE!"));
- }
- }
- public static bool WINTERISHERE = false;
- public void FixedUpdate() {
- RustDestroyed = 0;
- }
- public static Mesh boatMesh = null;
- public static Material boatMaterial = null;
- public void Update() {
- if(useWaterPlane) {
- if(waterPlane==null) {
- waterPlane = GameObject.CreatePrimitive(PrimitiveType.Cube).AddComponent<WaterPlane>();
- if(boatMesh==null) {
- GameObject ship = GameObject.Find("SHIP");
- if(ship!=null) {
- MeshFilter[] meshFilters = ship.GetComponentsInChildren<MeshFilter>();
- for(int i = 0;i<meshFilters.Length;i++) {
- if(meshFilters[i].name=="default") {
- boatMesh = meshFilters[i].mesh;
- boatMaterial = meshFilters[i].GetComponent<MeshRenderer>().material;
- break;
- }
- }
- }
- }
- }
- }
- CameraStuff();
- }
- //float fogStartDistance = 2;
- Color fogColor = Color.white;
- float fogDensity = 0;
- //float fogEndDistance = 0;
- //FogMode fogMode = FogMode.Linear;
- //bool hasFog = false;
- Light light;
- float newFogDensity = 0.015f;
- float newFogEndDistance = 0.5f;
- public void OnLevelWasLoaded(int i) {
- /* fogStartDistance = RenderSettings.fogStartDistance;
- fogColor = RenderSettings.fogColor;
- fogDensity = RenderSettings.fogDensity;
- fogEndDistance = RenderSettings.fogEndDistance;
- fogMode = RenderSettings.fogMode;
- hasFog = RenderSettings.fog;*/
- GameObject tempGM = GameObject.Find("Directional light");
- if(tempGM!=null) {
- light = tempGM.GetComponent<Light>();
- if(tempGM!=null) {
- fogColor = light.color;
- fogDensity = light.intensity;
- }
- }
- }
- public void CameraStuff() {
- if(light==null)
- return;
- float tempWaterHeight = Water.waterHeight;
- if(waterPlane!=null) {
- tempWaterHeight = waterPlane.transform.position.y;
- }
- if(Camera.main.transform.position.y<=tempWaterHeight) {
- light.color = new Color(0.5f,0.5f,1f,0.5f);
- light.intensity = 2;
- // fogVolumeInscatterX2.FogMaterial.SetColor("_Color",new Color(0.5f,0.5f,1f,0.5f));
- // fogVolumeInscatterX2.FogMaterial.SetColor("_InscatteringColor",new Color(0.5f,0.5f,1f,0.5f));
- // fogVolumeInscatterX2.InscatteringIntensity = 20;
- // RenderSettings.fogColor = new Color(0.5f,0.5f,1f,0.5f);
- // RenderSettings.fogStartDistance = 0;
- // RenderSettings.fogEndDistance = newFogEndDistance;
- // RenderSettings.fogMode = FogMode.ExponentialSquared;
- // RenderSettings.fogDensity = newFogDensity;
- // RenderSettings.fog = true;
- }
- else {
- light.color = fogColor;
- light.intensity = fogDensity;
- /* if(RenderSettings.fogStartDistance == 0) {
- RenderSettings.fogStartDistance = fogStartDistance;
- RenderSettings.fogColor = fogColor;
- RenderSettings.fogDensity = fogDensity;
- RenderSettings.fogEndDistance = fogEndDistance;
- RenderSettings.fog = hasFog;
- RenderSettings.fogMode = fogMode;
- }*/
- }
- }
- public void OnDestroy() {
- spaar.ModLoader.Configuration.SetFloat("WaterHeight",waterHeight);
- spaar.ModLoader.Configuration.SetFloat("WaterForce",waterForce);
- spaar.ModLoader.Configuration.SetFloat("MassMultiplier",massMultiplier);
- spaar.ModLoader.Configuration.SetBool("AddRandomWaterTorque",addRandomTorque);
- spaar.ModLoader.Configuration.SetBool("UseMassChange",useMassChange);
- spaar.ModLoader.Configuration.SetFloat("DragPlus",dragPlus);
- spaar.ModLoader.Configuration.SetFloat("DragMult",dragMult);
- spaar.ModLoader.Configuration.SetBool("UseThreads",FloaterController.UseThreads);
- spaar.ModLoader.Configuration.SetBool("UseRusting",useRusting);
- spaar.ModLoader.Configuration.SetBool("UseSharkSoldiers",useSharkSoldiers);
- spaar.ModLoader.Configuration.SetBool("UseDivingArchers",useDivingArchers);
- spaar.ModLoader.Configuration.SetBool("UseJetJaks",useJetJaks);
- spaar.ModLoader.Configuration.SetBool("UseBoats",useBoats);
- spaar.ModLoader.Configuration.SetFloat("RotForce",rotForce);
- spaar.ModLoader.Configuration.SetBool("UseWaterPlane",useWaterPlane);
- spaar.ModLoader.Configuration.SetFloat("FloaterGravity",Floater.gravity);
- if(waterPlane!=null)
- Destroy(waterPlane.gameObject);
- Ruster[] allRusters = FindObjectsOfType<Ruster>();
- for(int i = 0;i<allRusters.Length;i++) {
- Destroy(allRusters[i]);
- }
- UnderWaterCannon[] allUnderWaterCannons = FindObjectsOfType<UnderWaterCannon>();
- for(int i = 0;i<allUnderWaterCannons.Length;i++) {
- Destroy(allUnderWaterCannons[i]);
- }
- UnderWaterFlamethrower[] allUnderWaterFlamethrowers = FindObjectsOfType<UnderWaterFlamethrower>();
- for(int i = 0;i<allUnderWaterFlamethrowers.Length;i++) {
- Destroy(allUnderWaterFlamethrowers[i]);
- }
- DivingArchers[] allDivingArchers = FindObjectsOfType<DivingArchers>();
- for(int i = 0;i<allDivingArchers.Length;i++) {
- Destroy(allDivingArchers[i]);
- }
- SharkSoldiers[] allSharkSoldiers = FindObjectsOfType<SharkSoldiers>();
- for(int i = 0;i<allSharkSoldiers.Length;i++) {
- Destroy(allSharkSoldiers[i]);
- }
- spaar.ModLoader.Configuration.Save();
- }
- }
- public class FloaterController : MonoBehaviour {
- public Floater[] allFloaters = new Floater[0];
- bool isSimulating = false;
- public bool countAddedOnSimulate = false;
- string[] RUSTY = { "BALLAST","PLOW","METAL","HOLDER","DRILL","HINGE","CANNON","THROWER","SAW","SPIKE","DECOUPLER","SUSPENSION","PISTON","SPINNING","GRABBER","STEERING","COG","JOINT","BLADE","PIPE" };
- Thread[] threads;
- object[] arguments;
- public string AddStuff() {
- int n,n2,n3,n4,n5;
- n = n2 = n3 = n4 = n5 = 0;
- List<Floater> floaterList = new List<Floater>();
- Rigidbody[] rigidbodies = FindObjectsOfType<Rigidbody>();
- for(int i = 0;i<rigidbodies.Length;i++) {
- if(rigidbodies[i]==null||!rigidbodies[i].gameObject.activeInHierarchy) continue;
- string currentName = rigidbodies[i].name.ToUpper().Replace(" ","");
- if(currentName.Contains("FIRETRIGGER")) continue;
- MyBlockInfo myBlockInfo = rigidbodies[i].GetComponent<MyBlockInfo>();
- float multiplier = 1;
- if(myBlockInfo!=null) {
- if(!Water.WINTERISHERE) {
- bool cont = false;
- foreach(string blockName in RUSTY) {
- if(currentName.Contains(blockName)) {
- cont = true;
- break;
- }
- }
- if(cont) {
- rigidbodies[i].gameObject.AddComponent<Ruster>();
- n2++;
- continue;
- }
- }
- if(currentName=="BALLOON") {
- multiplier *= 6;
- }
- else if(currentName.Contains("WOOD")) {
- multiplier *= 3;
- }
- else if(currentName.Contains("WHEEL")||currentName.Contains("GRIP")) {
- multiplier *= 2;
- }
- else if(currentName.Contains("BOULDER")) {
- multiplier = 0;
- }
- floaterList.Add(new Floater(rigidbodies[i],rigidbodies[i].transform,rigidbodies[i].gameObject,multiplier));
- }
- else {
- if(rigidbodies[i].name.Contains("Bone")) {
- multiplier = 0;
- }
- else if(rigidbodies[i].name.ToUpper().Contains("KNIGHT")) {
- rigidbodies[i].transform.position = new Vector3(rigidbodies[i].transform.position.x,Water.waterHeight,rigidbodies[i].transform.position.z);
- multiplier *= 2;
- }
- else if(rigidbodies[i].name.ToUpper().Contains("CANON")) {
- rigidbodies[i].gameObject.AddComponent<Ruster>();
- continue;
- }
- else if(rigidbodies[i].tag=="ObjectiveObj") {
- BreakOnForce breakOnForce = rigidbodies[i].GetComponent<BreakOnForce>();
- if(breakOnForce!=null) {
- if(breakOnForce.ForsToBrack<10)
- breakOnForce.ForsToBrack *= 2;
- }
- multiplier = 0;
- }
- floaterList.Add(new Floater(rigidbodies[i],rigidbodies[i].transform,rigidbodies[i].gameObject,multiplier));
- if(rigidbodies[i].GetComponent<ArcherAI>()!=null) {
- rigidbodies[i].gameObject.AddComponent<DivingArchers>().SinkAmount = floaterList[floaterList.Count-1].multiplier;
- }
- else if(rigidbodies[i].GetComponent<EnemyAISimple>()!=null) {
- rigidbodies[i].gameObject.AddComponent<SharkSoldiers>().SinkAmount = floaterList[floaterList.Count-1].multiplier/10;
- }
- }
- n++;
- }
- BraceCode[] braceCodes = FindObjectsOfType<BraceCode>();
- for(int i = 0;i<braceCodes.Length;i++) {
- if(braceCodes[i].GetComponent<Ruster>()==null) {
- braceCodes[i].gameObject.AddComponent<Ruster>();
- n2++;
- }
- }
- ArrowTurret[] arrowTurrets = FindObjectsOfType<ArrowTurret>();
- for(int i = 0;i<arrowTurrets.Length;i++) {
- if(arrowTurrets[i].GetComponent<UnderWaterCannon>()==null) {
- arrowTurrets[i].gameObject.AddComponent<UnderWaterCannon>().arrowTurret = arrowTurrets[i];
- n3++;
- }
- }
- FlamethrowerController[] flamethrowerControllers = FindObjectsOfType<FlamethrowerController>();
- for(int i = 0;i<flamethrowerControllers.Length;i++) {
- if(flamethrowerControllers[i].GetComponent<UnderWaterFlamethrower>()==null) {
- flamethrowerControllers[i].gameObject.AddComponent<UnderWaterFlamethrower>().flamethrowerController = flamethrowerControllers[i];
- n4++;
- }
- }
- for(int j = 0;j<allFloaters.Length;j++) {
- if(allFloaters[j]==null)
- continue;
- bool unique = true;
- for(int i = 0;i<floaterList.Count;i++) {
- if(floaterList[i]==null) {
- Debug.Log(i);
- floaterList.RemoveAt(i);
- continue;
- }
- if(floaterList[i].gameObject==allFloaters[j].gameObject) {
- unique = false;
- break;
- }
- }
- if(unique) {
- floaterList.Add(allFloaters[j]);
- }
- else {
- n--;
- n5++;
- }
- }
- allFloaters = floaterList.ToArray();
- return "Added "+n.ToString()+" Floaters (Replaced "+n5+"), "+n2.ToString()+" Rusters, "+n3.ToString()+" UnderWaterCannons, and "+n4.ToString()+" UnderWaterFlamethrowers";
- }
- private bool RequestDelete = false;
- public void CallFixedUpdate(object data) {
- int startFrom = ((int[])data)[0];
- int endBefore = ((int[])data)[1];
- int myObject = ((int[])data)[2];
- while(step!=-2) {
- while(step==-1) Thread.Sleep(0);
- if(step==-2) break;
- for(int i = startFrom;i<endBefore;i++) {
- if(allFloaters[i]==null) {
- RequestDelete = true;
- continue;
- }
- if(allFloaters[i].gameObject==null) {
- RequestDelete = true;
- allFloaters[i] = null;
- continue;
- }
- allFloaters[i].FixedUpdate();
- }
- locks[myObject] = false;
- while(step>-1) Thread.Sleep(0);
- }
- }
- public static bool UseThreads = Configuration.GetBool("UseThreads",false);
- private bool[] locks = new bool[0];
- private int step = 0;
- public void FixedUpdate() {
- if(AddPiece.isSimulating) {
- if(UseThreads) {
- if(!isSimulating) {
- //ModConsole.AddMessage(LogType.Assert,("Started all this stuff"));
- isSimulating = true;
- if(countAddedOnSimulate) {
- ModConsole.AddMessage(LogType.Assert,AddStuff());
- }
- else {
- AddStuff();
- }
- step = -1;
- //ModConsole.AddMessage(LogType.Assert,("Added stuff"));
- int numberOfThreads = 4;//Environment.ProcessorCount;
- locks = new bool[numberOfThreads];
- threads = new Thread[numberOfThreads];
- arguments = new object[numberOfThreads];
- int inEachThread = allFloaters.Length/numberOfThreads;
- for(int i = 1;i<numberOfThreads;i++) {
- threads[i] = new Thread(CallFixedUpdate);
- arguments[i] = new int[] { inEachThread*(i-1),inEachThread*i, i };
- threads[i].Start(arguments[i]);
- }
- threads[0] = new Thread(CallFixedUpdate);
- arguments[0] = new int[] { inEachThread*(numberOfThreads-1),allFloaters.Length, 0 };
- threads[0].Start(arguments[0]);
- //ModConsole.AddMessage(LogType.Assert,("Created threads"));
- }
- else {
- if(threads==null) {
- return;
- }
- for(int i = 0;i<locks.Length;i++) {
- locks[i] = true;
- }
- step = threads.Length-1;
- while(step>-1) {
- while(locks[step]) Thread.Sleep(0);
- step--;
- }
- step = 0;
- if(allFloaters!=null) {
- if(RequestDelete) {
- List<Floater> tempList = new List<Floater>();
- RequestDelete = false;
- for(int i = 0;i<allFloaters.Length;i++) {
- if(allFloaters[i]==null)
- continue;
- if(allFloaters[i].gameObject==null)
- continue;
- tempList.Add(allFloaters[i]);
- }
- allFloaters = tempList.ToArray();
- }
- }
- }
- }
- else {
- if(!isSimulating) {
- isSimulating = true;
- if(countAddedOnSimulate) {
- ModConsole.AddMessage(LogType.Assert,AddStuff());
- }
- else {
- AddStuff();
- }
- }
- else {
- for(int i = 0;i<allFloaters.Length;i++) {
- if(allFloaters[i]!=null) {
- if(allFloaters[i].gameObject==null) {
- allFloaters[i] = null;
- }
- else {
- allFloaters[i].FixedUpdate();
- }
- }
- }
- }
- }
- }
- else {
- if(isSimulating) {
- step = -2;
- RequestDelete = false;
- isSimulating = false;
- allFloaters = new Floater[0];
- threads = new Thread[0];
- arguments = new object[0];
- locks = new bool[0];
- }
- }
- }
- public void OnDestroy() {
- step = -1;
- Thread.Sleep(0);
- }
- }
- public class Floater {
- public static float gravity = spaar.ModLoader.Configuration.GetFloat("FloaterGravity",32.81f);
- public GameObject gameObject;
- public Transform transform;
- Rigidbody rigidBody;
- FireTag fireTag;
- public float originalDrag = 0;
- public float currentDrag = 0;
- public float originalAngularDrag = 0;
- public float currentAngularDrag = 0;
- public float originalMass = 1;
- public float multiplier = 1;
- public Floater(Rigidbody rigidbody,Transform transform,GameObject gameObject,float multiplier) {
- rigidBody = rigidbody;
- this.gameObject = gameObject;
- this.transform = transform;
- this.multiplier = gravity*multiplier;
- originalDrag = rigidBody.drag;
- currentDrag = originalDrag;
- originalAngularDrag = rigidBody.angularDrag;
- currentAngularDrag = originalAngularDrag;
- originalMass = rigidBody.mass;
- fireTag = gameObject.GetComponent<FireTag>();
- }
- bool above = true;
- bool isKinematic = false;
- public void FixedUpdate() {
- if(hasHadException)
- return;
- try {
- if(AddPiece.isSimulating) {
- if(fireTag!=null) {
- if(transform.position.y<=Water.waterHeight+0.1f) {
- if(fireTag.fireControllerCode!=null) {
- fireTag.fireControllerCode.DouseFire();
- fireTag = null;
- }
- }
- }
- if(transform.position.y<Water.waterHeight-0.2f) {
- if(Water.WINTERISHERE) {
- if(!rigidBody.isKinematic) {
- rigidBody.isKinematic = true;
- isKinematic = true;
- return;
- }
- }
- if(currentDrag!=rigidBody.drag||currentDrag==originalDrag) {
- originalDrag = rigidBody.drag;
- rigidBody.drag += Water.dragPlus;
- rigidBody.drag *= Water.dragMult;
- currentDrag = rigidBody.drag;
- }
- if(currentAngularDrag!=rigidBody.angularDrag||currentAngularDrag==originalAngularDrag) {
- originalAngularDrag = rigidBody.angularDrag;
- rigidBody.angularDrag += 1f;
- rigidBody.angularDrag *= 3;
- currentAngularDrag = rigidBody.angularDrag;
- }
- if(above) {
- above = false;
- if(Water.useMassChange) {
- originalMass = rigidBody.mass;
- rigidBody.mass *= Water.massMultiplier;
- if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity/10;
- rigidBody.velocity /= Water.massMultiplier;
- }
- }
- else if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity.y*Vector3.up;
- }
- }
- rigidBody.AddForce(Vector3.up*multiplier*Water.waterForce*Time.fixedDeltaTime,ForceMode.Acceleration);
- }
- else if(transform.position.y>Water.waterHeight+0.2f) {
- if(Water.WINTERISHERE&&isKinematic) {
- isKinematic = false;
- rigidBody.isKinematic = false;
- }
- if(!above) {
- above = true;
- if(Water.useMassChange) {
- rigidBody.mass = originalMass;
- if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity/10;
- rigidBody.velocity *= Water.massMultiplier;
- }
- }
- else if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity.y*Vector3.up;
- }
- rigidBody.drag = originalDrag;
- currentDrag = originalDrag;
- rigidBody.angularDrag = originalAngularDrag;
- currentAngularDrag = originalAngularDrag;
- }
- }
- else if(multiplier>0) {
- if(currentDrag!=rigidBody.drag||currentDrag==originalDrag) {
- originalDrag = rigidBody.drag;
- rigidBody.drag += Water.dragPlus;
- rigidBody.drag *= Water.dragMult;
- currentDrag = rigidBody.drag;
- }
- if(currentAngularDrag!=rigidBody.angularDrag||currentAngularDrag==originalAngularDrag) {
- originalAngularDrag = rigidBody.angularDrag;
- rigidBody.angularDrag += 1f;
- rigidBody.angularDrag *= 3;
- currentAngularDrag = rigidBody.angularDrag;
- }
- if(above) {
- above = false;
- if(Water.useMassChange) {
- originalMass = rigidBody.mass;
- rigidBody.mass *= Water.massMultiplier;
- if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity/10;
- rigidBody.velocity /= Water.massMultiplier;
- }
- }
- else if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity.y*Vector3.up;
- }
- }
- Vector3 forceToAdd = -Physics.gravity + (new Vector3(-rigidBody.angularVelocity.z,0,rigidBody.angularVelocity.x))*Water.rotForce;
- if(Water.addRandomTorque) {
- int r = UnityEngine.Random.Range((int)0,(int)100);
- if(r==0) {
- rigidBody.AddTorque(Vector3.right,ForceMode.VelocityChange);
- }
- else if(r==1) {
- rigidBody.AddTorque(-Vector3.right,ForceMode.VelocityChange);
- }
- else if(r==2) {
- rigidBody.AddTorque(Vector3.up,ForceMode.VelocityChange);
- }
- else if(r==3) {
- rigidBody.AddTorque(-Vector3.up,ForceMode.VelocityChange);
- }
- else if(r==4) {
- rigidBody.AddTorque(Vector3.forward,ForceMode.VelocityChange);
- }
- else if(r==5) {
- rigidBody.AddTorque(-Vector3.forward,ForceMode.VelocityChange);
- }
- }
- rigidBody.AddForce(forceToAdd,ForceMode.Acceleration);
- }
- }
- }
- catch(Exception e) {
- hasHadException = true;
- ModConsole.AddMessage(LogType.Exception,gameObject.name+": "+e.ToString());
- }
- }
- bool hasHadException = false;
- }
- public class Ruster : MonoBehaviour {
- public float Rusty = 1;
- public float originalMass = 1;
- bool aboveWater = true;
- Color[] originalColors;
- Material[] materials;
- Rigidbody rigidBody;
- public float maxRust = 8;
- public float originalDrag = 0;
- public float currentDrag = 0;
- public float originalAngularDrag = 0;
- public float currentAngularDrag = 0;
- public void Start() {
- Renderer[] Renderers = GetComponentsInChildren<Renderer>();
- List<Material> M = new List<Material>();
- List<Color> C = new List<Color>();
- foreach(Renderer r in Renderers) {
- if(r.material!=null) {
- M.Add(r.material);
- C.Add(r.material.color);
- }
- }
- originalColors = C.ToArray();
- materials = M.ToArray();
- rigidBody = transform.GetComponent<Rigidbody>();
- maxRust += UnityEngine.Random.Range(-0.3f,0.3f);
- }
- public void FixedUpdate() {
- if(AddPiece.isSimulating) {
- if(!Water.useRusting)
- Rusty = -1;
- if(transform.position.y>Water.waterHeight) {
- if(Rusty>0) {
- Rusty -= Time.fixedDeltaTime*0.1f;
- }
- if(rigidBody!=null) {
- if(!aboveWater) {
- aboveWater = true;
- if(!Water.useMassChange) {
- rigidBody.mass = originalMass;
- if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity/10;
- rigidBody.velocity *= Water.massMultiplier;
- }
- }
- else if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity.y*Vector3.up;
- }
- rigidBody.drag = originalDrag;
- currentDrag = originalDrag;
- rigidBody.angularDrag = originalAngularDrag;
- currentAngularDrag = originalAngularDrag;
- }
- }
- }
- else {
- Rusty += Time.fixedDeltaTime;
- if(Rusty>maxRust) {
- if(Water.RustDestroyed<4) {
- // Debug.Log(name);
- Water.RustDestroyed++;
- Destroy(gameObject);
- }
- return;
- }
- else if(Rusty>8) {
- }
- else if(Rusty>1) {
- for(int i = 0;i<materials.Length;i++) {
- materials[i].color = Color.Lerp(materials[i].color,new Color(0.5f*(Rusty-1)/4,(Rusty-1)/20,0),Time.fixedDeltaTime);
- }
- }
- else {
- for(int i = 0;i<materials.Length;i++) {
- materials[i].color = Color.Lerp(materials[i].color,originalColors[i],Time.fixedDeltaTime);
- }
- }
- if(rigidBody!=null) {
- if(currentDrag!=rigidBody.drag||currentDrag==originalDrag) {
- originalDrag = rigidBody.drag;
- rigidBody.drag += Water.dragPlus;
- rigidBody.drag *= Water.dragMult;
- currentDrag = rigidBody.drag;
- }
- if(currentAngularDrag!=rigidBody.angularDrag||currentAngularDrag==originalAngularDrag) {
- originalAngularDrag = rigidBody.angularDrag;
- rigidBody.angularDrag += 1f;
- rigidBody.angularDrag *= 3;
- currentAngularDrag = rigidBody.angularDrag;
- }
- if(aboveWater) {
- aboveWater = false;
- if(Water.useMassChange) {
- originalMass = rigidBody.mass;
- rigidBody.mass *= Water.massMultiplier;
- if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity/10;
- rigidBody.velocity /= Water.massMultiplier;
- }
- }
- else if(!rigidBody.isKinematic) {
- rigidBody.velocity -= rigidBody.velocity.y*Vector3.up;
- }
- }
- }
- }
- }
- else {
- Destroy(this);
- }
- }
- }
- public class UnderWaterCannon : MonoBehaviour {
- int hasNotShot = 3;
- public ArrowTurret arrowTurret;
- public void Start() {
- // arrowTurret = GetComponent<ArrowTurret>();
- }
- public void FixedUpdate() {
- if(AddPiece.isSimulating) {
- if(arrowTurret.hasShot) {
- if(hasNotShot==1) {
- GameObject cannonBall = GameObject.Find("CanonBallHeavy(Clone)");
- if(cannonBall==null)
- return;
- hasNotShot=0;
- cannonBall.name = "CanonBallHeavyParsed";
- cannonBall.AddComponent<Ruster>();
- }
- else {
- hasNotShot--;
- }
- }
- else {
- hasNotShot = 3;
- }
- }
- else {
- Destroy(this);
- }
- }
- }
- public class UnderWaterFlamethrower : MonoBehaviour {
- float flameUsed = 0;
- bool underWater = true;
- public FlamethrowerController flamethrowerController;
- public void FixedUpdate() {
- flamethrowerController.timeOut = false;
- if(Water.waterHeight<transform.position.y) {
- if(underWater) {
- flamethrowerController.timey = flameUsed;
- underWater = false;
- }
- flameUsed = flamethrowerController.timey;
- }
- else {
- flamethrowerController.timey = 100;
- underWater = true;
- }
- }
- }
- public class WaterPlane : MonoBehaviour {
- float speed = spaar.ModLoader.Configuration.GetFloat("WaterMovementSpeed",4);
- public static float waterAlpha = spaar.ModLoader.Configuration.GetFloat("WaterAlpha",0.9f);
- static Renderer renderer;
- static bool hasAskedAboutWaterPlane = spaar.ModLoader.Configuration.GetBool("HasAskedAboutWaterPlane",false);
- static bool useOtherGraphicsForWater = spaar.ModLoader.Configuration.GetBool("UseOtherGraphicsForWater",false);
- static bool changeShaderOfLegacies = spaar.ModLoader.Configuration.GetBool("ChangeShaderOfLegacies",true);
- static float waveHeight = spaar.ModLoader.Configuration.GetFloat("WaveHeight",0.2f);
- static bool moreWater = spaar.ModLoader.Configuration.GetBool("More Water",false);
- static int moreWaterRoot = spaar.ModLoader.Configuration.GetInt("More Water Root",2);
- static float fancyWaterSizeX = spaar.ModLoader.Configuration.GetFloat("FancyWaterSizeX",5);
- static float fancyWaterSizeZ = spaar.ModLoader.Configuration.GetFloat("FancyWaterSizeZ",5);
- static Transform myTransform;
- public void Start() {
- myTransform = transform;
- if(changeShaderOfLegacies) {
- MeshRenderer[] allMeshRenderers = FindObjectsOfType<MeshRenderer>();
- for(int i = 0;i<allMeshRenderers.Length;i++) {
- for(int j = 0;j<allMeshRenderers[i].materials.Length;j++) {
- string myName = allMeshRenderers[i].materials[j].shader.ToString();
- if((myName.Contains("Transparent/Cutout/Diffuse")||myName.Contains("Transparent/VertexLit")||myName.Contains("Transparent/Diffuse"))&&myName.Contains("Legacy")) {
- // ModConsole.AddMessage(LogType.Log,"Changed shader on "+allMeshRenderers[i].name+"["+i+"]["+j+"] ("+allMeshRenderers[i].materials[j].shader.ToString()+")");
- allMeshRenderers[i].materials[j].shader = Shader.Find("Legacy Shaders/Transparent/Cutout/VertexLit");
- }
- else {
- // ModConsole.AddMessage(LogType.Log,"Didn't change shader on "+allMeshRenderers[i].name+"["+i+"]["+j+"] ("+allMeshRenderers[i].materials[j].shader.ToString()+")");
- }
- }
- }
- }
- spaar.ModLoader.Commands.RegisterCommand("UseOtherGraphicsForWater",(args,nArgs) => {
- try {
- useOtherGraphicsForWater = bool.Parse(args[0]);
- }
- catch {
- return "UseOtherGraphicsForWater is "+useOtherGraphicsForWater.ToString();
- }
- Destroy(fancyWaterChild);
- StartCoroutine(SwitchGraphics());
- return "Set UseOtherGraphicsForWater to "+useOtherGraphicsForWater.ToString();
- },"Changes whether or not \"Water.unity3d.dll\" is used");
- spaar.ModLoader.Commands.RegisterCommand("ChangeShaderOfLegacies",(args,nArgs) => {
- try {
- changeShaderOfLegacies = bool.Parse(args[0]);
- }
- catch {
- return "ChangeShaderOfLegacies is "+changeShaderOfLegacies.ToString();
- }
- return "Set ChangeShaderOfLegacies to "+changeShaderOfLegacies.ToString()+" (This won't come into effect before you reload the level)";
- },"Changes what grass does under and over water");
- spaar.Commands.RegisterCommand("WaveHeight",(args,namedArgs) => {
- try {
- waveHeight = float.Parse(args[0]);
- }
- catch {
- return "WaveHeight is "+waveHeight.ToString();
- }
- if(fancyWaterChild==null)
- return "You need to turn on fancy water to do this!";
- fancyWaterChild.transform.localScale = new Vector3(fancyWaterChild.transform.localScale.x,waveHeight,fancyWaterChild.transform.localScale.z);
- return "WaveHeight was set to "+waveHeight.ToString();
- },"Changes the amplitude of the wave to [height] or tells you how high it is");
- spaar.ModLoader.Commands.RegisterCommand("MoreWater",(args,nArgs) => {
- try {
- moreWater = bool.Parse(args[0]);
- }
- catch {
- return "More Water is set to "+moreWater.ToString();
- }
- if(fancyWaterChild==null)
- return "You need to turn on fancy water to do this!";
- Destroy(fancyWaterChild);
- StartCoroutine(SwitchGraphics());
- return "More Water was set to "+moreWater.ToString();
- },"Makes it so water looks better");
- spaar.Commands.RegisterCommand("MoreWaterRoot",(args,namedArgs) => {
- try {
- moreWaterRoot = int.Parse(args[0]);
- }
- catch {
- return "MoreWaterRoot is "+moreWaterRoot.ToString();
- }
- if(fancyWaterChild==null)
- return "You need to turn on fancy water to do this!";
- Destroy(fancyWaterChild);
- StartCoroutine(SwitchGraphics());
- return "MoreWaterRoot was set to "+moreWaterRoot.ToString();
- },"Changes how many extra water-squares you get when using MoreWater");
- spaar.Commands.RegisterCommand("FancyWaterSizeX",(args,namedArgs) => {
- try {
- fancyWaterSizeX = float.Parse(args[0]);
- }
- catch {
- return "FancyWaterSizeX is "+fancyWaterSizeX.ToString();
- }
- if(fancyWaterChild==null)
- return "You need to turn on fancy water to do this!";
- fancyWaterChild.transform.localScale = new Vector3(fancyWaterSizeX,waveHeight,fancyWaterSizeZ);
- return "FancyWaterSizeX was set to "+fancyWaterSizeX.ToString();
- },"Changes FancyWaterSizeX");
- spaar.Commands.RegisterCommand("FancyWaterSizeZ",(args,namedArgs) => {
- try {
- fancyWaterSizeZ = float.Parse(args[0]);
- }
- catch {
- return "FancyWaterSizeZ is "+fancyWaterSizeZ.ToString();
- }
- if(fancyWaterChild==null)
- return "You need to turn on fancy water to do this!";
- fancyWaterChild.transform.localScale = new Vector3(fancyWaterSizeX,waveHeight,fancyWaterSizeZ);
- return "FancyWaterSizeZ was set to "+fancyWaterSizeZ.ToString();
- },"Changes FancyWaterSizeZ");
- spaar.Commands.RegisterCommand("FancyWaterType",(args,namedArgs) => {
- if(www.assetBundle==null)
- return "Please activate fancy water before doing this!";
- if(args.Length<1) {
- // ModConsole.AddMessage(LogType.Log,"All assetnames: ",String.Join("\n",www.assetBundle.GetAllAssetNames()));
- // ModConsole.AddMessage(LogType.Log,"All assetpaths: ",String.Join("\n",www.assetBundle.GetAllScenePaths()));
- return "All assetnames:\n"+String.Join("\n",www.assetBundle.GetAllAssetNames())+"\nCurrent name: "+assetName;
- }
- if(www.assetBundle.Contains(args[0])) {
- assetName = args[0];
- if(!useOtherGraphicsForWater)
- return "You need to turn on fancy water to do this!";
- if(fancyWater!=null)
- Destroy(fancyWater);
- if(fancyWaterChild!=null)
- Destroy(fancyWaterChild);
- StartCoroutine(SwitchGraphics());
- return "Switched asset!";
- }
- return "The named asset could not be found!";
- },"Changes the type of water used (higher or lower quality, don't write a second argument to get a list");
- renderer = GetComponent<Renderer>();
- StatMaster.Bounding.roofHeight = 100;
- BoundingBoxController boundingBoxController = FindObjectOfType<BoundingBoxController>();
- if(boundingBoxController!=null)
- boundingBoxController.roofPos.position += Vector3.up*100;
- renderer.material.shader = Shader.Find("Transparent/Diffuse");
- transform.localScale = new Vector3(512,0.1f,512);
- renderer.material.color = new Color(0.5f,0.5f,1f,waterAlpha);
- gameObject.name = "WaterPlane";
- if(!Water.WINTERISHERE)
- Destroy(GetComponent<Collider>());
- renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
- renderer.receiveShadows = true;
- if(File.Exists(Application.dataPath+"/Mods/Resources/Water.unity3d.dll")) {
- if(!hasAskedAboutWaterPlane) {
- showGUI = true;
- }
- else {
- StartCoroutine(SwitchGraphics());
- }
- }
- }
- public void Update() {
- if(!Water.useWaterPlane)
- Destroy(gameObject);
- if(Water.waterHeight>transform.position.y) {
- transform.position += Vector3.up*speed*Time.deltaTime;
- if(Water.waterHeight<transform.position.y) {
- transform.position = new Vector3(0,Water.waterHeight,0);
- }
- }
- else if(Water.waterHeight<transform.position.y) {
- transform.position -= Vector3.up*speed*Time.deltaTime;
- if(Water.waterHeight>transform.position.y) {
- transform.position = new Vector3(0,Water.waterHeight,0);
- }
- }
- }
- int windowID = Util.GetWindowID();
- Rect windowRect = new Rect(Screen.width/2-175,Screen.height/2-110,350,220);
- bool showGUI = false;
- void OnGUI() {
- if(showGUI) {
- GUI.skin = spaar.ModLoader.UI.ModGUI.Skin;
- GUI.skin.GetStyle("Label").alignment = TextAnchor.UpperCenter;
- windowRect = GUI.Window(windowID,windowRect,DoWindow,"WARNING - DECIDE WISELY");
- }
- }
- void DoWindow(int id) {
- GUILayout.Label("Water.unity3d.dll was detected!");
- GUILayout.Label("Do you wish to use this instead?");
- GUILayout.Label("You can change this at a later");
- GUILayout.Label("point of time if you type");
- GUILayout.Label("\"UseOtherGraphicsForWater true\"");
- GUILayout.Label("or");
- GUILayout.Label("\"UseOtherGraphicsForWater false\"");
- GUILayout.Label("into the console");
- GUILayout.BeginHorizontal();
- if(GUILayout.Button("YES! OF COURSE!")) {
- hasAskedAboutWaterPlane = true;
- useOtherGraphicsForWater = true;
- showGUI = false;
- StartCoroutine(SwitchGraphics());
- }
- if(GUILayout.Button("NO! NEVER! >:[")) {
- hasAskedAboutWaterPlane = true;
- useOtherGraphicsForWater = false;
- showGUI = false;
- StartCoroutine(SwitchGraphics());
- }
- GUILayout.EndHorizontal();
- GUI.DragWindow();
- }
- public void OnDestroy() {
- spaar.ModLoader.Configuration.SetInt("More Water Root",moreWaterRoot);
- spaar.ModLoader.Configuration.SetFloat("WaveHeight",waveHeight);
- spaar.ModLoader.Configuration.SetBool("More Water",moreWater);
- spaar.ModLoader.Configuration.SetBool("HasAskedAboutWaterPlane",hasAskedAboutWaterPlane);
- spaar.ModLoader.Configuration.SetBool("UseOtherGraphicsForWater",useOtherGraphicsForWater);
- spaar.ModLoader.Configuration.SetFloat("WaterMovementSpeed",speed);
- spaar.ModLoader.Configuration.SetFloat("WaterAlpha",waterAlpha);
- spaar.ModLoader.Configuration.SetBool("ChangeShaderOfLegacies",changeShaderOfLegacies);
- spaar.ModLoader.Configuration.SetFloat("FancyWaterSizeX",fancyWaterSizeX);
- spaar.ModLoader.Configuration.SetFloat("FancyWaterSizeZ",fancyWaterSizeZ);
- spaar.ModLoader.Configuration.SetString("AssetName",assetName);
- spaar.ModLoader.Configuration.Save();
- }
- static string assetName = spaar.ModLoader.Configuration.GetString("AssetName","water4example (advanced)");
- public static IEnumerator SwitchGraphics() {
- if(useOtherGraphicsForWater) {
- if(www==null) {
- www = new WWW("file:///"+Application.dataPath+"/Mods/Resources/Water.unity3d.dll");
- yield return www;
- }
- if(fancyWater==null) {
- if(string.IsNullOrEmpty(www.error)) {
- // ModConsole.AddMessage(LogType.Log,"All assetnames: ",String.Join("\n",www.assetBundle.GetAllAssetNames()));
- // ModConsole.AddMessage(LogType.Log,"All assetpaths: ",String.Join("\n",www.assetBundle.GetAllScenePaths()));
- fancyWater = www.assetBundle.LoadAsset("water4example (advanced)",typeof(GameObject));//assetName);
- if(fancyWater==null) {
- ModConsole.AddMessage(LogType.Error,"Loaded water, but it's null :/");
- yield break;
- }
- Debug.Log(fancyWater.GetType()+"\n"+fancyWater.ToString());
- }
- else {
- ModConsole.AddMessage(LogType.Error,"Error when loading Water",www.error);
- yield break;
- }
- }
- try {
- fancyWaterChild = (GameObject)Instantiate(fancyWater);
- }
- catch(Exception e) {
- Debug.LogError("Error: "+e+"\n"+fancyWater.GetType().ToString()+'\n'+fancyWater.ToString());
- yield break;
- }
- if(fancyWaterChild==null) {
- ModConsole.AddMessage(LogType.Error,"Instantiated water, but it's null :/");
- yield break;
- }
- myTransform.localScale = Vector3.one;
- fancyWaterChild.transform.localScale = new Vector3(fancyWaterSizeX,waveHeight,fancyWaterSizeZ);
- fancyWaterChild.transform.parent = myTransform;
- fancyWaterChild.transform.localPosition = Vector3.zero;
- renderer.enabled = false;
- if(moreWater) {
- for(int x = -moreWaterRoot;x<=moreWaterRoot;x++) {
- for(int z = -moreWaterRoot;z<=moreWaterRoot;z++) {
- if(x==0&&z==0)
- continue;
- GameObject tempWater = (GameObject)Instantiate(fancyWater);
- tempWater.transform.parent = fancyWaterChild.transform;
- tempWater.transform.localScale = Vector3.one;
- tempWater.transform.position = new Vector3(x*250,fancyWaterChild.transform.position.y,z*250);
- tempWater.GetComponentInChildren<Renderer>().material.color = Color.green;
- }
- }
- }
- }
- else {
- myTransform.localScale = new Vector3(512,0.1f,512);
- renderer.enabled = true;
- }
- yield break;
- }
- static WWW www;
- static UnityEngine.Object fancyWater;
- static GameObject fancyWaterChild;
- }
- public class DivingArchers : MonoBehaviour {
- ArcherAI archerAI;
- EnemyAISimple enemyAISimple;
- BleedOnJointBreak bleedOnJointBreak;
- Rigidbody rigidBody;
- public float SinkAmount = 0;
- Machine machine;
- public void Start() {
- if(!Water.useDivingArchers)
- Destroy(this);
- machine = Machine.Active();
- archerAI = GetComponent<ArcherAI>();
- archerAI.maxRange = 1;
- enemyAISimple = GetComponent<EnemyAISimple>();
- rigidBody = GetComponent<Rigidbody>();
- bleedOnJointBreak = GetComponent<BleedOnJointBreak>();
- if(bleedOnJointBreak!=null) {
- bleedOnJointBreak.deathThreshold = 400;
- }
- }
- public void FixedUpdate() {
- if((machine.MiddlePosition-transform.position).magnitude<5) {
- rigidBody.AddForce(Vector3.down*SinkAmount*Water.waterForce,ForceMode.Acceleration);
- }
- }
- }
- public class SharkSoldiers : MonoBehaviour {
- EnemyAISimple enemyAISimple;
- BleedOnJointBreak bleedOnJointBreak;
- Rigidbody rigidBody;
- SetPoseOnDisrens setPoseOnDisrens;
- public float SinkAmount = 0;
- public bool JetJak = false;
- public void Start() {
- if(name.ToLower().Contains("cow")) {
- JetJak = true;
- if(!Water.useJetJaks)
- Destroy(this);
- }
- else if(!Water.useSharkSoldiers) {
- Destroy(this);
- }
- // Debug.Log(name);
- enemyAISimple = GetComponent<EnemyAISimple>();
- rigidBody = GetComponent<Rigidbody>();
- bleedOnJointBreak = GetComponent<BleedOnJointBreak>();
- setPoseOnDisrens = GetComponent<SetPoseOnDisrens>();
- if(bleedOnJointBreak!=null) {
- bleedOnJointBreak.deathThreshold = 400;
- }
- if(Water.boatMesh!=null&&Water.useBoats) {
- MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
- for(int i = 0;i<meshFilters.Length;i++) {
- meshFilters[i].mesh = Water.boatMesh;
- meshFilters[i].GetComponent<MeshRenderer>().material = Water.boatMaterial;
- }
- if(setPoseOnDisrens!=null) {
- for(int i = 0;i<setPoseOnDisrens.Pos2.Length;i++)
- setPoseOnDisrens.Pos2[i] = Water.boatMesh;
- }
- }
- }
- public float speed = 400;
- public void FixedUpdate() {
- if(!AddPiece.isSimulating)
- Destroy(this);
- if(transform.position.y>Water.waterHeight+1)
- return;
- if(enemyAISimple.runAway) {
- if(enemyAISimple.isRunningAway) {
- if(enemyAISimple.runAwaySpeed<=0) {
- Vector3 forceToAdd = Vector3.down*SinkAmount*Water.waterForce;
- if(enemyAISimple.goal!=null)
- forceToAdd += transform.forward*speed;
- rigidBody.AddForce(forceToAdd,ForceMode.Acceleration);
- }
- else {
- if(enemyAISimple.runVec!=null) {
- if(new Vector3(enemyAISimple.runVec.x,0,enemyAISimple.runVec.z).sqrMagnitude<32) {
- Vector3 forceToAdd = (enemyAISimple.runVec).normalized*speed;
- if(JetJak)
- forceToAdd += (enemyAISimple.runVec).normalized*speed*4;
- rigidBody.AddForce(forceToAdd,ForceMode.Acceleration);
- }
- else if(transform.position.y>Water.waterHeight-5&&transform.position.y>2) {
- Vector3 forceToAdd = transform.forward*speed*2 + Vector3.down*SinkAmount*Water.waterForce;
- if(JetJak)
- forceToAdd += transform.forward*speed*4;
- rigidBody.AddForce(forceToAdd,ForceMode.Acceleration);
- }
- }
- else if(transform.position.y>Water.waterHeight-5&&transform.position.y>2) {
- Vector3 forceToAdd = transform.forward*speed*2 + Vector3.down*SinkAmount*Water.waterForce;
- if(JetJak)
- forceToAdd += transform.forward*speed*4;
- rigidBody.AddForce(forceToAdd,ForceMode.Acceleration);
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement