ENH: Reworked roll interactions
							parent
							
								
									ded5e00aa5
								
							
						
					
					
						commit
						9bcc0fd975
					
				|  | @ -6,4 +6,6 @@ This Foundry VTT system requires Old-School Essentials Core Rules and does not c | |||
| 
 | ||||
| ## Contributions | ||||
| This system is currently under heavy development. | ||||
| Feel free to grab a TO DO issue from the gitlab board. You can then do a merge request on the `development` branch. | ||||
| Feel free to grab a TO DO issue from the gitlab board. You can then do a merge request on the `development` branch. | ||||
| 
 | ||||
| [](https://ko-fi.com/H2H21WMKA) | ||||
|  | @ -111,12 +111,21 @@ export class OseActorSheet extends ActorSheet { | |||
|       }); | ||||
|     }); | ||||
| 
 | ||||
|     html.find(".item-image").click(async (ev) => { | ||||
|     html.find(".item .item-controls .item-show").click(async (ev) => { | ||||
|       const li = $(ev.currentTarget).parents(".item"); | ||||
|       const item = this.actor.getOwnedItem(li.data("itemId")); | ||||
|       item.roll({skipDialog: event.ctrlKey}); | ||||
|     }); | ||||
| 
 | ||||
|     html.find(".item .item-rollable .item-image").click(async ev =>  { | ||||
|       const li = $(ev.currentTarget).parents(".item"); | ||||
|       const item = this.actor.getOwnedItem(li.data("itemId")); | ||||
|       if (item.type == 'weapon') { | ||||
|         item.rollWeapon(); | ||||
|       } else { | ||||
|         item.rollFormula(); | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     html.find(".attack a").click(ev => { | ||||
|       let actorObject = this.actor; | ||||
|  |  | |||
							
								
								
									
										33
									
								
								src/ose.js
								
								
								
								
							
							
						
						
									
										33
									
								
								src/ose.js
								
								
								
								
							|  | @ -6,8 +6,8 @@ import { preloadHandlebarsTemplates } from "./module/preloadTemplates.js"; | |||
| import { OseActor } from "./module/actor/entity.js"; | ||||
| import { OseItem } from "./module/item/entity.js"; | ||||
| import { OSE } from "./module/config.js"; | ||||
| import { registerSettings } from './module/settings.js'; | ||||
| import { registerHelpers } from './module/helpers.js'; | ||||
| import { registerSettings } from "./module/settings.js"; | ||||
| import { registerHelpers } from "./module/helpers.js"; | ||||
| import * as chat from "./module/chat.js"; | ||||
| import * as macros from "./module/macros.js"; | ||||
| 
 | ||||
|  | @ -26,17 +26,17 @@ Hooks.once("init", async function () { | |||
|   }; | ||||
| 
 | ||||
|   CONFIG.OSE = OSE; | ||||
|    | ||||
| 
 | ||||
|   game.ose = { | ||||
|     rollItemMacro: macros.rollItemMacro | ||||
|   } | ||||
|     rollItemMacro: macros.rollItemMacro, | ||||
|   }; | ||||
| 
 | ||||
|   // Custom Handlebars helpers
 | ||||
|   registerHelpers(); | ||||
|    | ||||
| 
 | ||||
|   // Register custom system settings
 | ||||
|   registerSettings(); | ||||
|    | ||||
| 
 | ||||
|   CONFIG.Actor.entityClass = OseActor; | ||||
|   CONFIG.Item.entityClass = OseItem; | ||||
| 
 | ||||
|  | @ -71,8 +71,23 @@ Hooks.once("setup", function () { | |||
| }); | ||||
| 
 | ||||
| Hooks.once("ready", () => { | ||||
|   Hooks.on("hotbarDrop", (bar, data, slot) => macros.createOseMacro(data, slot)); | ||||
|   Hooks.on("hotbarDrop", (bar, data, slot) => | ||||
|     macros.createOseMacro(data, slot) | ||||
|   ); | ||||
| }); | ||||
| 
 | ||||
| Hooks.on( | ||||
|   "preUpdateCombat", | ||||
|   async (combat, updateData, options, userId) => { | ||||
|     if (!updateData.round) { | ||||
|       return; | ||||
|     } | ||||
|     console.log("SETTING UP INITIATIVE"); | ||||
|     if (game.settings.get('ose', 'individualInit')) { | ||||
|       console.log("PLOP"); | ||||
|     } | ||||
|   } | ||||
| ); | ||||
| 
 | ||||
| Hooks.on("renderChatLog", (app, html, data) => OseItem.chatListeners(html)); | ||||
| Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions); | ||||
| Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions); | ||||
|  |  | |||
|  | @ -242,6 +242,15 @@ | |||
|           grid-area: item-equipped; | ||||
|           justify-self: center; | ||||
|         } | ||||
|         .item-rollable { | ||||
|           &:hover .item-image { | ||||
|             background-image: url("/icons/svg/d20-grey.svg") !important; | ||||
|             cursor: pointer; | ||||
|           } | ||||
|           .item-image:hover { | ||||
|             background-image: url("/icons/svg/d20-black.svg") !important; | ||||
|           } | ||||
|         } | ||||
|         .item-name { | ||||
|           text-indent: 8px; | ||||
|           text-align: left; | ||||
|  | @ -249,18 +258,11 @@ | |||
|           height: 30px; | ||||
|           margin: 0; | ||||
|           line-height: 30px; | ||||
|           &:hover .item-image { | ||||
|             background-image: url("/icons/svg/d20-grey.svg") !important; | ||||
|             cursor: pointer; | ||||
|           } | ||||
|           .item-image { | ||||
|             flex-basis: 30px; | ||||
|             flex-grow: 0; | ||||
|             background-size: contain; | ||||
|             background-repeat: no-repeat; | ||||
|             &:hover { | ||||
|               background-image: url("/icons/svg/d20-black.svg") !important; | ||||
|             } | ||||
|           } | ||||
|           h4 { | ||||
|             margin: 0; | ||||
|  | @ -307,13 +309,17 @@ | |||
|         .item-unequipped { | ||||
|           color: rgba(0, 0, 0, 0.2); | ||||
|         } | ||||
|         a:hover { | ||||
|           color: $colorCrimson; | ||||
|           text-shadow: 0 0 5px $colorFaint, 1px 0 5px $colorFaint, 0 1px 5px $colorFaint, 1px 1px 5px $colorFaint; | ||||
|         } | ||||
|       } | ||||
|       &.spells { | ||||
|         .item-titles { | ||||
|           line-height: 24px; | ||||
|         } | ||||
|         .item-controls { | ||||
|           flex-basis: 30px; | ||||
|           flex-basis: 45px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  |  | |||
|  | @ -14,9 +14,20 @@ | |||
|     color: white; | ||||
|     padding: 2px; | ||||
|     box-shadow: 0 0 2px #FFF inset; | ||||
|     text-align: center; | ||||
|     margin: 4px 0; | ||||
|     font-size: 16px; | ||||
|     display: flex; | ||||
|     h2 { | ||||
|       border: none; | ||||
|       line-height: 30px; | ||||
|       margin: 0; | ||||
|       text-indent: 10px; | ||||
|       font-size: 16px; | ||||
|     } | ||||
|     img { | ||||
|       border: none; | ||||
|       width: 30px; | ||||
|       height: 30px; | ||||
|     } | ||||
|   } | ||||
|   .chat-details { | ||||
|     padding: 4px; | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ | |||
|     {{#each abilities as |item|}} | ||||
|     <li class="item-entry"> | ||||
|       <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|         <div class="item-name flexrow"> | ||||
|         <div class="item-name {{#if item.data.roll}}item-rollable{{/if}} flexrow"> | ||||
|           <div class="item-image" style="background-image: url({{item.img}})"></div> | ||||
|           <a> | ||||
|             <h4 title="{{item.name}}"> | ||||
|  | @ -50,10 +50,11 @@ | |||
|           </a> | ||||
|         </div> | ||||
|         <div class="field-long"> | ||||
|           {{item.roll}} | ||||
|           {{item.data.roll}} | ||||
|         </div> | ||||
|         <div class="item-controls"> | ||||
|           {{#if ../owner}} | ||||
|           <a class="item-control item-show" title='{{localize "OSE.Show"}}'><i class="fas fa-eye"></i></a> | ||||
|           <a class="item-control item-edit" title='{{localize "OSE.Edit"}}'><i class="fas fa-edit"></i></a> | ||||
|           <a class="item-control item-delete" title='{{localize "OSE.Delete"}}'><i class="fas fa-trash"></i></a> | ||||
|           {{/if}} | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ | |||
|       {{#each owned.weapons as |item|}} | ||||
|       <li class="item-entry"> | ||||
|         <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|           <div class="item-name flexrow"> | ||||
|           <div class="item-name item-rollable flexrow"> | ||||
|             <div class="item-image" style="background-image: url({{item.img}})"></div> | ||||
|             <a> | ||||
|               <h4 title="{{item.name}}"> | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ | |||
|           <a class="item-control item-memorize {{#unless item.data.memorized}}item-unequipped{{/unless}}" title="{{localize 'OSE.spells.Memorized'}}"><i | ||||
|               class="fas fa-book-open"></i></a> | ||||
|         </div> | ||||
|         <div class="item-name flexrow"> | ||||
|         <div class="item-name  {{#if item.data.roll}}item-rollable{{/if}} flexrow"> | ||||
|           <div class="item-image" style="background-image: url({{item.img}})"></div> | ||||
|           <a> | ||||
|             <h4 title="{{item.name}}"> | ||||
|  | @ -32,6 +32,7 @@ | |||
|         </div> | ||||
|         <div class="item-controls"> | ||||
|           {{#if ../../owner}} | ||||
|           <a class="item-control item-show" title='{{localize "OSE.Show"}}'><i class="fas fa-eye"></i></a> | ||||
|           <a class="item-control item-edit" title='{{localize "OSE.Edit"}}'><i class="fas fa-edit"></i></a> | ||||
|           <a class="item-control item-delete" title='{{localize "OSE.Delete"}}'><i class="fas fa-trash"></i></a> | ||||
|           {{/if}} | ||||
|  |  | |||
|  | @ -84,7 +84,7 @@ | |||
|                 {{#each abilities as |item|}} | ||||
|                 <li class="item-entry"> | ||||
|                     <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|                         <div class="item-name flexrow"> | ||||
|                         <div class="item-name {{#if item.data.roll}}item-rollable{{/if}} flexrow"> | ||||
|                             <div class="item-image" style="background-image: url({{item.img}})"></div> | ||||
|                             <h4 title="{{item.name}}"> | ||||
|                                 {{item.name~}} | ||||
|  | @ -92,6 +92,8 @@ | |||
|                         </div> | ||||
|                         <div class="item-controls"> | ||||
|                             {{#if ../owner}} | ||||
|                             <a class="item-control item-show" title='{{localize "OSE.Show"}}'><i | ||||
|                                     class="fas fa-eye"></i></a> | ||||
|                             <a class="item-control item-edit" title='{{localize "OSE.Edit"}}'><i | ||||
|                                     class="fas fa-edit"></i></a> | ||||
|                             <a class="item-control item-delete" title='{{localize "OSE.Delete"}}'><i | ||||
|  | @ -105,7 +107,7 @@ | |||
|                 {{#each section as |item|}} | ||||
|                 <li class="item-entry"> | ||||
|                     <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|                         <div class="item-name flexrow"> | ||||
|                         <div class="item-name {{#if (eq item.type 'weapon')}}item-rollable{{/if}}  flexrow"> | ||||
|                             <div class="item-image" style="background-image: url({{item.img}})"></div> | ||||
|                             <h4 title="{{item.name}}"> | ||||
|                                 {{item.name~}} | ||||
|  |  | |||
|  | @ -1,6 +1,9 @@ | |||
| <section class="ose chat-message"> | ||||
|     <div class="ose chat-block"> | ||||
|         <h2 class="chat-title">{{title}}</h2> | ||||
|         <div class="chat-title"> | ||||
|             <img src="{{data.img}}"> | ||||
|             <h2>{{title}}</h2> | ||||
|         </div> | ||||
|         <div class="chat-details"> | ||||
|             <div class="roll-result">{{{result.details}}}</div> | ||||
|         </div> | ||||
|  |  | |||
|  | @ -1,6 +1,9 @@ | |||
| <section class="ose chat-message"> | ||||
|     <div class="ose chat-block"> | ||||
|         <h2 class="chat-title">{{title}}</h2> | ||||
|         <div class="chat-title"> | ||||
|             <img src="{{data.img}}"> | ||||
|             <h2>{{title}}</h2> | ||||
|         </div> | ||||
|         {{#if result.details}}<div class="chat-details">{{{result.details}}}</div>{{/if}} | ||||
|         {{#if result.isFailure}}<div class='roll-result roll-fail'><b>{{localize 'OSE.Failure'}}</b> ({{result.target}}) | ||||
|         </div>{{/if}} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue