Updated branding
[18plus-7leafadventure.git] / src / Main.as
blob1b47cbbaa66d1216235a6e06acb2a47ea0defc1b
1 package
3 import flash.display.*;
4 import flash.events.*;
5 import flash.sampler.NewObjectSample;
6 import flash.text.*;
7 import org.sevenchan.dongs.Creature;
8 import org.sevenchan.dongs.creature.*;
9 import org.sevenchan.dongs.enchantment.events.CombatStartEvent;
10 import org.sevenchan.dongs.Item;
11 import org.sevenchan.dongs.Screen;
12 import org.sevenchan.dongs.Town;
13 import org.sevenchan.dongs.ui.*;
14 import org.sevenchan.dongs.screens.*;
15 /**
16 * ...
17 * @author N3X15
19 [Frame(factoryClass = "Preloader", backgroundColor = 0x666666, frames = 10)]
20 [SWF(width = 800, height = 600, frameRate = 60 , backgroundColor = "#666666")]
21 public class Main extends Sprite
23 private const default_bg_color:uint = 0x333333;
24 private var bgshape:Sprite;
26 private var currentScreen:Screen;
27 private var combatScreen:Screen;
28 private var btnNewGame:SexButton;
29 private var btnLoadSaveGame:SexButton;
30 private var btnExportGame:SexButton;
31 private var btnSelectPerk:SexButton;
32 private var btnDebugMenu:SexButton;
33 private var btnAppearance:SexButton;
34 private var btnAction:Array;
36 private var pnlMain:SexPanel;
37 private var pnlStats:SexPanel;
39 private var statXP:Statistic;
40 private var statStrength:Statistic;
41 private var statSpeed:Statistic;
42 private var statIntellect:Statistic;
43 private var statSensitivity:Statistic;
44 private var statLust:Statistic;
46 private var statMana:Statistic;
47 private var statHP:Statistic;
49 public var player:Player;
51 public static var screenQueue:Queue = new Queue();
53 public function Main():void
55 player = new Player(this);
56 if (stage) init();
57 else addEventListener(Event.ADDED_TO_STAGE, init);
60 private function init(e:Event = null):void
62 Town.setup();
64 removeEventListener(Event.ADDED_TO_STAGE, init);
66 initBG();
68 var toprow:Number = 600 - 549;
70 var y:Number = 16;
71 //stage.opaqueBackground = 0x666666;
73 var txtHeader:TextField = new TextField();
74 var tf:TextFormat = new TextFormat();
75 tf.color = 0xffffff;
76 tf.font = "_sans";
77 txtHeader.htmlText = "ADVENTURE OF THE SEVEN LEAVES <b>TEST BUILD</b>";
78 txtHeader.setTextFormat(tf);
79 txtHeader.autoSize = "left";
80 addChild(txtHeader);
81 txtHeader.x = 2;
82 txtHeader.y = 2;
84 // Top row of buttons
85 btnNewGame = addButton("New Game", 100, y, toprow); y += 129.2; btnNewGame.addEventListener(MouseEvent.CLICK, onNewGame);
86 btnLoadSaveGame = addButton("Load Game", 100, y, toprow); y += 129.2; btnLoadSaveGame.addEventListener(MouseEvent.CLICK, onLoadOrSave);
87 btnSelectPerk = addButton("Select Perk", 100, y, toprow); y += 129.2; //btnNewGame.addEventListener(MouseEvent.CLICK, onSelectPerk);
88 btnExportGame = addButton("Export Game", 100, y, toprow); y += 129.2; //btnNewGame.addEventListener(MouseEvent.CLICK, onExport);
89 btnDebugMenu = addButton("Debug Menu", 100, y, toprow); y += 129.2;
90 btnAppearance = addButton("Appearance", 100, y, toprow); btnAppearance.addEventListener(MouseEvent.CLICK, onAppearance);
92 //Panels
93 pnlMain = addPanel("", 464.5, 618.5, 167.75, 56.75);
95 pnlStats = addPanel("", 464.5, 144.9, 15.75, 56.75);
97 // Second row of buttons
98 btnAction = new Array();
99 for (var i:int = 0; i < 12;i++) {
100 var btn:SexButton = addButton((i + 1).toString(), 100, 16 + ((i % 6) * 129.2), 561 + (Math.round(i / 12) * 32));
101 btnAction[i] = btn;
102 btn.addEventListener(MouseEvent.CLICK, onActionClick);
104 setScreen(new StartupScreen());
107 private function onAppearance(e:MouseEvent):void {
108 setScreen(new AppearanceScreen());
111 private function onNewGame(e:MouseEvent):void {
112 player = new Player(this);
113 player.setMain(this);
114 setScreen(new NewGameScreen());
117 private function onLoadOrSave(e:MouseEvent):void {
118 if (!currentScreen.loadOrSaveButton) {
119 player = new Player(this);
120 player.setMain(this);
121 player.load();
122 } else {
123 player.save();
127 public function onPlayerLoaded():void {
128 setupStatsPanel();
129 setScreen(player.currentTown);
132 public function addToStatsPanel(stat:Statistic):void {
133 pnlStats.addToStack(stat);
134 pnlStats.arrangeStack();
137 public function remFromStatsPanel(stat:Statistic):void {
138 pnlStats.delFromStack(stat);
139 pnlStats.arrangeStack();
142 public function setupStatsPanel():void {
143 pnlStats.stackMode(); // Remove textField.
144 pnlStats.addToStack(new StackHeader("STATS"));
145 statXP = new Statistic("Experience", "How far you are from levelling up",true);
146 pnlStats.addToStack(statXP);
147 statStrength = new Statistic("Strength", "How much power your attacks will have.");
148 pnlStats.addToStack(statStrength);
149 statSpeed = new Statistic("Speed", "How fast you are; Affects dodging and catching opponents.");
150 pnlStats.addToStack(statSpeed);
151 statIntellect = new Statistic("Intellect", "Perceptiveness. Allows you to sense impending danger and figure out puzzles easier.");
152 pnlStats.addToStack(statIntellect);
153 statSensitivity = new Statistic("Sensitivity", "The more sensitive you are, the faster your lust rises. However, lack of sensation means you cannot masturbate.");
154 pnlStats.addToStack(statSensitivity);
155 statLust = new Statistic("Lust", "How horny you are right now.");
156 pnlStats.addToStack(statLust);
158 pnlStats.addToStack(new StackHeader("COMBAT"));
159 statHP = new Statistic("HP", "Health left.");
160 pnlStats.addToStack(statHP);
161 statMana = new Statistic("Mana", "Magic stuff");
162 pnlStats.addToStack(statMana);
164 pnlStats.arrangeStack();
166 refreshStats();
169 private function setScreen(screen:Screen):void {
170 //trace("setscreen ",screen);
171 if (screen == null)
173 if (player != null) {
174 if(combatScreen==null)
175 screen = player.currentTown;
176 else
177 screen = combatScreen;
179 else
180 screen = new StartupScreen();
182 currentScreen = screen;
183 currentScreen.setMain(this);
184 currentScreen.processButtonPress( -1);
187 private function onActionClick(e:MouseEvent):void {
188 var clicked:SexButton = e.target as SexButton;
189 for (var i:int = 0; i < 12; i++) {
190 if (clicked == btnAction[i]) {
191 var done:Boolean = currentScreen.processButtonPress(i);
192 //trace(currentScreen,done);
193 if (done) {
194 setScreen(Main.screenQueue.read());
196 return;
201 public function updateScreen(screen:Screen):void {
202 var btns:Array = screen.getButtons();
203 for (var i:int = 0; i < 12; i++) {
204 var btn:SexButton = (btnAction[i] as SexButton);
205 btn.visible = (btns[i] != "");
206 btn.setText(btns[i]);
208 this.btnAppearance.visible = screen.appearanceButton;
209 this.btnDebugMenu.visible = screen.debugMenuButton;
210 this.btnExportGame.visible = screen.exportGameButton;
211 this.btnLoadSaveGame.setText((screen.loadOrSaveButton)?"Save Game":"Load Game");
212 this.btnNewGame.visible = screen.newGameButton;
213 this.btnSelectPerk.visible = screen.selectPerkButton;
215 this.pnlMain.text = screen.getScreenText();
218 public function refreshStats():void {
219 if (player.level == 0) {
220 player.levelUp(true);
222 statXP.setMaxAndValue(player.maxXP, player.XP, false);
223 statStrength.setMaxAndValue(100, player.strength, false);
224 statSpeed.setMaxAndValue(100, player.speed, false);
225 statIntellect.setMaxAndValue(100, player.intellect, false);
226 statSensitivity.setMaxAndValue(100, player.sensitivity, false);
227 statLust.setMaxAndValue(100, player.lust, false);
229 statHP.setMaxAndValue(player.maxHP, player.HP, false);
230 statMana.setMaxAndValue(100, player.mana, false);
233 private function addButton(label:String, size:Number, x:Number, y:Number):SexButton {
234 var btn:SexButton = new SexButton(size, label);
235 stage.addChild(btn);
236 btn.x = x;
237 btn.y = y - btn.height;
238 return btn;
241 private function addPanel(text:String,h:Number, w:Number, x:Number, y:Number):SexPanel {
242 var btn:SexPanel = new SexPanel(text);
243 stage.addChild(btn);
244 btn.x = x;
245 btn.y = y;
246 btn.draw(h,w);
247 return btn;
250 private function initBG():void
252 bgshape = new Sprite();
253 bgshape.graphics.beginFill(default_bg_color);
254 bgshape.graphics.drawRect(0,0,stage.stageWidth, stage.stageHeight);
255 addChildAt(bgshape, 0);
256 stage.addEventListener(Event.RESIZE, resizeBGWithStage);
258 private function resizeBGWithStage(e:Event):void
260 try {
261 bgshape.width = stage.stageWidth;
262 bgshape.height = stage.stageHeight;
263 } catch(e:*){}
266 public function showInventory(item:Item=null):void {
267 setScreen(new InventoryScreen(item));
270 public function startCombat(oldScreen:Screen, combatant:Creature, playerInitiated:Boolean = false):void {
271 //inCombat = true;
272 combatant.notifyEnchantments(new CombatStartEvent(player));
273 player.notifyEnchantments(new CombatStartEvent(combatant));
274 combatScreen = new CombatScreen(oldScreen, combatant, playerInitiated);
275 setScreen(combatScreen);
278 public function endCombat(oldScreen:Screen):void {
279 //inCombat = false;
280 combatScreen = null;
281 //setScreen(Main.screenQueue.read());
284 public function setTown(t:Town):void {
285 player.currentTown = t;