| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| ! action.h A complete Library for the implementation for ! | |
| ! by Adam Stark Action Menu type control for Interactive Fiction. ! | |
| ! It isn't as efficient as it could be and It only ! | |
| ! looks good at 80 width screen mode, but it works for! | |
| ! me. ! | |
| ! Usage: If you want a command, write it as an object! | |
| ! of the Class MENU_ITEM. To put it on the Menu in ! | |
| ! the beggining, the object needs to be put in ! | |
| ! MASTER_MENU. The Title of MASTER_MENU reflects the ! | |
| ! headline in the statusline. Use the Route property ! | |
| ! to give a function to an item. The Title property ! | |
| ! is the menu title. The Letters property should be ! | |
| ! the number of letters in the title. The Blurb is a ! | |
| ! quick description of the function. The variable ! | |
| ! BLURBED controls whether the Blurb is printed. ! | |
| ! By declaring the variable REAL_TIME_GAME, the game ! | |
| ! can reflect a real time. ! | |
| ! History: ! | |
| ! V0.8: This version. The first working beta version. ! | |
| ! ! | |
| !Report bugs to: bstark@sprynet.com ! | |
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| Message "Inserting action.h"; | |
| Statusline time; | |
| Property Select; | |
| Property Route; | |
| Property Start_Line; | |
| Property KeyMenu; | |
| Global Score; | |
| Global Moves; | |
| Global Rate=1; | |
| Global PTime; | |
| Global Cursor_Line = 1; | |
| Global Levels_Displayed; | |
| Global ClockTicks; | |
| Global NewTime; | |
| Property Title; | |
| Property Blurb; | |
| Property Letters; | |
| Property Escape_Routine; | |
| Global BLURBED=1; | |
| Class MENU_ITEM | |
| with Select [;Levels_Displayed++; self.Start_Line=1; | |
| Cursor_Line=1;PMove(Placeholder, self); REDRAW_TOP();], | |
| Start_Line 1; | |
| MENU_ITEM MASTER_MENU, | |
| with Title " ", | |
| Letters 19; | |
| Object Placeholder | |
| with Title " ", | |
| Letters 1; | |
| [REDRAW_TOP x obj n other; @buffer_mode 0; @set_window 1; font off; | |
| !!!!!!!!!!!!!!!!!!!!Routine for printing the far right side!!!!!!!!!!!!!!!!!!! | |
| style reverse; | |
| for(x=0:x<4:x++) | |
| {n=(x+1); | |
| obj=AgeNum(parent(Placeholder),x+((parent(Placeholder)).Start_Line)-1); @set_cursor n 61; spaces 1; | |
| if (obj provides Title) | |
| {if (Cursor_Line==n) style roman; | |
| print (string) obj.Title; spaces (19-obj.Letters);} | |
| else spaces 19; style reverse; | |
| }; | |
| style roman; | |
| for(x=0:x<4:x++) | |
| {n=(x+1); | |
| obj=AgeNum(parent(parent(Placeholder)),x+((parent(parent(Placeholder))).Start_Line)-1); @set_cursor n 41; spaces 1; | |
| if (obj provides Title) | |
| {if (Placeholder in obj) style reverse; | |
| print (string) obj.Title; spaces (19-obj.Letters);} | |
| else spaces 19; style roman; | |
| }; | |
| style reverse; | |
| for(x=0:x<4:x++) | |
| {n=(x+1); | |
| obj=AgeNum(parent(parent(parent(Placeholder))),x+((parent(parent(parent(Placeholder)))).Start_Line)-1); @set_cursor n 21; spaces 1; | |
| if (obj provides Title) | |
| {if (parent(Placeholder) in obj) style roman; | |
| print (string) obj.Title; spaces (19-obj.Letters);} | |
| else spaces 19; style reverse; | |
| }; | |
| style roman; | |
| for(x=0:x<4:x++) | |
| {n=(x+1); | |
| obj=AgeNum(parent(parent(parent(parent(Placeholder)))),x+((parent(parent(parent(parent(Placeholder))))).Start_Line)-1); | |
| @set_cursor n 1; spaces 1; | |
| if (obj provides Title) | |
| {if (parent(parent(Placeholder)) in obj) style reverse; | |
| print (string) obj.Title; spaces (19-obj.Letters);} | |
| else spaces 19; style roman; | |
| }; | |
| if (BLURBED==1) | |
| {new_line; @buffer_mode 1; | |
| style reverse; spaces 35; print "Explanation"; spaces 34; | |
| style roman; new_line; | |
| spaces 80; new_line; spaces 80; | |
| @set_cursor 6 1; | |
| other = AgeNum(parent(Placeholder), (parent(Placeholder)).Start_Line+Cursor_Line-2);; | |
| if (ZRegion(other.Blurb)==2) other.Blurb(); | |
| if (ZRegion(other.Blurb)==3) print (string) other.Blurb;}; | |
| DrawStatusLine(); | |
| @set_window 0; font on; | |
| ]; | |
| [AgeNum obj x nobj; | |
| if (obj==nothing) return nothing; | |
| if (children(obj)<(x-1)) return nothing ;nobj=child(obj); | |
| for(:x>0:x--) | |
| {nobj=sibling(nobj);} | |
| if (nobj==Placeholder) nobj=sibling(nobj); | |
| return nobj;]; | |
| [ ZRegion addr; | |
| switch(metaclass(addr)) ! Left over from Inform 5 | |
| { nothing: return 0; | |
| Object, Class: return 1; | |
| Routine: return 2; | |
| String: return 3; | |
| } | |
| ]; | |
| Object temp_obj; | |
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| ! Pmove - moves obj1 into obj2 as the youngest child | |
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| [ Pmove obj1 obj2 o; | |
| for (o=child(obj2):o ofclass Object: o=child(obj2)) move o to temp_obj; | |
| move obj1 to obj2; | |
| for (o=child(temp_obj):o ofclass Object: o=child(temp_obj)) move o to obj2; | |
| ]; | |
| [ Loop key; | |
| REDRAW_TOP(); | |
| for (::) | |
| {@read_char 1 1 RE_LOOP key; | |
| switch (key) | |
| {'n', 'N', 130: Move_to_Next(); | |
| 'p', 'P', 129: Move_to_Prev(); | |
| 'q', 'Q', 27: PerfectEscape(); | |
| 10, 13, 132: Move_to_Son(); | |
| default: if(parent(Placeholder) provides KeyMenu) | |
| (parent(Placeholder)).KeyMenu(key);}; | |
| REDRAW_TOP();}; | |
| ]; | |
| [ Move_to_Next; | |
| if ((children(parent(Placeholder))-1)<=(parent(Placeholder)).Start_Line+Cursor_Line-1) return; | |
| if (Cursor_Line == 4) (parent(Placeholder)).Start_Line++; | |
| else Cursor_Line++;]; | |
| [ Move_to_Prev; | |
| if (Cursor_Line ~= 1) Cursor_Line--; | |
| else {if (((parent(Placeholder)).Start_Line)>1) (parent(Placeholder)).Start_Line--;};]; | |
| [ Move_to_Son obj; | |
| obj = AgeNum(parent(Placeholder), (parent(Placeholder)).Start_Line+Cursor_Line-2); | |
| if (obj == nothing) return; | |
| if (obj provides Route) | |
| {@buffer_mode 1; Moves++; | |
| if (ZRegion(obj.Route)==2) | |
| obj.Route(); | |
| if (ZRegion(obj.Route)==3) | |
| {new_line; print (string) obj.Route;};} | |
| else obj.Select() | |
| ;]; | |
| [RE_LOOP; ERate(Moves,Rate); | |
| #IFDEF REAL_TIME_GAME; | |
| ClockTicks++; | |
| EverySec(); | |
| #ENDIF;]; | |
| [ERate m r noe; | |
| #IFNDEF REAL_TIME_GAME; | |
| if (r<0) noe = ((m/r)+NewTime); | |
| if (r==0) noe = NewTime; | |
| if (r>0) noe = ((m*r)+NewTime); | |
| #ENDIF; | |
| #IFDEF REAL_TIME_GAME; | |
| noe=(ClockTicks/565); | |
| m=r; | |
| #ENDIF; | |
| PTime=noe;]; | |
| [SetClock t r; | |
| Moves = 0; | |
| NewTime=t; | |
| Rate=r;]; | |
| [ DrawStatusLine width posa posb; | |
| if (BLURBED==1) @set_cursor 8 1; | |
| else @set_cursor 5 1; | |
| style reverse; | |
| width = 0->33; posa = width-26; posb = width-13; | |
| spaces width; | |
| if (BLURBED==1) @set_cursor 8 2; | |
| else @set_cursor 5 2; | |
| print (string) MASTER_MENU.Title; | |
| if ((0->1)&2 == 0) | |
| { if (width > 76) | |
| { | |
| if (BLURBED==1) @set_cursor 8 posa; | |
| else @set_cursor 5 posa; print "Score: ", Score; | |
| if (BLURBED==1) @set_cursor 8 posb; | |
| else @set_cursor 5 posb; print "Moves: ", Moves; | |
| } | |
| if (width > 63 && width <= 76) | |
| { if (BLURBED==1) @set_cursor 8 posb; | |
| else @set_cursor 5 posb; print Score, "/", Moves; | |
| } | |
| } | |
| else | |
| { if (BLURBED==1) @set_cursor 8 posa; | |
| else @set_cursor 5 posa; | |
| print "Time: "; | |
| if (((PTime/60)%12)==0) print "12"; | |
| else print ((PTime/60)%12); | |
| print ":"; | |
| if ((PTime%60)<10) print "0", (PTime%60); | |
| else print (PTime%60); | |
| if (((PTime/60)%24)==((PTime/60)%12)) print " am"; | |
| else print " pm"; | |
| } | |
| @set_cursor 1 1; style roman; @set_window 0; | |
| ]; | |
| [Main; if (BLURBED == 1) @split_window 8; | |
| else @split_window 5; | |
| Initialise(); Loop();]; | |
| [ PerfectEscape;if (parent(Placeholder) provides Escape_Routine) | |
| return (parent(Placeholder)).Escape_Routine(); | |
| if (parent(Placeholder)~=MASTER_MENU) | |
| {Levels_Displayed--;PMove(Placeholder,parent(parent(Placeholder))); REDRAW_TOP();} | |
| else @quit;]; | |
| [ EverySec;]; |
Xet Storage Details
- Size:
- 8 kB
- Xet hash:
- 2ac07667246c1067cdc2aca72305a5851e42eec05c2b5aa4fba1fc769d422e44
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.