public GameObject CreatePrefab() { string id = "BasicForagePlantPlanted"; string name = STRINGS.CREATURES.SPECIES.BASICFORAGEPLANTPLANTED.NAME; string desc = STRINGS.CREATURES.SPECIES.BASICFORAGEPLANTPLANTED.DESC; float mass = 100f; KAnimFile anim = Assets.GetAnim("muckroot_kanim"); string initialAnim = "idle"; EffectorValues tIER = DECOR.BONUS.TIER1; GameObject gameObject = EntityTemplates.CreatePlacedEntity(id, name, desc, mass, anim, initialAnim, Grid.SceneLayer.BuildingBack, 1, 1, tIER, default(EffectorValues), SimHashes.Creature, null, 293f); gameObject.AddOrGet <SimTemperatureTransfer>(); OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>(); occupyArea.objectLayers = new ObjectLayer[1] { ObjectLayer.Building }; gameObject.AddOrGet <EntombVulnerable>(); gameObject.AddOrGet <DrowningMonitor>(); gameObject.AddOrGet <Prioritizable>(); gameObject.AddOrGet <Uprootable>(); gameObject.AddOrGet <UprootedMonitor>(); gameObject.AddOrGet <Harvestable>(); gameObject.AddOrGet <HarvestDesignatable>(); SeedProducer seedProducer = gameObject.AddOrGet <SeedProducer>(); seedProducer.Configure("BasicForagePlant", SeedProducer.ProductionType.DigOnly, 1); gameObject.AddOrGet <BasicForagePlantPlanted>(); gameObject.AddOrGet <KBatchedAnimController>().randomiseLoopedOffset = true; return(gameObject); }
public static GameObject CreateArtifact(string id, string name, string desc, string initial_anim, string ui_anim, ArtifactTier artifact_tier, PostInitFn postInitFn = null, SimHashes element = SimHashes.Creature) { GameObject gameObject = EntityTemplates.CreateLooseEntity("artifact_" + id.ToLower(), name, desc, 25f, true, Assets.GetAnim("artifacts_kanim"), initial_anim, Grid.SceneLayer.Ore, EntityTemplates.CollisionShape.RECTANGLE, 1f, 1f, true, SORTORDER.BUILDINGELEMENTS, element, new List <Tag> { GameTags.MiscPickupable }); OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>(); occupyArea.OccupiedCellsOffsets = EntityTemplates.GenerateOffsets(1, 1); DecorProvider decorProvider = gameObject.AddOrGet <DecorProvider>(); decorProvider.SetValues(artifact_tier.decorValues); decorProvider.overrideName = gameObject.name; SpaceArtifact spaceArtifact = gameObject.AddOrGet <SpaceArtifact>(); spaceArtifact.SetUIAnim(ui_anim); spaceArtifact.SetArtifactTier(artifact_tier); gameObject.AddOrGet <KSelectable>(); gameObject.GetComponent <KBatchedAnimController>().initialMode = KAnim.PlayMode.Loop; postInitFn?.Invoke(gameObject); KPrefabID component = gameObject.GetComponent <KPrefabID>(); component.AddTag(GameTags.PedestalDisplayable, false); component.AddTag(GameTags.Artifact, false); return(gameObject); }
protected override void OnDragTool(int cell, int distFromOrigin) { if (Grid.IsValidCell(cell)) { foreach (HarvestDesignatable item in Components.HarvestDesignatables.Items) { OccupyArea area = item.area; if (Grid.PosToCell(item) == cell || ((Object)area != (Object)null && area.CheckIsOccupying(cell))) { if (options["HARVEST_WHEN_READY"] == ToolParameterMenu.ToggleState.On) { item.SetHarvestWhenReady(true); } else if (options["DO_NOT_HARVEST"] == ToolParameterMenu.ToggleState.On) { item.SetHarvestWhenReady(false); } Prioritizable component = item.GetComponent <Prioritizable>(); if ((Object)component != (Object)null) { component.SetMasterPriority(ToolMenu.Instance.PriorityScreen.GetLastSelectedPriority()); } } } } }
public GameObject CreatePrefab() { GameObject gameObject = EntityTemplates.CreatePlacedEntity("SetLocker", STRINGS.BUILDINGS.PREFABS.SETLOCKER.NAME, STRINGS.BUILDINGS.PREFABS.SETLOCKER.DESC, 100f, Assets.GetAnim("setpiece_locker_kanim"), "on", Grid.SceneLayer.Building, 1, 2, TUNING.BUILDINGS.DECOR.BONUS.TIER0, NOISE_POLLUTION.NOISY.TIER0, SimHashes.Creature, null, 293f); PrimaryElement component = gameObject.GetComponent <PrimaryElement>(); component.SetElement(SimHashes.Unobtanium); component.Temperature = 294.15f; Workable workable = gameObject.AddOrGet <Workable>(); workable.synchronizeAnims = false; workable.resetProgressOnStop = true; SetLocker setLocker = gameObject.AddOrGet <SetLocker>(); setLocker.overrideAnim = "anim_interacts_clothingfactory_kanim"; setLocker.dropOffset = new Vector2I(0, 1); setLocker.possible_contents_ids = new string[3] { "Warm_Vest", "Cool_Vest", "Funky_Vest" }; gameObject.AddOrGet <LoreBearer>(); OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>(); occupyArea.objectLayers = new ObjectLayer[1] { ObjectLayer.Building }; return(gameObject); }
public static void CreateBaseOreTemplates() { baseOreTemplate = new GameObject("OreTemplate"); Object.DontDestroyOnLoad(baseOreTemplate); baseOreTemplate.SetActive(false); baseOreTemplate.AddComponent <KPrefabID>(); baseOreTemplate.AddComponent <PrimaryElement>(); baseOreTemplate.AddComponent <Pickupable>(); baseOreTemplate.AddComponent <KSelectable>(); baseOreTemplate.AddComponent <SaveLoadRoot>(); baseOreTemplate.AddComponent <StateMachineController>(); baseOreTemplate.AddComponent <Clearable>(); baseOreTemplate.AddComponent <Prioritizable>(); baseOreTemplate.AddComponent <KBatchedAnimController>(); baseOreTemplate.AddComponent <SimTemperatureTransfer>(); baseOreTemplate.AddComponent <Modifiers>(); OccupyArea occupyArea = baseOreTemplate.AddOrGet <OccupyArea>(); occupyArea.OccupiedCellsOffsets = new CellOffset[1] { default(CellOffset) }; DecorProvider decorProvider = baseOreTemplate.AddOrGet <DecorProvider>(); decorProvider.baseDecor = -10f; decorProvider.baseRadius = 1f; baseOreTemplate.AddOrGet <ElementChunk>(); }
public GameObject CreatePrefab() { int num = 1; int height = 1; string id = "PropLadder"; string name = STRINGS.BUILDINGS.PREFABS.PROPLADDER.NAME; string desc = STRINGS.BUILDINGS.PREFABS.PROPLADDER.DESC; float mass = 50f; int width = num; GameObject gameObject = EntityTemplates.CreatePlacedEntity(id, name, desc, mass, Assets.GetAnim("ladder_poi_kanim"), "off", Grid.SceneLayer.Building, width, height, TUNING.BUILDINGS.DECOR.BONUS.TIER0, NOISE_POLLUTION.NOISY.TIER0, SimHashes.Creature, null, 293f); PrimaryElement component = gameObject.GetComponent <PrimaryElement>(); component.SetElement(SimHashes.Polypropylene); component.Temperature = 294.15f; Ladder ladder = gameObject.AddOrGet <Ladder>(); ladder.upwardsMovementSpeedMultiplier = 1.5f; ladder.downwardsMovementSpeedMultiplier = 1.5f; gameObject.AddOrGet <AnimTileable>(); OccupyArea obj = gameObject.AddOrGet <OccupyArea>(); Object.DestroyImmediate(obj); obj = gameObject.AddOrGet <OccupyArea>(); obj.OccupiedCellsOffsets = EntityTemplates.GenerateOffsets(num, height); obj.objectLayers = new ObjectLayer[1] { ObjectLayer.Building }; return(gameObject); }
private static GameObject ConfigPlacedEntity(GameObject template, string id, string name, string desc, float mass, KAnimFile anim, string initialAnim, Grid.SceneLayer sceneLayer, int width, int height, EffectorValues decor, EffectorValues noise = default(EffectorValues), SimHashes element = SimHashes.Creature, List <Tag> additionalTags = null, float defaultTemperature = 293f) { if ((Object)anim == (Object)null) { Debug.LogErrorFormat("Cant create [{0}] entity without an anim", name); } ConfigBasicEntity(template, id, name, desc, mass, true, anim, initialAnim, sceneLayer, element, additionalTags, defaultTemperature); KBoxCollider2D kBoxCollider2D = template.AddOrGet <KBoxCollider2D>(); kBoxCollider2D.size = new Vector2f(width, height); float num = 0.5f * (float)((width + 1) % 2); kBoxCollider2D.offset = new Vector2f(num, (float)height / 2f); KBatchedAnimController component = template.GetComponent <KBatchedAnimController>(); component.Offset = new Vector3(num, 0f, 0f); OccupyArea occupyArea = template.AddOrGet <OccupyArea>(); occupyArea.OccupiedCellsOffsets = GenerateOffsets(width, height); DecorProvider decorProvider = template.AddOrGet <DecorProvider>(); decorProvider.SetValues(decor); decorProvider.overrideName = name; return(template); }
public void OnPrefabInit(GameObject inst) { OccupyArea component = inst.GetComponent <OccupyArea>(); component.objectLayers = new ObjectLayer[1] { ObjectLayer.Building }; }
public bool TestSuitableGround(int cell) { if (!Grid.IsValidCell(cell)) { return(false); } int num = (Direction != SingleEntityReceptacle.ReceptacleDirection.Bottom) ? Grid.CellBelow(cell) : Grid.CellAbove(cell); if (!Grid.IsValidCell(num)) { return(false); } if (Grid.Foundation[num]) { return(false); } if (Grid.Element[num].hardness >= 150) { return(false); } if (replantGroundTag.IsValid && !Grid.Element[num].HasTag(replantGroundTag)) { return(false); } GameObject prefab = Assets.GetPrefab(PlantID); EntombVulnerable component = prefab.GetComponent <EntombVulnerable>(); if ((Object)component != (Object)null && !component.IsCellSafe(cell)) { return(false); } DrowningMonitor component2 = prefab.GetComponent <DrowningMonitor>(); if ((Object)component2 != (Object)null && !component2.IsCellSafe(cell)) { return(false); } TemperatureVulnerable component3 = prefab.GetComponent <TemperatureVulnerable>(); if ((Object)component3 != (Object)null && !component3.IsCellSafe(cell)) { return(false); } UprootedMonitor component4 = prefab.GetComponent <UprootedMonitor>(); if ((Object)component4 != (Object)null && !component4.IsCellSafe(cell)) { return(false); } OccupyArea component5 = prefab.GetComponent <OccupyArea>(); if ((Object)component5 != (Object)null && !component5.CanOccupyArea(cell, ObjectLayer.Building)) { return(false); } return(true); }
public Instance(IStateMachineTarget master) : base(master) { health = GetComponent <Health>(); occupyArea = GetComponent <OccupyArea>(); internalTemperatureMonitor = base.gameObject.GetSMI <TemperatureMonitor.Instance>(); internalTemperature = Db.Get().Amounts.Temperature.Lookup(base.gameObject); temperatureTransferer = base.gameObject.GetComponent <CreatureSimTemperatureTransfer>(); primaryElement = base.gameObject.GetComponent <PrimaryElement>(); attributes = base.gameObject.GetAttributes(); }
private void CreateOverlayIcon() { if (!((UnityEngine.Object)HarvestWhenReadyOverlayIcon != (UnityEngine.Object)null) && (UnityEngine.Object)GetComponent <AttackableBase>() == (UnityEngine.Object)null) { HarvestWhenReadyOverlayIcon = Util.KInstantiate(Assets.UIPrefabs.HarvestWhenReadyOverlayIcon, GameScreenManager.Instance.worldSpaceCanvas, null).GetComponent <RectTransform>(); OccupyArea component = GetComponent <OccupyArea>(); Extents extents = component.GetExtents(); KPrefabID component2 = GetComponent <KPrefabID>(); TransformExtensions.SetPosition(position: component2.HasTag(GameTags.Hanging) ? new Vector3((float)(extents.x + extents.width / 2) + 0.5f, (float)(extents.y + extents.height)) : new Vector3((float)(extents.x + extents.width / 2) + 0.5f, (float)extents.y), transform: HarvestWhenReadyOverlayIcon.transform); RefreshOverlayIcon(null); } }
public Splat(DecorProvider provider) { this = default(Splat); AttributeInstance decor = provider.decor; this.decor = 0f; if (decor != null) { this.decor = decor.GetTotalValue(); } if (provider.HasTag(GameTags.Stored)) { this.decor = 0f; } int num = Grid.PosToCell(provider.gameObject); if (Grid.IsValidCell(num)) { if (!Grid.Transparent[num] && Grid.Solid[num] && (UnityEngine.Object)provider.simCellOccupier == (UnityEngine.Object)null) { this.decor = 0f; } if (this.decor != 0f) { provider.cellCount = 0; this.provider = provider; int num2 = 5; AttributeInstance decorRadius = provider.decorRadius; if (decorRadius != null) { num2 = (int)decorRadius.GetTotalValue(); } Orientation orientation = Orientation.Neutral; if ((bool)provider.rotatable) { orientation = provider.rotatable.GetOrientation(); } OccupyArea occupyArea = provider.occupyArea; extents = occupyArea.GetExtents(orientation); extents.x = Mathf.Max(extents.x - num2, 0); extents.y = Mathf.Max(extents.y - num2, 0); extents.width = Mathf.Min(extents.width + num2 * 2, Grid.WidthInCells - 1); extents.height = Mathf.Min(extents.height + num2 * 2, Grid.HeightInCells - 1); partitionerEntry = GameScenePartitioner.Instance.Add("DecorProvider.SplatCollectDecorProviders", provider.gameObject, extents, GameScenePartitioner.Instance.decorProviderLayer, provider.onCollectDecorProvidersCallback); solidChangedPartitionerEntry = GameScenePartitioner.Instance.Add("DecorProvider.SplatSolidCheck", provider.gameObject, extents, GameScenePartitioner.Instance.solidChangedLayer, provider.refreshPartionerCallback); AddDecor(); } } }
public GameObject CreatePrefab() { GameObject gameObject = EntityTemplates.CreatePlacedEntity("PropLight", STRINGS.BUILDINGS.PREFABS.PROPLIGHT.NAME, STRINGS.BUILDINGS.PREFABS.PROPLIGHT.DESC, 50f, Assets.GetAnim("setpiece_light_kanim"), "off", Grid.SceneLayer.Building, 1, 1, TUNING.BUILDINGS.DECOR.BONUS.TIER0, NOISE_POLLUTION.NOISY.TIER0, SimHashes.Creature, null, 293f); PrimaryElement component = gameObject.GetComponent <PrimaryElement>(); component.SetElement(SimHashes.Steel); component.Temperature = 294.15f; OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>(); occupyArea.objectLayers = new ObjectLayer[1] { ObjectLayer.Building }; return(gameObject); }
protected override void OnSpawn() { base.OnSpawn(); if (isMarkedForHarvest) { MarkForHarvest(); } Components.HarvestDesignatables.Add(this); Subscribe(493375141, OnRefreshUserMenuDelegate); Subscribe(2127324410, OnCancelDelegate); Game.Instance.Subscribe(1248612973, onEnableOverlayDelegate); Game.Instance.Subscribe(1798162660, onEnableOverlayDelegate); Game.Instance.Subscribe(2015652040, OnDisableOverlay); area = GetComponent <OccupyArea>(); }
public void OnPrefabInit(GameObject inst) { OccupyArea component = inst.GetComponent <OccupyArea>(); component.objectLayers = new ObjectLayer[1] { ObjectLayer.Building }; int cell = Grid.PosToCell(inst); CellOffset[] occupiedCellsOffsets = component.OccupiedCellsOffsets; foreach (CellOffset offset in occupiedCellsOffsets) { Grid.GravitasFacility[Grid.OffsetCell(cell, offset)] = true; } }
public void OnPrefabInit(GameObject inst) { GeneShuffler component = inst.GetComponent <GeneShuffler>(); component.workLayer = Grid.SceneLayer.Building; Ownable component2 = inst.GetComponent <Ownable>(); component2.slotID = Db.Get().AssignableSlots.GeneShuffler.Id; OccupyArea component3 = inst.GetComponent <OccupyArea>(); component3.objectLayers = new ObjectLayer[1] { ObjectLayer.Building }; inst.GetComponent <Deconstructable>(); }
static void Postfix(OccupyArea __instance, ref Extents __result) { // Hacky manipulation to get the splat to be the right size/shape... if (__instance.name == "CarpetTileComplete") { int radius = Options.Opts.CarpetTile.DecorRadius; if (Grid.IsSolidCell(Grid.CellAbove(Grid.PosToCell(__instance.gameObject)))) { __result.x += radius; __result.width = -(radius * 2 - 1); } __result.y += radius; __result.height = -(radius * 2 - 2); } }
protected override void OnSpawn() { OccupyArea component = GetComponent <OccupyArea>(); if ((Object)component != (Object)null) { this.extents = component.GetExtents(); } else { Building component2 = GetComponent <Building>(); this.extents = component2.GetExtents(); } Extents extents = new Extents(this.extents.x - 1, this.extents.y - 1, this.extents.width + 2, this.extents.height + 2); partitionerEntry = GameScenePartitioner.Instance.Add("AnimTileable.OnSpawn", base.gameObject, extents, GameScenePartitioner.Instance.objectLayers[(int)objectLayer], OnNeighbourCellsUpdated); UpdateEndCaps(); }
public static GameObject MakeHangingOffsets(GameObject template, int width, int height) { KBoxCollider2D component = template.GetComponent <KBoxCollider2D>(); if ((bool)component) { component.size = new Vector2f(width, height); float a = 0.5f * (float)((width + 1) % 2); component.offset = new Vector2f(a, (float)(-height) / 2f + 1f); } OccupyArea component2 = template.GetComponent <OccupyArea>(); if ((bool)component2) { component2.OccupiedCellsOffsets = GenerateHangingOffsets(width, height); } return(template); }
public NoiseSplat(NoisePolluter setProvider, float death_time = 0f) { deathTime = death_time; dB = 0; radius = 5; if (setProvider.dB != null) { dB = (int)setProvider.dB.GetTotalValue(); } int cell = Grid.PosToCell(setProvider.gameObject); if (!NoisePolluter.IsNoiseableCell(cell)) { dB = 0; } if (dB != 0) { setProvider.Clear(); OccupyArea occupyArea = setProvider.occupyArea; baseExtents = occupyArea.GetExtents(); provider = setProvider; position = setProvider.transform.GetPosition(); if (setProvider.dBRadius != null) { radius = (int)setProvider.dBRadius.GetTotalValue(); } if (radius != 0) { int x = 0; int y = 0; Grid.CellToXY(cell, out x, out y); int widthInCells = occupyArea.GetWidthInCells(); int heightInCells = occupyArea.GetHeightInCells(); Vector2I vector2I = new Vector2I(x - radius, y - radius); Vector2I v = vector2I + new Vector2I(radius * 2 + widthInCells, radius * 2 + heightInCells); vector2I = Vector2I.Max(vector2I, Vector2I.zero); v = Vector2I.Min(v, new Vector2I(Grid.WidthInCells - 1, Grid.HeightInCells - 1)); effectExtents = new Extents(vector2I.x, vector2I.y, v.x - vector2I.x, v.y - vector2I.y); partitionerEntry = GameScenePartitioner.Instance.Add("NoiseSplat.SplatCollectNoisePolluters", setProvider.gameObject, effectExtents, GameScenePartitioner.Instance.noisePolluterLayer, setProvider.onCollectNoisePollutersCallback); solidChangedPartitionerEntry = GameScenePartitioner.Instance.Add("NoiseSplat.SplatSolidCheck", setProvider.gameObject, effectExtents, GameScenePartitioner.Instance.solidChangedLayer, setProvider.refreshPartionerCallback); } } }
protected override void OnSpawn() { OccupyArea component = base.GetComponent <OccupyArea>(); if (component != null) { this.extents = component.GetExtents(); } else { Building component2 = base.GetComponent <Building>(); this.extents = component2.GetExtents(); } Extents extents = new Extents(this.extents.x - 1, this.extents.y - 1, this.extents.width + 2, this.extents.height + 2); this.partitionerEntry = GameScenePartitioner.Instance.Add("AnimStairs.OnNeighbourCellsUpdated", base.gameObject, extents, GameScenePartitioner.Instance.objectLayers[(int)this.objectLayer], new Action <object>(this.OnNeighbourCellsUpdated)); //int cell = Grid.PosToCell(base.gameObject); //this.partitionerEntry2 = GameScenePartitioner.Instance.Add("AnimStairs.OnNavChanged", base.gameObject, cell, GameScenePartitioner.Instance.validNavCellChangedLayer, new Action<object>(this.OnNavChanged)); this.UpdateEndCaps(); //this.UpadateRotation(); }
private static void DoWorldDamage(GameObject part, Vector3 apparentPosition) { OccupyArea component = part.GetComponent <OccupyArea>(); component.UpdateOccupiedArea(); CellOffset[] occupiedCellsOffsets = component.OccupiedCellsOffsets; foreach (CellOffset offset in occupiedCellsOffsets) { int num = Grid.OffsetCell(Grid.PosToCell(apparentPosition), offset); if (Grid.IsValidCell(num)) { if (Grid.Solid[num]) { WorldDamage instance = WorldDamage.Instance; int cell = num; float amount = 10000f; int src_cell = num; string source_name = BUILDINGS.DAMAGESOURCES.ROCKET; instance.ApplyDamage(cell, amount, src_cell, -1, source_name, UI.GAMEOBJECTEFFECTS.DAMAGE_POPS.ROCKET); } else if (Grid.FakeFloor[num]) { GameObject gameObject = Grid.Objects[num, 38]; if ((Object)gameObject != (Object)null) { BuildingHP component2 = gameObject.GetComponent <BuildingHP>(); if ((Object)component2 != (Object)null) { gameObject.Trigger(-794517298, new BuildingHP.DamageSourceInfo { damage = component2.MaxHitPoints, source = (string)BUILDINGS.DAMAGESOURCES.ROCKET, popString = (string)UI.GAMEOBJECTEFFECTS.DAMAGE_POPS.ROCKET }); } } } } } }
public static GameObject CreateAndRegisterPreview(string id, KAnimFile anim, string initial_anim, ObjectLayer object_layer, int width, int height) { GameObject gameObject = CreatePlacedEntity(id, id, id, 1f, anim, initial_anim, Grid.SceneLayer.Front, width, height, TUNING.BUILDINGS.DECOR.NONE, default(EffectorValues), SimHashes.Creature, null, 293f); gameObject.UpdateComponentRequirement <KSelectable>(false); gameObject.UpdateComponentRequirement <SaveLoadRoot>(false); EntityPreview entityPreview = gameObject.AddOrGet <EntityPreview>(); entityPreview.objectLayer = object_layer; OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>(); occupyArea.objectLayers = new ObjectLayer[1] { object_layer }; occupyArea.ApplyToCells = false; gameObject.AddOrGet <Storage>(); KPrefabID component = gameObject.GetComponent <KPrefabID>(); Assets.AddPrefab(component); return(gameObject); }
protected override void OnDragTool(int cell, int distFromOrigin) { if (!Grid.Solid[cell]) { foreach (Uprootable item in Components.Uprootables.Items) { if (Grid.PosToCell(item.gameObject) == cell) { item.MarkForUproot(true); break; } OccupyArea area = item.area; if ((Object)area != (Object)null && area.CheckIsOccupying(cell)) { item.MarkForUproot(true); } } } if (DebugHandler.InstantBuildMode) { if (Grid.IsValidCell(cell) && Grid.Solid[cell] && !Grid.Foundation[cell]) { WorldDamage.Instance.DestroyCell(cell, -1); } } else { GameObject gameObject = PlaceDig(cell, distFromOrigin); if ((Object)gameObject != (Object)null) { Prioritizable component = gameObject.GetComponent <Prioritizable>(); if ((Object)component != (Object)null) { component.SetMasterPriority(ToolMenu.Instance.PriorityScreen.GetLastSelectedPriority()); } } } }
public GameObject CreatePrefab() { GameObject gameObject = EntityTemplates.CreatePlacedEntity("OilWell", STRINGS.CREATURES.SPECIES.OIL_WELL.NAME, STRINGS.CREATURES.SPECIES.OIL_WELL.DESC, 2000f, Assets.GetAnim("geyser_side_oil_kanim"), "off", Grid.SceneLayer.BuildingBack, 4, 2, TUNING.BUILDINGS.DECOR.BONUS.TIER1, NOISE_POLLUTION.NOISY.TIER5, SimHashes.Creature, null, 293f); OccupyArea component = gameObject.GetComponent <OccupyArea>(); component.objectLayers = new ObjectLayer[1] { ObjectLayer.Building }; PrimaryElement component2 = gameObject.GetComponent <PrimaryElement>(); component2.SetElement(SimHashes.SedimentaryRock); component2.Temperature = 372.15f; BuildingAttachPoint buildingAttachPoint = gameObject.AddOrGet <BuildingAttachPoint>(); buildingAttachPoint.points = new BuildingAttachPoint.HardPoint[1] { new BuildingAttachPoint.HardPoint(new CellOffset(0, 0), GameTags.OilWell, null) }; SoundEventVolumeCache.instance.AddVolume("geyser_side_methane_kanim", "GeyserMethane_shake_LP", NOISE_POLLUTION.NOISY.TIER5); SoundEventVolumeCache.instance.AddVolume("geyser_side_methane_kanim", "GeyserMethane_erupt_LP", NOISE_POLLUTION.NOISY.TIER6); return(gameObject); }
public GameObject CreatePrefab() { string name = DUPLICANTS.MODIFIERS.BASEDUPLICANT.NAME; GameObject gameObject = EntityTemplates.CreateEntity(ID, name, true); gameObject.AddOrGet <StateMachineController>(); MinionModifiers modifiers = gameObject.AddOrGet <MinionModifiers>(); AddMinionAmounts(modifiers); AddMinionTraits(name, modifiers); gameObject.AddOrGet <MinionBrain>(); gameObject.AddOrGet <KPrefabID>().AddTag(GameTags.DupeBrain, false); gameObject.AddOrGet <Worker>(); gameObject.AddOrGet <ChoreConsumer>(); Storage storage = gameObject.AddOrGet <Storage>(); storage.fxPrefix = Storage.FXPrefix.PickedUp; storage.dropOnLoad = true; storage.SetDefaultStoredItemModifiers(new List <Storage.StoredItemModifier> { Storage.StoredItemModifier.Preserve, Storage.StoredItemModifier.Seal }); gameObject.AddOrGet <Health>(); OxygenBreather oxygenBreather = gameObject.AddOrGet <OxygenBreather>(); oxygenBreather.O2toCO2conversion = 0.02f; oxygenBreather.lowOxygenThreshold = 0.52f; oxygenBreather.noOxygenThreshold = 0.05f; oxygenBreather.mouthOffset = new Vector2f(0.25f, 0.7f); oxygenBreather.minCO2ToEmit = 0.02f; oxygenBreather.breathableCells = new CellOffset[6] { new CellOffset(0, 0), new CellOffset(0, 1), new CellOffset(1, 1), new CellOffset(-1, 1), new CellOffset(1, 0), new CellOffset(-1, 0) }; gameObject.AddOrGet <WarmBlooded>(); gameObject.AddOrGet <MinionIdentity>(); GridVisibility gridVisibility = gameObject.AddOrGet <GridVisibility>(); gridVisibility.radius = 30f; gridVisibility.innerRadius = 20f; gameObject.AddOrGet <MiningSounds>(); gameObject.AddOrGet <SaveLoadRoot>(); gameObject.AddOrGet <AntiCluster>(); Navigator navigator = gameObject.AddOrGet <Navigator>(); navigator.NavGridName = "MinionNavGrid"; navigator.CurrentNavType = NavType.Floor; KBatchedAnimController kBatchedAnimController = gameObject.AddOrGet <KBatchedAnimController>(); kBatchedAnimController.isMovable = true; kBatchedAnimController.sceneLayer = Grid.SceneLayer.Move; kBatchedAnimController.AnimFiles = new KAnimFile[8] { Assets.GetAnim("body_comp_default_kanim"), Assets.GetAnim("anim_construction_default_kanim"), Assets.GetAnim("anim_idles_default_kanim"), Assets.GetAnim("anim_loco_firepole_kanim"), Assets.GetAnim("anim_loco_new_kanim"), Assets.GetAnim("anim_loco_tube_kanim"), Assets.GetAnim("anim_construction_firepole_kanim"), Assets.GetAnim("anim_construction_jetsuit_kanim") }; KBoxCollider2D kBoxCollider2D = gameObject.AddOrGet <KBoxCollider2D>(); kBoxCollider2D.offset = new Vector2(0f, 0.8f); kBoxCollider2D.size = new Vector2(1f, 1.5f); SnapOn snapOn = gameObject.AddOrGet <SnapOn>(); snapOn.snapPoints = new List <SnapOn.SnapPoint>(new SnapOn.SnapPoint[17] { new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"dig", buildFile = Assets.GetAnim("excavator_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"build", buildFile = Assets.GetAnim("constructor_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"fetchliquid", buildFile = Assets.GetAnim("water_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"paint", buildFile = Assets.GetAnim("painting_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"harvest", buildFile = Assets.GetAnim("plant_harvester_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"capture", buildFile = Assets.GetAnim("net_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"attack", buildFile = Assets.GetAnim("attack_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"pickup", buildFile = Assets.GetAnim("pickupdrop_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"store", buildFile = Assets.GetAnim("pickupdrop_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"disinfect", buildFile = Assets.GetAnim("plant_spray_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"tend", buildFile = Assets.GetAnim("plant_harvester_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "carry", automatic = false, context = (HashedString)string.Empty, buildFile = null, overrideSymbol = (HashedString)"snapTo_chest" }, new SnapOn.SnapPoint { pointName = "build", automatic = false, context = (HashedString)string.Empty, buildFile = null, overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "remote", automatic = false, context = (HashedString)string.Empty, buildFile = null, overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "snapTo_neck", automatic = false, context = (HashedString)string.Empty, buildFile = Assets.GetAnim("helm_oxygen_kanim"), overrideSymbol = (HashedString)"snapTo_neck" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"powertinker", buildFile = Assets.GetAnim("electrician_gun_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" }, new SnapOn.SnapPoint { pointName = "dig", automatic = false, context = (HashedString)"specialistdig", buildFile = Assets.GetAnim("excavator_kanim"), overrideSymbol = (HashedString)"snapTo_rgtHand" } }); gameObject.AddOrGet <Effects>(); gameObject.AddOrGet <Traits>(); gameObject.AddOrGet <AttributeLevels>(); gameObject.AddOrGet <AttributeConverters>(); PrimaryElement primaryElement = gameObject.AddOrGet <PrimaryElement>(); primaryElement.InternalTemperature = 310.15f; primaryElement.MassPerUnit = 30f; primaryElement.ElementID = SimHashes.Creature; gameObject.AddOrGet <ChoreProvider>(); gameObject.AddOrGetDef <DebugGoToMonitor.Def>(); gameObject.AddOrGetDef <SpeechMonitor.Def>(); gameObject.AddOrGetDef <BlinkMonitor.Def>(); gameObject.AddOrGetDef <ConversationMonitor.Def>(); gameObject.AddOrGet <Sensors>(); gameObject.AddOrGet <Chattable>(); gameObject.AddOrGet <FaceGraph>(); gameObject.AddOrGet <Accessorizer>(); gameObject.AddOrGet <Schedulable>(); LoopingSounds loopingSounds = gameObject.AddOrGet <LoopingSounds>(); loopingSounds.updatePosition = true; gameObject.AddOrGet <AnimEventHandler>(); FactionAlignment factionAlignment = gameObject.AddOrGet <FactionAlignment>(); factionAlignment.Alignment = FactionManager.FactionID.Duplicant; gameObject.AddOrGet <Weapon>(); gameObject.AddOrGet <RangedAttackable>(); gameObject.AddOrGet <CharacterOverlay>(); OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>(); occupyArea.objectLayers = new ObjectLayer[1]; occupyArea.ApplyToCells = false; occupyArea.OccupiedCellsOffsets = new CellOffset[2] { new CellOffset(0, 0), new CellOffset(0, 1) }; gameObject.AddOrGet <Pickupable>(); CreatureSimTemperatureTransfer creatureSimTemperatureTransfer = gameObject.AddOrGet <CreatureSimTemperatureTransfer>(); creatureSimTemperatureTransfer.SurfaceArea = 10f; creatureSimTemperatureTransfer.Thickness = 0.01f; gameObject.AddOrGet <SicknessTrigger>(); gameObject.AddOrGet <ClothingWearer>(); gameObject.AddOrGet <SuitEquipper>(); DecorProvider decorProvider = gameObject.AddOrGet <DecorProvider>(); decorProvider.baseRadius = 3f; decorProvider.isMovable = true; gameObject.AddOrGet <ConsumableConsumer>(); gameObject.AddOrGet <NoiseListener>(); gameObject.AddOrGet <MinionResume>(); DuplicantNoiseLevels.SetupNoiseLevels(); SetupLaserEffects(gameObject); SymbolOverrideController symbolOverrideController = SymbolOverrideControllerUtil.AddToPrefab(gameObject); symbolOverrideController.applySymbolOverridesEveryFrame = true; ConfigureSymbols(gameObject); return(gameObject); }
public override void InitializeStates(out BaseState default_state) { base.serializable = true; default_state = closed; root.Update("RefreshIsBlocked", delegate(Instance smi, float dt) { smi.RefreshIsBlocked(); }, UpdateRate.SIM_200ms, false).ParamTransition(isSealed, Sealed.closed, GameStateMachine <Controller, Instance, Door, object> .IsTrue); closeblocked.PlayAnim("open").ParamTransition(isOpen, open, GameStateMachine <Controller, Instance, Door, object> .IsTrue).ParamTransition(isBlocked, closedelay, GameStateMachine <Controller, Instance, Door, object> .IsFalse); closedelay.PlayAnim("open").ScheduleGoTo(0.5f, closing).ParamTransition(isOpen, open, GameStateMachine <Controller, Instance, Door, object> .IsTrue) .ParamTransition(isBlocked, closeblocked, GameStateMachine <Controller, Instance, Door, object> .IsTrue); closing.ParamTransition(isBlocked, closeblocked, GameStateMachine <Controller, Instance, Door, object> .IsTrue).ToggleTag(GameTags.Transition).ToggleLoopingSound("Closing loop", (Instance smi) => smi.master.doorClosingSound, (Instance smi) => !string.IsNullOrEmpty(smi.master.doorClosingSound)) .Enter("SetParams", delegate(Instance smi) { smi.master.UpdateAnimAndSoundParams(smi.master.on); }) .Update(delegate(Instance smi, float dt) { if (smi.master.doorClosingSound != null) { smi.master.loopingSounds.UpdateSecondParameter(smi.master.doorClosingSound, SOUND_PROGRESS_PARAMETER, smi.Get <KBatchedAnimController>().GetPositionPercent()); } }, UpdateRate.SIM_33ms, false) .Enter("SetActive", delegate(Instance smi) { smi.master.SetActive(true); }) .Exit("SetActive", delegate(Instance smi) { smi.master.SetActive(false); }) .PlayAnim("closing") .OnAnimQueueComplete(closed); open.PlayAnim("open").ParamTransition(isOpen, closeblocked, GameStateMachine <Controller, Instance, Door, object> .IsFalse).Enter("SetWorldStateOpen", delegate(Instance smi) { smi.master.SetWorldState(); }); closed.PlayAnim("closed").ParamTransition(isOpen, opening, GameStateMachine <Controller, Instance, Door, object> .IsTrue).ParamTransition(isLocked, locking, GameStateMachine <Controller, Instance, Door, object> .IsTrue) .Enter("SetWorldStateClosed", delegate(Instance smi) { smi.master.SetWorldState(); }); locking.PlayAnim("locked_pre").OnAnimQueueComplete(locked).Enter("SetWorldStateClosed", delegate(Instance smi) { smi.master.SetWorldState(); }); locked.PlayAnim("locked").ParamTransition(isLocked, unlocking, GameStateMachine <Controller, Instance, Door, object> .IsFalse); unlocking.PlayAnim("locked_pst").OnAnimQueueComplete(closed); opening.ToggleTag(GameTags.Transition).ToggleLoopingSound("Opening loop", (Instance smi) => smi.master.doorOpeningSound, (Instance smi) => !string.IsNullOrEmpty(smi.master.doorOpeningSound)).Enter("SetParams", delegate(Instance smi) { smi.master.UpdateAnimAndSoundParams(smi.master.on); }) .Update(delegate(Instance smi, float dt) { if (smi.master.doorOpeningSound != null) { smi.master.loopingSounds.UpdateSecondParameter(smi.master.doorOpeningSound, SOUND_PROGRESS_PARAMETER, smi.Get <KBatchedAnimController>().GetPositionPercent()); } }, UpdateRate.SIM_33ms, false) .Enter("SetActive", delegate(Instance smi) { smi.master.SetActive(true); }) .Exit("SetActive", delegate(Instance smi) { smi.master.SetActive(false); }) .PlayAnim("opening") .OnAnimQueueComplete(open); Sealed.Enter(delegate(Instance smi) { OccupyArea component = smi.master.GetComponent <OccupyArea>(); for (int i = 0; i < component.OccupiedCellsOffsets.Length; i++) { Grid.PreventFogOfWarReveal[Grid.OffsetCell(Grid.PosToCell(smi.master.gameObject), component.OccupiedCellsOffsets[i])] = false; } smi.sm.isLocked.Set(true, smi); smi.master.controlState = ControlState.Locked; smi.master.RefreshControlState(); if (smi.master.GetComponent <Unsealable>().facingRight) { KBatchedAnimController component2 = smi.master.GetComponent <KBatchedAnimController>(); component2.FlipX = true; } }).Enter("SetWorldStateClosed", delegate(Instance smi) { smi.master.SetWorldState(); }).Exit(delegate(Instance smi) { smi.sm.isLocked.Set(false, smi); smi.master.GetComponent <AccessControl>().controlEnabled = true; smi.master.controlState = ControlState.Opened; smi.master.RefreshControlState(); smi.sm.isOpen.Set(true, smi); smi.sm.isLocked.Set(false, smi); smi.sm.isSealed.Set(false, smi); }); Sealed.closed.PlayAnim("sealed", KAnim.PlayMode.Once); Sealed.awaiting_unlock.ToggleChore((Instance smi) => CreateUnsealChore(smi, true), Sealed.chore_pst); Sealed.chore_pst.Enter(delegate(Instance smi) { smi.master.hasBeenUnsealed = true; if (smi.master.GetComponent <Unsealable>().unsealed) { smi.GoTo(opening); FogOfWarMask.ClearMask(Grid.CellRight(Grid.PosToCell(smi.master.gameObject))); FogOfWarMask.ClearMask(Grid.CellLeft(Grid.PosToCell(smi.master.gameObject))); } else { smi.GoTo(Sealed.closed); } }); }