From e66e1089a633ed7398c44e6f817624c7cc4fd873 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 14 Jul 2025 22:28:00 +0000 Subject: [PATCH] Production buildings (Mill, Workshop, Blacksmith) (#10) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les valeurs de productions sont boostées pour tester. L'outline drag and drop doit être redimensionner manuellement dû à des contraintes d'ordre d'éxecution (l'outline est créé avant qu'on puisse modifier la taille dans un script). L'art est placeholder. Reviewed-on: https://gitea.clubconjure.com/Conjure/gather-and-defend/pulls/10 Reviewed-by: Ader_Alisma Co-authored-by: Adam Co-committed-by: Adam --- .../Sprites/entities/buildings/blacksmith.png | Bin 0 -> 1578 bytes .../entities/buildings/blacksmith.png.meta | 123 +++++ .../Sprites/entities/buildings/workshop.png | Bin 0 -> 1456 bytes .../entities/buildings/workshop.png.meta | 123 +++++ Assets/Design/UnitCards/Blacksmith.asset | 19 + Assets/Design/UnitCards/Blacksmith.asset.meta | 8 + Assets/Design/UnitCards/Mill.asset | 2 +- Assets/Design/UnitCards/Workshop.asset | 19 + Assets/Design/UnitCards/Workshop.asset.meta | 8 + .../Buildings/Upgrade_Blacksmith.asset | 17 + .../Buildings/Upgrade_Blacksmith.asset.meta | 8 + .../Buildings/Upgrade_Workshop.asset | 17 + .../Buildings/Upgrade_Workshop.asset.meta | 8 + Assets/Prefabs/Buildings/Blacksmith.prefab | 389 ++++++++++++++ .../Prefabs/Buildings/Blacksmith.prefab.meta | 7 + Assets/Prefabs/Buildings/House.prefab | 2 + Assets/Prefabs/Buildings/Mill.prefab | 99 +++- Assets/Prefabs/Buildings/Workshop.prefab | 389 ++++++++++++++ Assets/Prefabs/Buildings/Workshop.prefab.meta | 7 + Assets/Scenes/Game.unity | 479 +++++++++++++++++- Assets/Scripts/Ally/Blacksmith.cs | 6 + Assets/Scripts/Ally/Blacksmith.cs.meta | 11 + Assets/Scripts/Ally/House.cs | 2 +- Assets/Scripts/Ally/Mill.cs | 6 + Assets/Scripts/Ally/Mill.cs.meta | 11 + Assets/Scripts/Ally/ProductionBuilding.cs | 52 ++ .../Scripts/Ally/ProductionBuilding.cs.meta | 11 + Assets/Scripts/Ally/Workshop.cs | 6 + Assets/Scripts/Ally/Workshop.cs.meta | 11 + Assets/Scripts/General/GlobalConfigFile.cs | 1 + Assets/Scripts/Tiles/ResourceTile.cs | 18 +- 31 files changed, 1811 insertions(+), 48 deletions(-) create mode 100644 Assets/Art/Sprites/entities/buildings/blacksmith.png create mode 100644 Assets/Art/Sprites/entities/buildings/blacksmith.png.meta create mode 100644 Assets/Art/Sprites/entities/buildings/workshop.png create mode 100644 Assets/Art/Sprites/entities/buildings/workshop.png.meta create mode 100644 Assets/Design/UnitCards/Blacksmith.asset create mode 100644 Assets/Design/UnitCards/Blacksmith.asset.meta create mode 100644 Assets/Design/UnitCards/Workshop.asset create mode 100644 Assets/Design/UnitCards/Workshop.asset.meta create mode 100644 Assets/Design/UnitUpgrades/Buildings/Upgrade_Blacksmith.asset create mode 100644 Assets/Design/UnitUpgrades/Buildings/Upgrade_Blacksmith.asset.meta create mode 100644 Assets/Design/UnitUpgrades/Buildings/Upgrade_Workshop.asset create mode 100644 Assets/Design/UnitUpgrades/Buildings/Upgrade_Workshop.asset.meta create mode 100644 Assets/Prefabs/Buildings/Blacksmith.prefab create mode 100644 Assets/Prefabs/Buildings/Blacksmith.prefab.meta create mode 100644 Assets/Prefabs/Buildings/Workshop.prefab create mode 100644 Assets/Prefabs/Buildings/Workshop.prefab.meta create mode 100644 Assets/Scripts/Ally/Blacksmith.cs create mode 100644 Assets/Scripts/Ally/Blacksmith.cs.meta create mode 100644 Assets/Scripts/Ally/Mill.cs create mode 100644 Assets/Scripts/Ally/Mill.cs.meta create mode 100644 Assets/Scripts/Ally/ProductionBuilding.cs create mode 100644 Assets/Scripts/Ally/ProductionBuilding.cs.meta create mode 100644 Assets/Scripts/Ally/Workshop.cs create mode 100644 Assets/Scripts/Ally/Workshop.cs.meta diff --git a/Assets/Art/Sprites/entities/buildings/blacksmith.png b/Assets/Art/Sprites/entities/buildings/blacksmith.png new file mode 100644 index 0000000000000000000000000000000000000000..7eba6c47b332407d384a6c15d28a9cb97ed47b0b GIT binary patch literal 1578 zcmV+_2G#kAP)Px)OYG;LCvVZE|<$048d3JdY|QTIittw$Jx%K`tJ!} zOBI*`ZfXMwBrKUk`*M<0d&>|H^q|>}QOB9&sCL_V+8E-2Er2k{@Hvhfb6SQ3Vj3&p znH5}i(Do)|0H#t#+ibHgE|Xfx5BqGU8Hmqd4#O0h+in>WM^A$Kv1Nr# z9Nli~ka+Z!deli&X0$;)o(%w;93A!==imR(+g>i0R!Q8T-ZDf0U51Wp9Ybju5>BsF zog5wR2)Tdz2Cv_}SDQPxN^F9fkT5m?@ch{s0N};T%Wj7%Pxo)%001k*MH3RnM#-R1 zF$~^uZexf5CP@kpSv}f1q%fM0!e~PLiT-#tgj&WB$zZVqux+f6VyZ%R1V{vHI{@qF z9(5)E~S$atN7Zxr)tb($DL1lxP}ugl*vgD1R))%mix2zWeUy|$ zY`B5_fp(BF;Co*m^nP6XO~(zDq0nV;s zgajru=p2c&#E8lec1-y6@op#BRFY|bD!5Wb1%$}(?KkEC-<2$GY;cvTF^~#KjJTAO z2NTY92+aUJGeCsdkQhHqfpG=cC+HWC)?UXY$P!~!>c$WnG*h;i%92Y8?K8&oQEKea zkseEIUvJo>2Vwh8(BILnsqR=~2+IwCW2PObkG31vL%v4Q{bHi;$&|w8oAMa>+Re&!dCGTaBuXwgoIMy*fMD$y>~Se z+=s88_I{U6RiCMI?8wmMja{y66rUlk34tw3rjiwu;)THD_JvRB^6Hz1-imz^LQ;`i zhH0i%jgZ{Im7*KeRjtnX@EA8<&;^;Td|iCl|Nnm0G4RJvzu@7kr`>PWu8u7c{bR(S z&&qw}g{;)i&(GO?tJSLew^fXiLKlE!YzdW->bWh`gL6Y3lnZ^(VaD~bNiadh#A18g zl!1Ny1DUZK3D~)S(BRu3VnVOO71(TlJ~zdG+`Cwtfcv}q-uC=p9{iterBw6xhm)+- zU0I-upzSeIY>(AU4e4pGv&M2VVj=RgKT#=xq>v2;juDaBAv!MQMl?f)1m>%M{=)k9 zI;yY4tg95Hgm{+=Qx?n*=GcGy1OS4htX3>UowTnyr97=c|&=sP6l#i$N;L8&}cLo cjfMpO0{wry_GE%eKL7v#07*qoM6N<$g5c!`1ONa4 literal 0 HcmV?d00001 diff --git a/Assets/Art/Sprites/entities/buildings/blacksmith.png.meta b/Assets/Art/Sprites/entities/buildings/blacksmith.png.meta new file mode 100644 index 0000000..2256c5e --- /dev/null +++ b/Assets/Art/Sprites/entities/buildings/blacksmith.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 3de995023e33caf46bb3bf21e2949de2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Sprites/entities/buildings/workshop.png b/Assets/Art/Sprites/entities/buildings/workshop.png new file mode 100644 index 0000000000000000000000000000000000000000..792dbbeed7f571c9a8c86a1b5c5f587c769ef796 GIT binary patch literal 1456 zcmV;h1yA~kP)Px)YDq*vRCt{2oI7t5OBBb?qN@~1W!$6zDV=GMNQa0nRT`j-@)0PJ@=1^=`3M#z zNt24JM7J}N8{DO!p$V>%f@Ue=S-eEK-GP=`6v~6G39vzqM@bPSRHedE5>BWfS}|leO8kjR zStqlZ*6G_=;8#RNNocFq0swqGeFbOJ>uw`9N=|08jY?sT11z`&4i@C&>8suboiO48 zY8J&eiq&hES@|JY5VD!NF!F4A-4o%<;bHc)6>>h4lXDUrAs_yo006+j{utdsju?#4 zh;emxDF+vekc0g(-2A$Qn_stU+d*;2+4OqNK_?c$Ow=-(4Fs=mMWrk?I%I)#ks}y@ zQ?00j5s*g57t+;UA%c%E7}$lz*h2+o7xg)U1;Nsg029X7$*~uTrPElbosSVJNCN<^ zu6|&D=eQV?Ekl8b_KjHVh%Q z3r{nv&#}H>RLdFvPS+vbZQu3IRz`Lv&0jveb}Gr<%n@T?geeDdaV-J~4ub!qr|b zu6k)pUY3WXuP)VVqQ`GXF>+J9?Nw8h>{R)+?0j8{QU#;p+w`2|IIfXvnyFXO_LiXEVbxRA zlUwrs<%`y(D9ih(`(te}b-ov!mMH9@#J0W3A_SXjfTli(qOR5q?DIbO%_;V}R~y}B zsiWJ3EsA`*E+5C GlobalConfig.Instance.Current.populationGivenPerHouse; + public virtual float PopulationGiven => GlobalConfig.Instance.Current.populationGivenPerHouse; public override void LevelStart() { ResourceManager.Instance.MaximumPopulation += PopulationGiven; diff --git a/Assets/Scripts/Ally/Mill.cs b/Assets/Scripts/Ally/Mill.cs new file mode 100644 index 0000000..2eab4e0 --- /dev/null +++ b/Assets/Scripts/Ally/Mill.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public class Mill : ProductionBuilding +{ + protected override Enum.ResourceNodeType RessourceNodeType { get { return Enum.ResourceNodeType.BerryBush; } } +} \ No newline at end of file diff --git a/Assets/Scripts/Ally/Mill.cs.meta b/Assets/Scripts/Ally/Mill.cs.meta new file mode 100644 index 0000000..3688b35 --- /dev/null +++ b/Assets/Scripts/Ally/Mill.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59a743c16ad953c4192f59706be0c243 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Ally/ProductionBuilding.cs b/Assets/Scripts/Ally/ProductionBuilding.cs new file mode 100644 index 0000000..d1dd136 --- /dev/null +++ b/Assets/Scripts/Ally/ProductionBuilding.cs @@ -0,0 +1,52 @@ +using UnityEngine; + +public abstract class ProductionBuilding : House +{ + [SerializeField] + private int _range; + [SerializeField] + private float _multiplier; + + public override float PopulationGiven => GlobalConfig.Instance.Current.populationGivenPerHouseUpgrade; + protected abstract Enum.ResourceNodeType RessourceNodeType { get; } + private Vector3 _position; + + public override void Start() + { + base.Start(); + _position = Position; + ApplyMultiplier(_multiplier); + } + + public override void LevelStart() + { + base.LevelStart(); + } + + public override void LevelDestroy() + { + ApplyMultiplier(1 / _multiplier); + base.LevelDestroy(); + } + + private void ApplyMultiplier(float multiplier) + { + int x = 0; + for (int i = -_range; i <= _range; i++) + { + for (int j = -_range; j <= _range; j++) + { + Vector3 checkPosition = new Vector3(Mathf.Floor(_position.x) + i, Mathf.Floor(_position.y) + j, 0.0f); + var tile = LevelManager.Instance.Get(t => t.Position == checkPosition); + if (tile == default) continue; + + var checkResourceType = tile.ResourceNodeType; + if (checkResourceType != RessourceNodeType) continue; + + tile.YieldSpeedMultiplier *= multiplier; + x++; + } + } + Debug.Log(x); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Ally/ProductionBuilding.cs.meta b/Assets/Scripts/Ally/ProductionBuilding.cs.meta new file mode 100644 index 0000000..3794922 --- /dev/null +++ b/Assets/Scripts/Ally/ProductionBuilding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8e2553295ecbca42b071a2eea2ed22d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Ally/Workshop.cs b/Assets/Scripts/Ally/Workshop.cs new file mode 100644 index 0000000..6cb82cd --- /dev/null +++ b/Assets/Scripts/Ally/Workshop.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +public class Workshop : ProductionBuilding +{ + protected override Enum.ResourceNodeType RessourceNodeType { get { return Enum.ResourceNodeType.Forest; } } +} \ No newline at end of file diff --git a/Assets/Scripts/Ally/Workshop.cs.meta b/Assets/Scripts/Ally/Workshop.cs.meta new file mode 100644 index 0000000..d11c1bc --- /dev/null +++ b/Assets/Scripts/Ally/Workshop.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1edffd18a1fa37246afd15d5dc6a18f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/General/GlobalConfigFile.cs b/Assets/Scripts/General/GlobalConfigFile.cs index 2669970..f6840b9 100644 --- a/Assets/Scripts/General/GlobalConfigFile.cs +++ b/Assets/Scripts/General/GlobalConfigFile.cs @@ -29,6 +29,7 @@ public class GlobalConfigFile : ScriptableObject [Header("Population")] public int basePopulation = 5; public int populationGivenPerHouse = 5; + public int populationGivenPerHouseUpgrade = 15; public int populationCostPerUnit = 1; public float populationWarningPercentage = 0.75f; diff --git a/Assets/Scripts/Tiles/ResourceTile.cs b/Assets/Scripts/Tiles/ResourceTile.cs index ca6e765..485139e 100644 --- a/Assets/Scripts/Tiles/ResourceTile.cs +++ b/Assets/Scripts/Tiles/ResourceTile.cs @@ -10,7 +10,7 @@ public class ResourceTile : LevelTile private GameObject _yieldPrefab; [SerializeField] private Enum.ResourceNodeType _resourceNodeType; - + public Enum.ResourceNodeType ResourceNodeType => _resourceNodeType; public GameObject YieldPrefab => _yieldPrefab; private string YieldPrefabName => _yieldPrefab.name; @@ -20,6 +20,8 @@ public class ResourceTile : LevelTile private float _randomPositionConfig = 0.5f; private float _yieldCounter = 0; + private float _yieldSpeedMultiplier = 1.0f; + public override void LevelStart() { base.LevelStart(); @@ -48,7 +50,7 @@ public class ResourceTile : LevelTile var yielded = Instantiate(_yieldPrefab, yieldPosition, Quaternion.identity); yielded.transform.SetParent(LevelManager.Instance.LevelTransform); } - private void ResetYieldDuration() + private void ResetYieldDuration() { _yieldCounter = 0; var config = GlobalConfig.Instance.Current; @@ -58,11 +60,11 @@ public class ResourceTile : LevelTile { float min = config.randomHarvestDurationMinimum, max = config.randomHarvestDurationMaximum; - _yieldCounter = Random.Range(min, max); + _yieldCounter = Random.Range(min, max) / _yieldSpeedMultiplier; } else { - _yieldCounter = config.harvestDuration; + _yieldCounter = config.harvestDuration / _yieldSpeedMultiplier; } } public override bool Equals(ILevelObject other) @@ -84,4 +86,12 @@ public class ResourceTile : LevelTile var prefabName = dict[nameof(YieldPrefabName)].ToString(); _yieldPrefab = Database.Instance.Prefabs[prefabName]; } + + // GETTERS AND SETTERS + + public float YieldSpeedMultiplier + { + get { return _yieldSpeedMultiplier; } + set { _yieldSpeedMultiplier = value; } + } } \ No newline at end of file