From b3c0074eb2d07d6fd31f1fa43552a00982a57b0b Mon Sep 17 00:00:00 2001
From: guderian2nd <gshin3@live.com>
Date: Fri, 8 Mar 2019 10:14:48 +0900
Subject: [PATCH] major model overhaul, makes turns transparent

---
 ISEKAI/Assets/ISEKAI_Model/Core/EventCore.cs  | 19 ++++++++----
 ISEKAI/Assets/ISEKAI_Model/Core/Game.cs       | 30 +++++++++++++++----
 .../Assets/ISEKAI_Model/Events/Blasphemy_1.cs |  2 +-
 .../Assets/ISEKAI_Model/Events/Farming_3.cs   |  4 +--
 .../Assets/ISEKAI_Model/Events/Hunting_1.cs   |  2 +-
 .../Assets/ISEKAI_Model/Events/Hunting_2.cs   |  2 +-
 ISEKAI/Assets/ISEKAI_Model/Events/Mine_1.cs   |  2 +-
 ISEKAI/Assets/ISEKAI_Model/Events/Prolog_2.cs |  2 +-
 .../Assets/ISEKAI_Model/Scripts/Hunting_2.txt |  1 -
 ISEKAI/Assets/ISEKAI_VIEW/EventManager.cs     |  4 +--
 ISEKAI/Assets/ISEKAI_VIEW/GameManager.cs      | 30 +++++++------------
 11 files changed, 57 insertions(+), 41 deletions(-)

diff --git a/ISEKAI/Assets/ISEKAI_Model/Core/EventCore.cs b/ISEKAI/Assets/ISEKAI_Model/Core/EventCore.cs
index c160846..28e7455 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Core/EventCore.cs
+++ b/ISEKAI/Assets/ISEKAI_Model/Core/EventCore.cs
@@ -29,14 +29,16 @@ namespace ISEKAI_Model
     }
     public abstract class EventCore // Every future event must inherit this.
     {
-        public bool isNew => (_seasonMadeIn == game.turn.season) && (turnsLeft == givenMaxTurn);
+        public bool isNew => (_seasonMadeIn == game.turn.season) && (monthsLeft == givenMaxMonth);
         public bool isForcedEvent => forcedEventPriority > 0;
         public bool isActivatedAlready;
         public abstract int forcedEventPriority {get;} // 0 if the event is not forced event.
         public abstract string eventName {get;}
         public EventStatus status {get; set;}
         public abstract int givenMaxTurn {get;} // -1 if the event is permanent.
-        public int turnsLeft {get; protected set;} // how many turns left for this event to be gone.
+        public int givenMaxMonth { get { return (6 * givenMaxTurn); } }
+        //public int turnsLeft {get; protected set;} // how many turns left for this event to be gone.
+        public int monthsLeft { get; protected set; }
         public abstract int cost {get;} // how many AP this event takes.
         public abstract Season availableSeason {get;} // when this event is available.
         public abstract EventLocation location { get; }
@@ -53,7 +55,7 @@ namespace ISEKAI_Model
         public void ActivateEvent()
         {
             status = EventStatus.Visible;
-            turnsLeft = givenMaxTurn;
+            monthsLeft = givenMaxMonth;
             isActivatedAlready = true;
         }
 
@@ -61,7 +63,7 @@ namespace ISEKAI_Model
         {
             status = EventStatus.Ready;
             this.game = game;
-            turnsLeft = 0;
+            monthsLeft = 0;
         }
 
         
@@ -84,9 +86,15 @@ namespace ISEKAI_Model
         }
 
 
-        public void ReduceTurnsLeft()
+        /*public void ReduceTurnsLeft()
         {
             turnsLeft--;
+        }*/
+
+
+        public void ReduceMonthsLeft(int monthspassed)
+        {
+            monthsLeft -= monthspassed;
         }
 
         public virtual void Complete()
@@ -96,6 +104,7 @@ namespace ISEKAI_Model
             game.turn.totalMonthNumber += cost;
 
             game.Proceed(beforeSeason);
+            game._ReduceEveryEventsMonthsLeft(cost);
             game.OccurEvents();
             /*
             if (beforeSeason != game.turn.season)
diff --git a/ISEKAI/Assets/ISEKAI_Model/Core/Game.cs b/ISEKAI/Assets/ISEKAI_Model/Core/Game.cs
index 86ee247..afbedfd 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Core/Game.cs
+++ b/ISEKAI/Assets/ISEKAI_Model/Core/Game.cs
@@ -68,8 +68,8 @@ namespace ISEKAI_Model
 
         private void _InitEvents() // should add EVERY events when new event plan comes.
         {
-            allEventsList.Add(new Prolog_1(this));
-            allEventsList.Add(new Prolog_2(this));
+            //allEventsList.Add(new Prolog_1(this));
+            //allEventsList.Add(new Prolog_2(this));
 
             allEventsList.Add(new ReturnWarning(this));
 
@@ -224,7 +224,7 @@ namespace ISEKAI_Model
         {
             town.ApplyPostTurnChange();
             turn.IncreaseTurnNumber();
-            _ReduceEveryEventsTurnsLeft();
+            //_ReduceEveryEventsTurnsLeft();
         }
 
         public void ApplyChoiceEffect(ChoiceEffect choiceEffect)
@@ -283,7 +283,7 @@ namespace ISEKAI_Model
             }
         }
 
-        private void _ReduceEveryEventsTurnsLeft() // Not recommended to call manually. Only called by Proceed().
+        /*private void _ReduceEveryEventsTurnsLeft() // Not recommended to call manually. Only called by Proceed().
         {
             foreach (EventCore e in allEventsList)
             {
@@ -301,6 +301,26 @@ namespace ISEKAI_Model
                     e.isRemovedLastTurn = true;
                 }
             }
+        }*/
+
+        public void _ReduceEveryEventsMonthsLeft(int monthsPassed) // Not recommended to call manually. Only called by Proceed().
+        {
+            foreach (EventCore e in allEventsList)
+            {
+                if (e.givenMaxMonth < 0)
+                    continue;
+                if (e.status == EventStatus.Completed)
+                    continue;
+                if (e.isActivatedAlready)
+                    e.ReduceMonthsLeft(monthsPassed);
+
+                if (e.monthsLeft <= 0 && e.isActivatedAlready)
+                {
+                    e.status = EventStatus.Ready;
+                    e.isActivatedAlready = false;
+                    e.isRemovedLastTurn = true;
+                }
+            }
         }
 
         private void _SetAllEventActivable()
@@ -328,7 +348,7 @@ namespace ISEKAI_Model
                 }
                 else if (e.isActivatedAlready)
                 {
-                    if (e.SeasonCheck() && e.turnsLeft > 0)
+                    if (e.SeasonCheck() && e.monthsLeft > 0)
                         e.status = EventStatus.Visible;
                     else
                         e.status = EventStatus.Ready;
diff --git a/ISEKAI/Assets/ISEKAI_Model/Events/Blasphemy_1.cs b/ISEKAI/Assets/ISEKAI_Model/Events/Blasphemy_1.cs
index 3fbaf63..5b3c14b 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Events/Blasphemy_1.cs
+++ b/ISEKAI/Assets/ISEKAI_Model/Events/Blasphemy_1.cs
@@ -18,7 +18,7 @@ namespace ISEKAI_Model
 
         protected override bool exclusiveCondition()
         {
-            bool turnCondition = game.turn.totalMonthNumber >= 13;
+            bool turnCondition = game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 3")).status == EventStatus.Completed;
             int chance = (new Random()).Next() / 10;
             bool chanceCondition = chance <= 2;
             if (_isFirstOccur && turnCondition)
diff --git a/ISEKAI/Assets/ISEKAI_Model/Events/Farming_3.cs b/ISEKAI/Assets/ISEKAI_Model/Events/Farming_3.cs
index 4a185f9..f12f9c0 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Events/Farming_3.cs
+++ b/ISEKAI/Assets/ISEKAI_Model/Events/Farming_3.cs
@@ -9,7 +9,7 @@ namespace ISEKAI_Model
         public override string eventName { get { return "농사 이벤트 3"; } }
         public override EventLocation location { get { return EventLocation.Field; } }
         public override int givenMaxTurn { get { return 1; } }
-        public override int cost { get { return 2; } }
+        public override int cost { get { return 3; } }
         public override Season availableSeason { get { return Season.Spring; } }
         public override List<Command> script { get { return Parser.ParseScript("Assets/ISEKAI_Model/Scripts/Farming_3.txt"); } } // command list.
 
@@ -20,7 +20,7 @@ namespace ISEKAI_Model
 
         public Farming_3(Game game) : base(game)
         {
-            turnsLeft = 0;
+            monthsLeft = 0;
         }
     }
 }
diff --git a/ISEKAI/Assets/ISEKAI_Model/Events/Hunting_1.cs b/ISEKAI/Assets/ISEKAI_Model/Events/Hunting_1.cs
index 4957b96..b3e4546 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Events/Hunting_1.cs
+++ b/ISEKAI/Assets/ISEKAI_Model/Events/Hunting_1.cs
@@ -18,7 +18,7 @@ namespace ISEKAI_Model
 
         protected override bool exclusiveCondition()
         {
-            bool turnCondition = game.turn.totalMonthNumber >= 13 && game.turn.totalMonthNumber <= 36;
+            bool turnCondition = (game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 3")).status == EventStatus.Completed) && game.turn.totalMonthNumber <= 40;
             int chance = (new Random()).Next() / 10;
             bool chanceCondition = chance <= 1;
             if (_isFirstOccur && turnCondition)
diff --git a/ISEKAI/Assets/ISEKAI_Model/Events/Hunting_2.cs b/ISEKAI/Assets/ISEKAI_Model/Events/Hunting_2.cs
index 3b7af3a..59d0b97 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Events/Hunting_2.cs
+++ b/ISEKAI/Assets/ISEKAI_Model/Events/Hunting_2.cs
@@ -18,7 +18,7 @@ namespace ISEKAI_Model
 
         protected override bool exclusiveCondition()
         {
-            bool turnCondition = game.turn.totalMonthNumber >= 13 && game.turn.totalMonthNumber <= 44;
+            bool turnCondition = game.turn.totalMonthNumber <= 44;
             int chance = (new Random()).Next() / 10;
             bool chanceCondition = chance <= 1;
             bool prevCondition = game.allEventsList.Find(e => e.eventName == "사냥 이벤트 1").status == EventStatus.Completed;
diff --git a/ISEKAI/Assets/ISEKAI_Model/Events/Mine_1.cs b/ISEKAI/Assets/ISEKAI_Model/Events/Mine_1.cs
index 3e99586..a2f513e 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Events/Mine_1.cs
+++ b/ISEKAI/Assets/ISEKAI_Model/Events/Mine_1.cs
@@ -18,7 +18,7 @@ namespace ISEKAI_Model
 
         protected override bool exclusiveCondition()
         {
-            bool turnCondition = game.turn.totalMonthNumber >= 13;
+            bool turnCondition = game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 3")).status == EventStatus.Completed;
             int chance = (new Random()).Next() / 10;
             bool chanceCondition = chance <= 2;
             if (_isFirstOccur && turnCondition)
diff --git a/ISEKAI/Assets/ISEKAI_Model/Events/Prolog_2.cs b/ISEKAI/Assets/ISEKAI_Model/Events/Prolog_2.cs
index 2de3730..c5abb4d 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Events/Prolog_2.cs
+++ b/ISEKAI/Assets/ISEKAI_Model/Events/Prolog_2.cs
@@ -20,7 +20,7 @@ namespace ISEKAI_Model
 
         public Prolog_2(Game game) : base(game)
         {
-            turnsLeft = 0;
+            monthsLeft = 0;
         }
     }
 }
diff --git a/ISEKAI/Assets/ISEKAI_Model/Scripts/Hunting_2.txt b/ISEKAI/Assets/ISEKAI_Model/Scripts/Hunting_2.txt
index a704d7a..1c8708e 100644
--- a/ISEKAI/Assets/ISEKAI_Model/Scripts/Hunting_2.txt
+++ b/ISEKAI/Assets/ISEKAI_Model/Scripts/Hunting_2.txt
@@ -7,7 +7,6 @@ Load Background "Background\Door"
 ## "나" "「계십니까.」"
 # "잠시 기다렸지만 아무 소리도 없었다."
 # "딱 떠나려는 참에, 문이 열렸다."
-VFX Sound "VFX\Sound\Dooropening"
 Load Character "Character\Carpenter\a\normal" -center
 ## "마을 목수" "「누구십니.. 아 장동무 아니십니까.」" -center
 ## "나" "「아. 나무를 다룰줄 안다고 들어서 왔습니다만.. 다룰줄 압니까?」"
diff --git a/ISEKAI/Assets/ISEKAI_VIEW/EventManager.cs b/ISEKAI/Assets/ISEKAI_VIEW/EventManager.cs
index 77f9d6e..2ebb767 100644
--- a/ISEKAI/Assets/ISEKAI_VIEW/EventManager.cs
+++ b/ISEKAI/Assets/ISEKAI_VIEW/EventManager.cs
@@ -91,12 +91,10 @@ public class EventManager : MonoBehaviour
     {
         if (!scriptEnumerator.MoveNext())
         {
-            Debug.Log(GameManager.instance.game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 2")).status + " " + GameManager.instance.game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 2")).IsFirstVisible());
             eventCore.Complete();
-            Debug.Log(GameManager.instance.game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 2")).status + " " + GameManager.instance.game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 2")).IsFirstVisible());
             SceneManager.LoadScene("TownScene", LoadSceneMode.Single);
+            Debug.Log("HONTONI: " + GameManager.instance.game.turn.totalMonthNumber.ToString());
             GameManager.instance.TryOccurForcedEvent();
-            Debug.Log(GameManager.instance.game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 2")).status + " " + GameManager.instance.game.allEventsList.Find(e => e.eventName.Equals("농사 이벤트 2")).IsFirstVisible());
             GameManager.instance.TryInstantiateEventSDs();
             GameManager.instance.TryUpdateEventSDs();
         }
diff --git a/ISEKAI/Assets/ISEKAI_VIEW/GameManager.cs b/ISEKAI/Assets/ISEKAI_VIEW/GameManager.cs
index 9958773..8543317 100644
--- a/ISEKAI/Assets/ISEKAI_VIEW/GameManager.cs
+++ b/ISEKAI/Assets/ISEKAI_VIEW/GameManager.cs
@@ -14,7 +14,7 @@ public class GameManager : MonoBehaviour
     public static GameManager instance;
     public EventCore currentEvent;
 
-    public Sprite[] turnsLeftSprites;
+    public Sprite[] monthsLeftSprites;
     public Sprite[] seasonSprites;
     public Sprite[] numberSprites;
 
@@ -79,19 +79,14 @@ public class GameManager : MonoBehaviour
 
                 sd.position = GetEventSDVectorByLocation(e.location);
                 sd.name = e.eventName;
-                if (e.givenMaxTurn < 0)
+                if (e.givenMaxMonth < 0)
                     sd.GetChild(2).gameObject.SetActive(false);
                 //else
                     //sd.GetChild(2).GetComponent<SpriteRenderer>().sprite = turnsLeftSprites[e.givenMaxTurn - 1]; // sprite array index is 0-based, but starts with sprite of 1, so -1 is needed.
                 else
                 {
-                    int monthOffset;
-                    if (game.turn.monthNumber >= 0 && game.turn.monthNumber < 6)
-                        monthOffset = 5 - game.turn.monthNumber;
-                    else
-                        monthOffset = 11 - game.turn.monthNumber;
-
-                    int totalMonthLeft = 6 * (e.turnsLeft - 1) + monthOffset;
+                    
+                    int totalMonthLeft = e.monthsLeft;
 
                     int year = totalMonthLeft / 12;
                     int month = totalMonthLeft % 12 + 1;
@@ -130,19 +125,14 @@ public class GameManager : MonoBehaviour
             else
                 sd.gameObject.SetActive(false);
 
-            if (e.givenMaxTurn < 0)
+            if (e.givenMaxMonth < 0)
                 continue;
 
-            if (e.turnsLeft >= 1)
+            if (e.monthsLeft >= 1)
             {
                 //sd.GetChild(2).GetComponent<SpriteRenderer>().sprite = turnsLeftSprites[e.turnsLeft - 1]; // sprite array index is 0-based, but starts with sprite of 1, so -1 is needed.
-                int monthOffset;
-                if (game.turn.monthNumber >= 0 && game.turn.monthNumber < 6)
-                    monthOffset = 5 - game.turn.monthNumber;
-                else
-                    monthOffset = 11 - game.turn.monthNumber;
-
-                int totalMonthLeft = 6 * (e.turnsLeft - 1) + monthOffset;
+                
+                int totalMonthLeft = e.monthsLeft;
 
                 int year = totalMonthLeft / 12;
                 int month = totalMonthLeft % 12 + 1;
@@ -162,9 +152,9 @@ public class GameManager : MonoBehaviour
                 sd.GetChild(4).gameObject.SetActive(false);
             else
                 sd.GetChild(4).GetComponent<SpriteRenderer>().sprite = seasonSprites[(int)e.availableSeason - 1];
-            if (e.turnsLeft != e.givenMaxTurn)
+            if (e.monthsLeft != e.givenMaxMonth)
                 sd.GetChild(3).gameObject.SetActive(false);
-            if (e.turnsLeft <= 0)
+            if (e.monthsLeft <= 0)
             {
                 toDestroyList.Add(sd);
                 continue;
-- 
2.22.0